the continuous part of the model is not positive definite

Posted on
No user picture. lior abramson Joined: 07/21/2017
Hello,
I would like to ask your help with an error message that I cannot figure out.

First, some general details about my openMx version:

OpenMx version: 2.7.17 [GIT v2.7.17]
R version: R version 3.4.4 (2018-03-15)
Platform: x86_64-w64-mingw32
Default optimiser: CSOLNP
NPSOL-enabled?: No
OpenMP-enabled?: No

I am trying to do a bivariate Cholesky model with paths specifications, with a syntax that worked before...
For some reason I get the following error message:

Running ACE_Cholesky with 11 parameters
Error: The job for model 'ACE_Cholesky' exited abnormally with the error message: fit is not finite (The continuous part of the model implied covariance (loc2) is not positive definite in data 'DZ.data' row 510. Detail:
covariance = matrix(c( # 4x4
0.457441, 0.22872, 0.686161, 0
, 0.22872, 0.457441, 0.686161, 0
, 0.686161, 0.686161, 1.95546, 0
, 0, 0, 0, 0), byrow=TRUE, nrow=4, ncol=4)
)
In addition: Warning message:
In model 'ACE_Cholesky' Optimizer returned a non-zero status code 10. Starting values are not feasible. Consider mxTryHard()

I tried to change the starting values and also to change the command to mxTryHard. I have no idea what to do with the first error message (there is nothing different in row 510 in the dataset).

I attach the syntax itself. I would really appreciate your help in solving the problem.
Thank you very much


require("OpenMx")

#start values
meanEMP1 <-mean(na.omit(D$empathy3Mom_1))
meanEMP2 <-mean(na.omit(D$empathy3Mom_2))
StartMeanEMP <-mean(c(meanEMP1,meanEMP2))

meanSOC1 <-mean(na.omit(D$sociableMom3_1))
meanSOC2 <-mean(na.omit(D$sociableMom3_2))
StartMeanSOC <-mean(c(meanSOC1,meanSOC2))

EMP <-c(D$empathy3Mom_1,D$empathy3Mom_2)
StartVarEMP.ACE <-sqrt(var(na.omit(EMP))/3)

SOC <-c(D$sociableMom3_1, D$sociableMom3_2)
StartVarSOC.ACE <-sqrt(var(na.omit(SOC))/3)

# Select Variables for Analysis
selVars <- c('sociableMom3_1','sociableMom3_2','empathy3Mom_1','empathy3Mom_2')
aceVars <- c("A1_SOC","C1_SOC","E1_SOC","A2_SOC","C2_SOC","E2_SOC",
"A1_EMP","C1_EMP","E1_EMP","A2_EMP","C2_EMP","E2_EMP")

# Select Data for Analysis
mz <- subset(D, zygosity==1,selVars)
dz <- subset(D, zygosity==2,selVars)

# Path objects for Multiple Groups
manifestVars=selVars
latentVars=aceVars

# specify paths for the variances and means of the latent variables
latVariances <- mxPath( from=aceVars, arrows=2,
free=FALSE, values=1 )

# means of latent variables
latMeans <- mxPath( from="one", to=aceVars, arrows=1,
free=FALSE, values=0 )

#specify paths for the means of the observed variables.
obsMeans <- mxPath( from="one", to=selVars, arrows=1,
free=c(T,T,T,T),
values=c(StartMeanEMP, StartMeanEMP,StartMeanSOC, StartMeanSOC),
labels=c("mean_EMP" ,"mean_EMP","mean_SOC","mean_SOC"
) )

# path coefficients for twin 1.
pathAceT1_SOC <- mxPath( from=c("A1_SOC","C1_SOC","E1_SOC"),
to="sociableMom3_1", arrows=1, free=c(T,T,T),
values=c(StartVarSOC.ACE,StartVarSOC.ACE,StartVarSOC.ACE),
label=c("aSOC","cSOC" ,"eSOC"))

pathAceT1_EMP <- mxPath( from=c("A1_SOC","C1_SOC","E1_SOC","A1_EMP","C1_EMP","E1_EMP"),
to="empathy3Mom_1", arrows=1, free=c(T,T,T,T,T,T),
values= c(StartVarSOC.ACE,StartVarSOC.ACE,StartVarSOC.ACE,
StartVarEMP.ACE,StartVarEMP.ACE,StartVarEMP.ACE),
label=c("aSOC_EMP","cSOC_EMP" ,"eSOC_EMP","aEMP","cEMP" ,"eEMP") )

# path coefficients for twin 2
pathAceT2_SOC <- mxPath( from=c("A2_SOC","C2_SOC","E2_SOC"),
to="sociableMom3_2", arrows=1, free=c(T,T,T),
values=c(StartVarSOC.ACE,StartVarSOC.ACE,StartVarSOC.ACE),
label=c("aSOC","cSOC" ,"eSOC"))

