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)
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:
You need to change
to="empathy3Mom_1"
toto="empathy3Mom_2"
.