0

我在 lavaan 创建了一个 SEM 模型,它非常适合我的数据。我使用以下方法检查了生成的协方差矩阵:

cov1 <- lavInspect(my_fit, what="fitted")$cov

它产生了这个矩阵(变量本身不感兴趣)

             dpl    cns    par    cbi   med
dpl          0.046                            
cns          0.032  0.064                     
par          0.042  0.042  0.082              
cbi          0.104  0.112  0.164  0.488       
med          0.007  0.009  0.008  0.020 0.012 

我将其转换为相关矩阵cov2cor

cor1 <- cov2cor(cov1)

产生了这个:

             dpl    cns    par    cbi   med
dpl          1.000                            
cns          0.587  1.000                     
par          0.692  0.573  1.000              
cbi          0.692  0.630  0.821  1.000       
med          0.305  0.327  0.248  0.261 1.000 

到目前为止,一切都很好。只是为了测试一下,我决定用cor2cov它来看看它是否让我回到了原来的 corr 矩阵。为此,我需要相关性和变量 sd's out of cor1. 所以

sd1 <- describe(cor1)$sd
cov2 <- cor2cov(cor1, sd1)

这是cov2矩阵:

             dpl    cns    par    cbi   med
dpl          0.062                            
cns          0.035  0.058                     
par          0.049  0.039  0.080              
cbi          0.047  0.042  0.064  0.075       
med          0.024  0.025  0.023  0.023 0.103 

唉,与它可能应该cov2是不完全相同的。cov1关于为什么这些函数会产生不同结果的任何想法,更重要的是,哪一个是“正确”的 cov 矩阵以供进一步分析?

4

1 回答 1

0

我猜你为 sd 得到的东西可能不正确。因为我没有这些,所以我从差异中构建了它们。当我按照中的示例进行操作时,?lavaan::cor2cov我得到了:

 vnames <- c('dpl' ,   'cns',    'par',    'cbi',   'med')
 entries <- '0.046                            
           0.032  0.064                     
           0.042  0.042  0.082              
           0.104  0.112  0.164  0.488       
           0.007  0.009  0.008  0.020 0.012'

 cov1 <- lavaan::getCov(entries, names=vnames)
 sds <- sqrt(diag(cov1))

 cor1 <- cov2cor(cov1)
 cor1
          dpl       cns       par       cbi       med
dpl 1.0000000 0.5897678 0.6838541 0.6941359 0.2979398
cns 0.5897678 1.0000000 0.5797655 0.6337502 0.3247595
par 0.6838541 0.5797655 1.0000000 0.8198360 0.2550307
cbi 0.6941359 0.6337502 0.8198360 1.0000000 0.2613542
med 0.2979398 0.3247595 0.2550307 0.2613542 1.0000000
 cov2 <- lavaan::cor2cov(cor1,sds=sds)
 cov2
      dpl   cns   par   cbi   med
dpl 0.046 0.032 0.042 0.104 0.007
cns 0.032 0.064 0.042 0.112 0.009
par 0.042 0.042 0.082 0.164 0.008
cbi 0.104 0.112 0.164 0.488 0.020
med 0.007 0.009 0.008 0.020 0.012

> all.equal(cov1,cov2)
[1] TRUE
于 2021-08-20T23:26:34.740 回答