pathAceT2_EMP <- mxPath( from=c("A2_SOC","C2_SOC","E2_SOC","A2_EMP","C2_EMP","E2_EMP"),
to="empathy3Mom_1", arrows=1, free=c(T,T,T,T,T,T),
values= c(StartVarSOC.ACE,StartVarSOC.ACE,StartVarSOC.ACE,StartVarEMP.ACE,StartVarEMP.ACE,StartVarEMP.ACE),
label=c("aSOC_EMP","cSOC_EMP" ,"eSOC_EMP","aEMP","cEMP" ,"eEMP"))

# covariance between C1 & C2
covC1C2_SOC <- mxPath( from="C1_SOC", to="C2_SOC", arrows=2,free=FALSE, values=1 )
covC1C2_EMP <- mxPath( from="C1_EMP", to="C2_EMP", arrows=2,free=FALSE, values=1 )

# covariance between A1 & A2 in MZ's
covA1A2_MZ_SOC <-mxPath( from="A1_SOC", to="A2_SOC", arrows=2, free=FALSE,values=1 )
covA1A2_MZ_EMP <-mxPath( from="A1_EMP", to="A2_EMP", arrows=2, free=FALSE,values=1 )
# covariance between A1 & A2 in DZ's
covA1A2_DZ_SOC <-mxPath( from="A1_SOC", to="A2_SOC",arrows=2, free=FALSE,values=.5 )
covA1A2_DZ_EMP <-mxPath( from="A1_EMP", to="A2_EMP",arrows=2, free=FALSE,values=.5 )

#call the data.frame with the MZ raw data, mzData, and the DZ raw data
dataMZ <- mxData( observed=mz, type="raw" )
dataDZ <- mxData( observed=dz, type="raw" )

# Combine Groups
#arange together all the paths that are the same for MZ and DZ
paths <- list(latVariances, latMeans, obsMeans,pathAceT1_SOC,
pathAceT2_SOC,pathAceT1_EMP,pathAceT2_EMP,covC1C2_SOC,covC1C2_EMP)

#Build a model seperately for MZ and DZ and for each sex
modelMZ <- mxModel(model="MZ", type="RAM", manifestVars=selVars,
latentVars=aceVars, paths, covA1A2_MZ_SOC
,covA1A2_MZ_EMP, dataMZ)
modelDZ <- mxModel(model="DZ", type="RAM", manifestVars=selVars,
latentVars=aceVars, paths,covA1A2_DZ_SOC
,covA1A2_DZ_EMP, dataDZ )

#Ask for confidence intervals
CI <-mxCI(reference = c('aSOC','cSOC','eSOC','aSOC_EMP','cSOC_EMP','eSOC_EMP','aEMP','cEMP','eEMP'),
interval = 0.95, type=c("both", "lower", "upper"))

obj <- mxFitFunctionMultigroup(c("MZ","DZ"))
modelACE.Cholesky <- mxModel(model="ACE_Cholesky", modelMZ, modelDZ, obj, CI )

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

fitACE.Cholesky <- mxRun(modelACE.Cholesky, intervals=TRUE)

Replied on Sun, 08/12/2018 - 13:32
Picture of user. AdminRobK Joined: 01/24/2014

Error: The job for model 'ACE_Cholesky' exited abnormally with the error message: fit is not finite (The continuous part of the model implied covariance (loc2) is not positive definite in data 'DZ.data' row 510. Detail:
covariance = matrix(c( # 4x4
0.457441, 0.22872, 0.686161, 0
, 0.22872, 0.457441, 0.686161, 0
, 0.686161, 0.686161, 1.95546, 0
, 0, 0, 0, 0), byrow=TRUE, nrow=4, ncol=4)
)

This matrix is non-PD because its fourth diagonal element is zero (and in fact, its fourth column and row are all zeroes). In other words, "empathy3Mom_2" has a model-expected variance of zero. The problem is here:

pathAceT2_EMP <- mxPath( from=c("A2_SOC","C2_SOC","E2_SOC","A2_EMP","C2_EMP","E2_EMP"),
to="empathy3Mom_1", arrows=1, free=c(T,T,T,T,T,T),
values= c(StartVarSOC.ACE,StartVarSOC.ACE,StartVarSOC.ACE,StartVarEMP.ACE,StartVarEMP.ACE,StartVarEMP.ACE),
label=c("aSOC_EMP","cSOC_EMP" ,"eSOC_EMP","aEMP","cEMP" ,"eEMP"))

You need to change to="empathy3Mom_1" to to="empathy3Mom_2".