Почему я получаю отрицательные отклонения в OpenMx?

Я знаком с R, но новичок в моделировании структурных уравнений (SEM) и пакете . Я пытаюсь смоделировать некоторые данные, а затем построить модель SEM (которая, как я знаю, неоптимальна) в формате . Если вам интересно, вот коды, хотя я не думаю, что это необходимо, так как мой вопрос о выводе довольно технический. Итак, если вы хотите, просто перейдите к выводу, который я представляю ниже. Сначала я имитирую данные, используя 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,8,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,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","-0.45","","0","0","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, нагрузка на фактор один. Переменные с 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','tempoPar','filhotes','tempoCui','alimentação',
'alarme','dist','latencia')

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

manifestCuidado=c('tempoCui','alimentação','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,1,1,1,1,1)), 
mxPath(from="PropCopula",to=manifestCopula,values=c(0.5,0.5,0.5)), 
mxPath(from="Cuidado",to=manifestCuidado,values=c(0.5,0.5,0.5)), 
mxPath(from="Boldness",to=manifestBold,values=c(0.5,0.5)), 
mxPath(from="PropCopula",to="Cuidado",arrows=2,values=0.5), 
mxPath(from="Boldness",to=c("PropCopula","Cuidado"),values=c(0.5,0.5)), 
mxPath(from="sexo",to=c("PropCopula","Cuidado"),values=c(0.5,0.5)), 
mxPath(from="sexo",arrows=2,free=F,values=1), 
mxPath(from="one",to="sexo",arrows=1,free=F,values=0), 
mxPath(from=latent,arrows=2,free=F,values=c(1,1,1)), 
mxThreshold(vars="sexo",nThresh=1,free=T,values=0),
mxCI(c("A[10,9]","A[11,9]","S[10,11]","A[10,12]","A[11,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

Как видно, дисперсия латенсии (20-й параметр) отрицательна. Это происходит со многими различными переменными в разных симуляциях, которые я запускал. Может кто-нибудь, пожалуйста, дайте мне подсказку, почему это происходит?

0 ответов

Другие вопросы по тегам