为什么我在 OpenMx 中得到负方差?

问题描述

我熟悉 R,但对结构方程建模 (SEM) 和 OpenMx 包相当陌生。 我正在尝试模拟一些数据,然后在 OpenMx 中构建一个 SEM 模型(我知道这是次优的)。如果您感兴趣,这里是代码,尽管我认为没有必要,因为我的问题是关于 OpenMx 输出的技术性问题。所以,如果你愿意,只需跳到我在下面展示的输出。 首先,我使用 simsem

模拟数据
loading<-matrix(0,8,3)

loading[1:3,1]<-c('ca1','ca2','ca3')
loading[4:6,2]<-c('ca4','ca5','ca6')
loading[7:8,3]<-c('ca7','ca8')

lodValues<-matrix(0,3)
lodValues[1:3,1]<-0.6
lodValues[4:6,2]<-0.7
lodValues[7:8,3]<-0.85

matLoadings<-bind(loading,lodValues)

error.cor<-matrix(0,8)
diag(error.cor)<-1
residuo<-binds(error.cor)

latent.cor.fix<-matrix(NA,3,3)
diag(latent.cor.fix)<-1

latent.cor.free<-c("","-0.45","0","","")

cor.latente<-binds(latent.cor.fix,latent.cor.free)

modelo<-model(LY=matLoadings,RPS=cor.latente,RTE=residuo,modelType="CFA")

summary(modelo)

dados<-generate(modelo,250)

library(plyr)

dados<-rename(dados,c('y1'='copulas','y2'='tempoPar','y3'='filhotes','y4'='tempoCui','y5'='alimentação','y6'='alarme','y7'='dist','y8'='latencia'))

sexo<-c(rep(1,125),rep(2,125))

dados<-data.frame(dados,sexo)

attach(dados)

基本上,这模拟了具有 9 个测量变量(8 个连续变量和 1 个具有 2 个级别(性别)的分类变量)的数据。第 3 个,加载因子 1。变量 4 到 6 加载因子 2,变量 7 和 8 加载因子 3。因子 1 和 2 负相关,因子 3 与其他任何一个都不相关。二进制数据(性别)与任何内容无关。 到现在为止还挺好。但这里是棘手的部分。我将使用 OpenMx 运行一个 SEM 模型,其中因子 1 和 2 相关,因子 3 还与 1 和 2 相关,性别也与因子 1 和 2 相关[我知道该模型不正确,但就是这样正是我想要的]。代码如下:

manifest=c('copulas','tempoPar','filhotes','tempoCui','alimentação','alarme','dist','latencia','sexo')

manifestcont=c('copulas','latencia')

manifestCopula=c('copulas','filhotes')

manifestCuidado=c('tempoCui','alarme')

manifestBold=c('dist','latencia')

latent=c("PropCopula","Cuidado","Boldness")

dados$sexo<-mxFactor(dados$sexo,levels=c(1,2))

modelo<-mxModel(manifestVars=manifest,latentVars=latent,type='RAM',mxData(dados,type='raw'),mxPath(from=manifestcont,arrows=2,values=c(1,1,1)),mxPath(from="PropCopula",to=manifestCopula,values=c(0.5,0.5,0.5)),mxPath(from="Cuidado",to=manifestCuidado,mxPath(from="Boldness",to=manifestBold,to="Cuidado",values=0.5),to=c("PropCopula","Cuidado"),mxPath(from="sexo",free=F,values=1),mxPath(from="one",to="sexo",arrows=1,values=0),mxPath(from=latent,mxThreshold(vars="sexo",nThresh=1,free=T,mxCI(c("A[10,9]","A[11,"S[10,11]","A[10,12]",12]")))


mxOption(NULL,"Default optimizer","NPSOL")

ativar<-mxRun(modelo,intervals=T)
summary(ativar,refModels=mxRefModels(ativar,run=T))

我相信我的代码都是正确的,但是当我分析输出时,我的测量变量方差估计与原始变量方差不同。这可能只是模型没有正确估计参数,但有时甚至会出现负方差。这是输出的开始。

free parameters:
                         name     matrix         row         col      Estimate
1          untitled10.A[10,9]          A  PropCopula        sexo  0.1626987569
2          untitled10.A[11,9]          A     Cuidado        sexo -0.0700114910
3          untitled10.A[1,10]          A     copulas  PropCopula  0.5439766716
4          untitled10.A[2,10]          A    tempoPar  PropCopula  0.6468552595
5          untitled10.A[3,10]          A    filhotes  PropCopula  0.5442606676
6          untitled10.A[4,11]          A    tempoCui     Cuidado  0.7325549432
7          untitled10.A[5,11]          A alimentação     Cuidado  0.6759625135
8          untitled10.A[6,11]          A      alarme     Cuidado  0.6887856140
9          untitled10.A[7,12]          A        dist    Boldness  0.3121049580
10         untitled10.A[8,12]          A    latencia    Boldness  2.1025288414
11        untitled10.A[10,12]          A  PropCopula    Boldness  0.0762317301
12        untitled10.A[11,12]          A     Cuidado    Boldness  0.0198797935
13          untitled10.S[1,1]          S     copulas     copulas  0.7634290659
14          untitled10.S[2,2]          S    tempoPar    tempoPar  0.5785406293
15          untitled10.S[3,3]          S    filhotes    filhotes  0.6433677420
16          untitled10.S[4,4]          S    tempoCui    tempoCui  0.4869136162
17          untitled10.S[5,5]          S alimentação alimentação  0.5822295519
18          untitled10.S[6,6]          S      alarme      alarme  0.4728346723
19          untitled10.S[7,7]          S        dist        dist  0.8710079267
20          untitled10.S[8,8]          S    latencia    latencia -3.4849845371
21        untitled10.S[10,11]          S  PropCopula     Cuidado -0.4196223050

如您所见,“latencia”(第 20 个参数)的方差为负。在我运行的不同模拟中,许多不同的变量都会发生这种情况。 有人可以告诉我为什么会发生这种情况吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)