Calculates partial correlations and partial significance tests.
cerror(formula., modelList, data = NULL)
A formula specifying the two correlated variables using %~~%
.
A list of structural equations.
A data.frame
containing the data used in the list of equations.
Returns a data.frame
containing the (partial) correlation and
associated significance test.
If the variables are exogenous, then the correlated error is the raw bivariate correlation.
If the variables are endogenous, then the correlated error is the partial correlation, accounting for the influence of any predictors.
The significance of the correlated error is conducted using cor.test
if the variables are exogenous. Otherwise, a t-statistic is constructed and
compared to a t-distribution with N - k - 2 degrees of freedom (where N is
the total number of replicates, and k is the total number of variables
informing the relationship) to derive a P-value.
# Generate example data
dat <- data.frame(x1 = runif(50),
x2 = runif(50), y1 = runif(50),
y2 = runif(50))
# Create list of structural equations
sem <- psem(
lm(y1 ~ x1 + x2, dat),
lm(y2 ~ y1 + x1, dat)
)
# Look at correlated error between x1 and x2
# (exogenous)
cerror(x1 %~~% x2, sem, dat)
#> Response Predictor Estimate Std.Error DF Crit.Value P.Value
#> df ~~x1 ~~x2 -0.148979 NA 48 -1.043805 0.3018042
# Same as cor.test
with(dat, cor.test(x1, x2))
#>
#> Pearson's product-moment correlation
#>
#> data: x1 and x2
#> t = -1.0438, df = 48, p-value = 0.3018
#> alternative hypothesis: true correlation is not equal to 0
#> 95 percent confidence interval:
#> -0.4103119 0.1349655
#> sample estimates:
#> cor
#> -0.148979
#>
# Look at correlatde error between x1 and y1
# (endogenous)
cerror(y1 %~~% x1, sem, dat)
#> Error in eval(mf, parent.frame()): object 'dat' not found
# Not the same as cor.test
# (accounts for influence of x1 and x2 on y1)
with(dat, cor.test(y1, x1))
#>
#> Pearson's product-moment correlation
#>
#> data: y1 and x1
#> t = -0.50298, df = 48, p-value = 0.6173
#> alternative hypothesis: true correlation is not equal to 0
#> 95 percent confidence interval:
#> -0.3438266 0.2101751
#> sample estimates:
#> cor
#> -0.07240863
#>
# Specify in psem
sem <- update(sem, x1 %~~% y1)
coefs(sem)
#> Error in eval(mf, parent.frame()): object 'dat' not found