Utility Functions For Covariance Matrices
getCov.RdConvenience functions to deal with covariance and correlation matrices.
Arguments
- x
The elements of the covariance matrix. Either inside a character string or as a numeric vector. In the former case, the function
lav_char2numis used to convert the numbers (inside the character string) to numeric values.- lower
Logical. If
TRUE, the numeric values inxare the lower-triangular elements of the (symmetric) covariance matrix only. IfFALSE,xcontains the upper triangular elements only. Note we always assumed the elements are provided row-wise!- diagonal
Logical. If
TRUE, the numeric values inxinclude the diagonal elements. IfFALSE, a unit diagonal is assumed.- sds
A numeric vector containing the standard deviations to be used to scale the elements in
xor the correlation matrixRinto a covariance matrix.- names
The variable names of the observed variables.
- s
Character string containing numeric values; comma's and semi-colons are ignored.
- R
A correlation matrix, to be scaled into a covariance matrix.
Details
The lav_getcov function is typically used to input the lower
(or upper) triangular elements of a (symmetric) covariance matrix. In many
examples found in handbooks, only those elements are shown. However, lavaan
needs a full matrix to proceed.
The lav_cor2cov function is the inverse of the cov2cor
function, and scales a correlation matrix into a covariance matrix given
the standard deviations of the variables. Optionally, variable names can
be given.
Examples
# The classic Wheaton et. al. (1977) model
# panel data on he stability of alienation
lower <- '
11.834,
6.947, 9.364,
6.819, 5.091, 12.532,
4.783, 5.028, 7.495, 9.986,
-3.839, -3.889, -3.841, -3.625, 9.610,
-21.899, -18.831, -21.748, -18.775, 35.522, 450.288 '
# convert to a full symmetric covariance matrix with names
wheaton.cov <- lav_getcov(lower, names=c("anomia67","powerless67", "anomia71",
"powerless71","education","sei"))
# the model
wheaton.model <- '
# measurement model
ses =~ education + sei
alien67 =~ anomia67 + powerless67
alien71 =~ anomia71 + powerless71
# equations
alien71 ~ alien67 + ses
alien67 ~ ses
# correlated residuals
anomia67 ~~ anomia71
powerless67 ~~ powerless71
'
# fitting the model
fit <- sem(wheaton.model, sample.cov=wheaton.cov, sample.nobs=932)
# showing the results
summary(fit, standardized=TRUE)
#> lavaan 0.6-21 ended normally after 84 iterations
#>
#> Estimator ML
#> Optimization method NLMINB
#> Number of model parameters 17
#>
#> Number of observations 932
#>
#> Model Test User Model:
#>
#> Test statistic 4.735
#> Degrees of freedom 4
#> P-value (Chi-square) 0.316
#>
#> Parameter Estimates:
#>
#> Standard errors Standard
#> Information Expected
#> Information saturated (h1) model Structured
#>
#> Latent Variables:
#> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
#> ses =~
#> education 1.000 2.607 0.842
#> sei 5.219 0.422 12.364 0.000 13.609 0.642
#> alien67 =~
#> anomia67 1.000 2.663 0.774
#> powerless67 0.979 0.062 15.895 0.000 2.606 0.852
#> alien71 =~
#> anomia71 1.000 2.850 0.805
#> powerless71 0.922 0.059 15.498 0.000 2.628 0.832
#>
#> Regressions:
#> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
#> alien71 ~
#> alien67 0.607 0.051 11.898 0.000 0.567 0.567
#> ses -0.227 0.052 -4.334 0.000 -0.207 -0.207
#> alien67 ~
#> ses -0.575 0.056 -10.195 0.000 -0.563 -0.563
#>
#> Covariances:
#> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
#> .anomia67 ~~
#> .anomia71 1.623 0.314 5.176 0.000 1.623 0.356
#> .powerless67 ~~
#> .powerless71 0.339 0.261 1.298 0.194 0.339 0.121
#>
#> Variances:
#> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
#> .education 2.801 0.507 5.525 0.000 2.801 0.292
#> .sei 264.597 18.126 14.597 0.000 264.597 0.588
#> .anomia67 4.731 0.453 10.441 0.000 4.731 0.400
#> .powerless67 2.563 0.403 6.359 0.000 2.563 0.274
#> .anomia71 4.399 0.515 8.542 0.000 4.399 0.351
#> .powerless71 3.070 0.434 7.070 0.000 3.070 0.308
#> ses 6.798 0.649 10.475 0.000 1.000 1.000
#> .alien67 4.841 0.467 10.359 0.000 0.683 0.683
#> .alien71 4.083 0.404 10.104 0.000 0.503 0.503
#>