SEM建模帮助(OpenMx,polycor)


10

我尝试将SEM应用于一个数据集时遇到很多问题。

我们假设存在5个潜在因子A,B,C,D,E,分别具有指标。A1至A5(有序因子),B1至B3(定量),C1,D1,E1(所有后三个有序因子,E1只有2个水平。我们对所有因子之间的协方差很感兴趣。

我曾尝试OpenMx这样做。这是我的一些尝试:

  • 我首先尝试对所有有序因子使用阈值矩阵,但是收敛失败。

  • 我决定hetcor通过库中的函数使用多色/多序列相关性来代替原始数据polycor(我计划自举样本以获得置信区间)。它也无法收敛!

  • 我试图限制个人使用完整的数据,但是它也失败了!

我的第一个问题是:是否有一种自然的方式来解释这些故障?

我的第二个问题是:我该怎么办???

编辑:对于将来可能遇到相同问题的读者,在阅读完polycor... 中的功能代码后,解决方案仅是hetcor()与option 一起使用std.err=FALSE。这给出的估计与StasK给出的估计非常相似。我现在没有时间去更好地了解这里发生的事情!StasK很好地回答了以下问题。

我还有其他问题,但在此之前,这里是一个带有RData文件的URL,该文件包含一个L1仅包含完整数据的数据框:data_sem.RData

这里的几行代码显示的失败hetcor

> require("OpenMx")
> require("polycor")
> load("data_sem.RData")
> hetcor(L1)
Erreur dans cut.default(scale(x), c(-Inf, row.cuts, Inf)) : 
  'breaks' are not unique
De plus : Il y a eu 11 avis (utilisez warnings() pour les visionner)
> head(L1)
   A1 A2 A3 A4 A5       B1       B2       B3 C1 D1 E1
1   4  5  4  5  7 -0.82759  0.01884 -3.34641  4  6  1
4   7  5  0  4  6 -0.18103  0.14364  0.35730  0  1  0
7   7  5  7  6  9 -0.61207 -0.18914  0.13943  0  0  0
10  5  5 10  7  3 -1.47414  0.10204  0.13943  2  0  0
11  7  5  8  9  9 -0.61207  0.06044 -0.73203  0  2  0
12  5  5  9 10  5  0.25000 -0.52192  1.44662  0  0  0

但是我仍然可以以非常肮脏的方式计算相关性或协方差矩阵,将我的有序因子视为定量变量:

> Cor0 <- cor(data.frame(lapply(L1, as.numeric)))

这是一段OpenMx代码以及我的下一个问题:以下模型正确吗?没有太多的免费参数?

manif <- c("A1","A2","A3","A4","A5", "B1","B2","B3", "C1", "D1", "E1");

model1 <- mxModel(type="RAM",
        manifestVars=manif, latentVars=c("A","B","C","D","E"),
        # factor variance
        mxPath(from=c("A","B","C","D","E"), arrows=2, free=FALSE, values = 1),
        # factor covariance
        mxPath(from="A", to="B",  arrows=2, values=0.5),
        mxPath(from="A", to="C",  arrows=2, values=0.5),
        mxPath(from="A", to="D",  arrows=2, values=0.5),
        mxPath(from="A", to="E",  arrows=2, values=0.5),
        mxPath(from="B", to="C",  arrows=2, values=0.5),
        mxPath(from="B", to="D",  arrows=2, values=0.5),
        mxPath(from="B", to="E",  arrows=2, values=0.5),
        mxPath(from="C", to="D",  arrows=2, values=0.5),
        mxPath(from="C", to="E",  arrows=2, values=0.5),
        mxPath(from="D", to="E",  arrows=2, values=0.5),
        # factors → manifest vars
        mxPath(from="A", to=c("A1","A2","A3","A4","A5"), free=TRUE, values=1),
        mxPath(from="B", to=c("B1","B2","B3"), free=TRUE, values=1),
        mxPath(from="C", to=c("C1"), free=TRUE, values=1),
        mxPath(from="D", to=c("D1"), free=TRUE, values=1),
        mxPath(from="E", to=c("E1"), free=TRUE, values=1),
        # error terms
        mxPath(from=manif, arrows=2, values=1, free=TRUE),
        # data
        mxData(Cor0, type="cor",numObs=dim(L1)[1])
       );

最后一个问题。有了这个模型(让我们暂时忘记计算相关矩阵的不合适方法),我运行OpenMx:

> mxRun(model1) -> fit1
Running untitled1 
> summary(fit1)

在摘要中,这是:

observed statistics:  55 
estimated parameters:  32 
degrees of freedom:  23 
-2 log likelihood:  543.5287 
saturated -2 log likelihood:  476.945 
number of observations:  62 
chi-square:  66.58374 
p:  4.048787e-06 

尽管参数很多,但拟合似乎很差。这意味着什么?这是否意味着我们应该在清单变量之间添加协方差?

预先非常感谢您的所有回答,我正逐渐变得发疯...

Answers:


10

您必须已经发现了中的错误polycor,您希望将其报告给John Fox。使用我的polychoric软件包,在Stata中一切运行正常:

    . polychoric *

    Polychoric correlation matrix

               A1          A2          A3          A4          A5          B1          B2          B3          C1          D1          E1
   A1           1
   A2   .34544812           1
   A3   .39920225   .19641726           1
   A4   .09468652   .04343741   .31995685           1
   A5   .30728339   -.0600463   .24367634   .18099061           1
   B1   .01998441  -.29765985   .13740987   .21810968   .14069473           1
   B2  -.19808738   .17745687  -.29049459  -.21054867   .02824307  -.57600551          1
   B3   .17807109  -.18042045   .44605383   .40447746   .18369998   .49883132  -.50906364           1
   C1  -.35973454  -.33099295  -.19920454  -.14631621  -.36058235   .00066762  -.05129489  -.11907687           1
   D1   -.3934594  -.21234022  -.39764587  -.30230591  -.04982743  -.09899428   .14494953   -.5400759   .05427906           1
   E1  -.13284936   .17703745  -.30631236  -.23069382  -.49212315  -.26670382   .24678619  -.47247566    .2956692   .28645516           1

对于与单一指标测得的潜变量(CDE),则需要修复的指示器的方差在连续版本的它,否则潜在变量的规模不被识别。考虑到二进制/普通响应,它通过(普通)概率类型链接始终固定为1,这可能意味着您必须假设潜伏值等于观察到的指标,或者必须假设标准化负荷。这实质上使您的模型等效于CFA模型,在CFA模型中,您具有分别用{A1-A5,C1,D1,E1}和{B1-B3,C1,D1,E1}测量的潜在因子A和B。


非常感谢您抽出宝贵的时间尝试此操作!那么:有没有人建议在R中计算这些相关性呢?
猫王2012年

关于这些因素,我意识到bas潜伏在其中-但我不确定我是否完全理解。在我写的文章中,我有如下关系: —除了这个实际上是这个的多义性。即使它不是顺序的,而是定量的,因为我只给出相关性(甚至没有协方差),但我不知道如何获取的小数。我的意思不仅是的方差,还包括的值。但是修复它会使拟合度变差!当我们拟合原始数据时,我会更好地理解,但是不幸的是,这失败了……一个一世=α一世一个+ϵ一个一世一个一世ϵα一世
Elvis 2012年

对于只有一个指标的因素,情况最糟糕……!实际上,C1,D1,E1是几个变量的总和。当我提供数据时,他们就像这样,我索要整个数据集,因为我认为这是可取的,但是在某些时候,我又切换回了总和,因为没有任何工作正常...如果我能找到一种计算方法这些与R的相关性我将使用完整的数据集。
猫王2012年

好吧,现在我觉得更好,我认为我明白了。
猫王2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.