You are here

The OpenMx website will be down for maintenance from 9 AM EDT on Tuesday, September 17th, and is expected to return by the end of the day on Wednesday, September 18th. During this period, the backend will be updated and the website will get a refreshed look.

the continuous part of the model is not positive definite

2 posts / 0 new
Last post
lior abramson's picture
Offline
Joined: 07/21/2017 - 13:13
the continuous part of the model is not positive definite

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) 
AdminRobK's picture
Offline
Joined: 01/24/2014 - 12:15
copy-paste mistake
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".