RSA | R Documentation |
Performs several RSA model tests on a data set with two predictors
RSA( formula, data = NULL, center = "none", scale = "none", na.rm = FALSE, out.rm = TRUE, breakline = FALSE, models = "default", cubic = FALSE, verbose = TRUE, add = "", estimator = "MLR", se = "robust", missing = NA, control.variables = c(), center.control.variables = FALSE, ... )
formula |
A formula in the form |
data |
A data frame with the variables |
center |
Method for centering the predictor variables before the analysis. Default option ("none") applies no centering. "pooled" centers the predictor variables on their pooled sample mean, which preserves the commensurability of the predictor scales. "variablewise" centers the predictor variables on their respective sample mean. You should think carefully before applying the "variablewise" option, as centering the predictor variables at different values (e.g., their respective means) can affect the commensurability of the predictor scales. |
scale |
Method for scaling the predictor variables before the analysis. Default option ("none") applies no scaling. "pooled" scales the predictor variables on their pooled sample SD, which preserves the commensurability of the predictor scales. "variablewise" scales the predictor variables on their respective sample SD. You should think carefully before applying the "variablewise" option, as scaling the predictor variables at different values (e.g., their respective SDs) can affect the commensurability of the predictor scales. |
na.rm |
Remove missings before proceeding? |
out.rm |
Should outliers according to Bollen & Jackman (1980) criteria be excluded from the analyses? In large data sets this analysis is the speed bottleneck. If you are sure that no outliers exist, set this option to FALSE for speed improvements. |
breakline |
Should the breakline in the unconstrained absolute difference model be allowed (the breakline is possible from the model formulation, but empirically rather unrealistic ...). Defaults to |
models |
A vector with names of all models that should be computed. Should be any from |
cubic |
Should the cubic models with the additional terms Y^3, XY^2, YX^2, and X^3 be included? |
verbose |
Should additional information during the computation process be printed? |
add |
Additional syntax that is added to the lavaan model. Can contain, for example, additional constraints, like "p01 == 0; p11 == 0" |
estimator |
Type of estimator that should be used by lavaan. Defaults to "MLR", which provides robust standard errors, a robust scaled test statistic, and can handle missing values. If you want to reproduce standard OLS estimates, use |
se |
Type of standard errors. This parameter gets passed through to the |
missing |
Handling of missing values (this parameter is passed to the |
control.variables |
A string vector with variable names from |
center.control.variables |
Should the control variables be centered before analyses? This can improve interpretability of the intercept, which will then reflect the predicted outcome value at the point (X,Y)=(0,0) when all control variables take their respective average values. |
... |
Additional parameters passed to the |
Even if the main variables of the model are normally distributed, their squared terms and interaction terms are necessarily non-normal. By default, the RSA function uses a scaled test statistic (test="Satorra-Bentler"
) and robust standard errors (se="robust"
), which are robust against violations of the normality assumption.
Why does my standard polynomial regression give different p-values and SEs than the RSA package? Shouldn't they be the same? This is due to the robust standard errors employed in the RSA package. If you set estimator="ML"
and se="standard"
, you get p-values that are very close to the standard approach. (They might still not be identical because the standard regression approach usually uses an OLS estimator and RSA uses an ML estimator).
Experimental feature (use with caution!): You can also fit binary outcome variables with a probit link function. For that purpose, the response variable has to be defined as "ordered", and the lavaan
estimator changed to "WLSMV": r1.binary <- RSA(z.binary~x*y, df, ordered="z.binary", estimator="WLSMV", model="full")
(for more details see the help file of the sem
function in the lavaan
package.). The results can also be plotted with probabilities on the z axis using the probit link function: plot(r1.binary, link="probit", zlim=c(0, 1), zlab="Probability")
. For plotting, the binary outcome variable must be coded with 0 and 1 (not as a factor).
lavaan
at the moment only supports a probit link function for binary outcomes, not a logit link. Please be aware that this experimental feature can fit the full model, but most other functions (such as model comparisons) might break and errors might show up.
For explanations of the meaning of the various different models that can be estimated, please see Schönbrodt (2016) for the second-order models (i.e., all models but "CA", "RRCA", "CL", "RRCL") and Humberg et al. (in press) for the third-order (cubic) models ("CA", "RRCA", "CL", "RRCL").
For most of the second-order models, several auxiliary parameters are computed from the estimated model coefficients (e.g., a1, ..., a5, p10, p11, p20, p21) and printed in the summary
output. They can be used to guide interpretation by means of response surface methodology. Some references that explain how to use these parameters for interpretation are Edwards (2002; comprehensive overview of response surface methodology), Humberg et al. (2019; interpretation of a1, a2, a3, a4, p10, and p11, and how to use them to investigate congruence effects), Nestler et al. (2019; interpretation of a1, a2, a3, a4, and a5, and how to use them to investigate congruence effects, see in particular Appendix A for the introduction of a5), and Schönbrodt et al. (2018; interpretation of a1, ..., a5, see in particular Appendix A for a5).
The print function provides descriptive statistics about discrepancies in the predictors (with respect to numerical congruence). A cutpoint of |delta z| > 0.5 is used. The computation generally follows the idea of Shannock et al (2010) and Fleenor et al. (1996). However, in contrast to them, we standardize to the common mean and the common SD of both predictor variables. Otherwise we would break commensurability, and a person who has x=y in the unstandardized variable could become incongruent after variable-wise standardization. See also our discussion of commensurability and scale transformation in the cubic RSA paper (Humberg et al., in press; see pp. 35 - 37 in the preprint at https://psyarxiv.com/v6m35).
Edwards, J. R. (2002). Alternatives to difference scores: Polynomial regression analysis and response surface methodology. In F. Drasgow & N. W. Schmitt (Eds.), Advances in measurement and data analysis (pp. 350–400). San Francisco, CA: Jossey-Bass.
Humberg, S., Nestler, S., & Back, M. D. (2019). Response Surface Analysis in Personality and Social Psychology: Checklist and Clarifications for the Case of Congruence Hypotheses. Social Psychological and Personality Science, 10(3), 409–419. doi:10.1177/1948550618757600
Humberg, S., Schönbrodt, F. D., Back, M. D., & Nestler, S. (in press). Cubic response surface analysis: Investigating asymmetric and level-dependent congruence effects with third-order polynomial models. Psychological Methods. doi:10.1037/met0000352
Nestler, S., Humberg, S., & Schönbrodt, F. D. (2019). Response surface analysis with multilevel data: Illustration for the case of congruence hypotheses. Psychological Methods, 24(3), 291–308. doi:10.1037/met0000199
Schönbrodt, F. D. (2016). Testing fit patterns with polynomial regression models. Retrieved from osf.io/3889z
Schönbrodt, F. D., Humberg, S., & Nestler, S. (2018). Testing similarity effects with dyadic response surface analysis. European Journal of Personality, 32(6), 627-641. doi:10.1002/per.2169
demoRSA
, plotRSA
, RSA.ST
, confint.RSA
, compare
# Compute response surface from a fake data set set.seed(0xBEEF) n <- 300 err <- 15 x <- rnorm(n, 0, 5) y <- rnorm(n, 0, 5) df <- data.frame(x, y) df <- within(df, { diff <- x-y absdiff <- abs(x-y) SD <- (x-y)^2 z.diff <- diff + rnorm(n, 0, err) z.abs <- absdiff + rnorm(n, 0, err) z.sq <- SD + rnorm(n, 0, err) z.add <- diff + 0.4*x + rnorm(n, 0, err) z.complex <- 0.4*x + - 0.2*x*y + + 0.1*x^2 - 0.03*y^2 + rnorm(n, 0, err) }) df$z.binary <- as.numeric(df$z.sq < median(df$z.sq)) ## Not run: r1 <- RSA(z.sq~x*y, df) summary(r1) compare(r1) plot(r1) plot(r1, model="SRSQD") plot(r1, model="full", type="c") getPar(r1, "coef") # print model parameters including SE and CI RSA.ST(r1) # get surface parameters # Example with binary outcome (probit regression, see Details; Experimental and a dirty workaround!). # The standard summary output does not work; you have to access the full model directly: r1.binary <- RSA(z.binary~x*y, df, ordered="z.binary", estimator="WLSMV", model="full", se="standard") # --> ignore the warning summary(r1.binary$models[["full"]]) plot(r1.binary, link="probit", zlim=c(0, 1), zlab="Probability") # Motive congruency example data(motcon) r.m <- RSA(postVA~ePow*iPow, motcon) # Get boostrapped CIs with 10 bootstrap samples (usually this should be set to 5000 or higher), # only from the SSQD model c1 <- confint(r.m, model="SSQD", method="boot", R=10) # Plot the final model plot(r.m, model="RR", xlab="Explicit power motive", ylab="Implicit power motive", zlab="Affective valence") # Inclusion of control variables: Fake data on self-other agreement data(selfother) r.c <- RSA(liking~IQ_self*IQ_friend, center="pooled", control.variables=c("age", "int"), center.control.variables = TRUE, data=selfother) summary(r.c) ## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.