getCov: Utility Functions For Covariance Matrices

View source: R/lav_utils.R

getCovR Documentation

Utility Functions For Covariance Matrices


Convenience functions to deal with covariance and correlation matrices.


getCov(x, lower = TRUE, diagonal = TRUE, sds = NULL,
       names = paste("V", 1:nvar, sep=""))
cor2cov(R, sds, names = NULL)



The elements of the covariance matrix. Either inside a character string or as a numeric vector. In the former case, the function char2num is used to convert the numbers (inside the character string) to numeric values.


Logical. If TRUE, the numeric values in x are the lower-triangular elements of the (symmetric) covariance matrix only. If FALSE, x contains the upper triangular elements only. Note we always assumed the elements are provided row-wise!


Logical. If TRUE, the numeric values in x include the diagonal elements. If FALSE, a unit diagonal is assumed.


A numeric vector containing the standard deviations to be used to scale the elements in x or the correlation matrix R into a covariance matrix.


The variable names of the observed variables.


Character string containing numeric values; comma's and semi-colons are ignored.


A correlation matrix, to be scaled into a covariance matrix.


The 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 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.


# The classic Wheaton et. al. (1977) model 
# panel data on he stability of alienation
lower <- '
  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 <- getCov(lower, names=c("anomia67","powerless67", "anomia71",

# 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 documentation built on Jan. 9, 2023, 9:05 a.m.