You are here

Cholesky mx status RED

9 posts / 0 new
Last post
Lisa M's picture
Offline
Joined: 08/19/2013 - 04:02
Cholesky mx status RED

Hi,
I am trying to run a Cholesky Decomposition with 3 binary variables and I keep getting the error message

“In model 'multiCholACEModel' Optimizer returned a non-zero status code 6. The model does not satisfy the first-order optimality conditions to the required accuracy, and no improved point for the merit function could be found during the final linesearch (Mx status RED)”

I have tried changing the threshold starting values (the ones currently in there is from the saturated model) and reducing mvnRelEps, but the model still will not converge. I am not sure if this is due to errors in the script or other reasons.
Due to results from the univariate models, I went straight for the AE model.

Any guidance or tips on how to proceed would be greatly appreciated, I have included the script, but due to confidentiality agreements I cannot include any data.

Kind regards/ Lisa

#setting up for the analysis  
nv                         <- 3 #number of variables            
ntv                          <- nv*2 #number of variables for a pair
nth                          <- 1 #number of thresholds
thRows                     <- paste("th",1:nth,sep="") 
thFree                      <- matrix(c(T,T,T),nrow=nth,ncol=nv)
thValues                   <- matrix(c(1.56,0.75,1.74),nrow=nth,ncol=nv)
thLBound                  <- matrix(rep(c(0.001,rep(0.001,nth-1)),nv),nrow=nth,ncol=nv) #constricting the values to be positive
thLabels=rep(c("pain","cmd","disability"),2)
 
#Organising the data as ordinal
Vars <- c('PAIN','CMD', 'DISABILITY')
selVars <- paste(Vars,c(rep(1,nv),rep(2,nv)),sep="")
mzDataOrd <- subset(selData, bestzyg==1, selVars)
dzDataOrd <- subset(selData, bestzyg==2, selVars)
 
mzDataOrd [,1]<- mxFactor(mzDataOrd[,1], levels = c(0:1))
mzDataOrd [,2]<- mxFactor(mzDataOrd[,2], levels = c(0:1))
dzDataOrd [,1]<- mxFactor(dzDataOrd[,1], levels = c(0:1))
dzDataOrd [,2]<- mxFactor(dzDataOrd[,2], levels = c(0:1))
mzDataOrd [,3]<- mxFactor(mzDataOrd[,3], levels = c(0:1))
mzDataOrd [,4]<- mxFactor(mzDataOrd[,4], levels = c(0:1))
dzDataOrd [,3]<- mxFactor(dzDataOrd[,3], levels = c(0:1))
dzDataOrd [,4]<- mxFactor(dzDataOrd[,4], levels = c(0:1))
mzDataOrd [,5]<- mxFactor(mzDataOrd[,5], levels = c(0:1))
mzDataOrd [,6]<- mxFactor(mzDataOrd[,6], levels = c(0:1))
dzDataOrd [,5]<- mxFactor(dzDataOrd[,5], levels = c(0:1))
dzDataOrd [,6]<- mxFactor(dzDataOrd[,6], levels = c(0:1))
 
summary(mzDataOrd)
summary(dzDataOrd)
describe(mzDataOrd)
describe(dzDataOrd)
 
# Fit Multivariate ACE Model with RawData and Matrices Input
# -----------------------------------------------------------------------
cholSVnv <- c(.5,0,0,.5,0,.5)
AFac <- c(
"a11","a21","a31",
"a22","a32",
"a33")
CFac <- c(
"c11","c21","c31",
"c22","c32",
"c33")
EFac <- c(
"e11","e21","e31",
"e22","e32",
"e33")
 
 
    # Matrices a, c, and e to store a, c, and e path coefficients
a  <-     mxMatrix( type="Lower", nrow=nv, ncol=nv, free=TRUE, values=cholSVnv, labels=AFac, name="a" )
c  <-     mxMatrix( type="Lower", nrow=nv, ncol=nv, free=FALSE, values=0, labels=CFac, name="c" )
e  <-     mxMatrix( type="Lower", nrow=nv, ncol=nv, free=TRUE, values=cholSVnv, labels=EFac, name="e" )
 
    # Matrices A, C, and E compute variance components
A <-       mxAlgebra( expression=a %*% t(a), name="A" )
C <-       mxAlgebra( expression=c %*% t(c), name="C" )
E <-       mxAlgebra( expression=e %*% t(e), name="E" )
 
    # Algebra to compute total variances and standard deviations (diagonal only)
V <-        mxAlgebra( expression=A+C+E, name="V" )
I <-        mxMatrix( type="Iden", nrow=nv, ncol=nv, name="I")
iSD <-      mxAlgebra( expression=solve(sqrt(I*V)), name="iSD")
 
    # Constraint on variance of Ordinal variables
Var1 <-        mxConstraint( expression=I*V==I, name="Var1") #if ordinal
 
    ## Note that the rest of the mxModel statements do not change for bi/multivariate case
    # Matrix & Algebra for expected means vector
expMean<-       mxMatrix( type="Zero", nrow=1, ncol=ntv, name="expMean" )
Thre<-       mxMatrix( type="Full", nrow=nth, ncol=nv, free=TRUE, values=thValues, lbound=thLBound, name="Thre" )
Inc<-       mxMatrix( type="Lower", nrow=nth, ncol=nth, free=FALSE, values=1, name="Inc" )
ThreInc<-       mxAlgebra( expression= Inc %*% Thre, name="ThreInc")    
expThre<-      mxAlgebra( expression= cbind(ThreInc,ThreInc), dimnames=list(thRows,selVars), name="expThre" ) 
 
    # Algebra for expected variance/covariance matrix in MZ
expCovMZ<-        mxAlgebra( expression= rbind  ( cbind(A+C+E , A+C),
                                        cbind(A+C   , A+C+E)), name="expCovMZ" )
 
    # Algebra for expected variance/covariance matrix in DZ
expCovDZ<-        mxAlgebra( expression= rbind  ( cbind(A+C+E     , 0.5%x%A+C),
                                        cbind(0.5%x%A+C , A+C+E)),  name="expCovDZ" ) 
 
funML     <- mxFitFunctionML()
 
dataMZ    <- mxData( observed=mzDataOrd, type="raw" )
expMZ     <- mxExpectationNormal( covariance="expCovMZ", means="expMean", dimnames=selVars, thresholds="expThre")
 
 
dataDZ<-       mxData( observed=dzDataOrd, type="raw" )
expDZ<-       mxExpectationNormal( covariance="expCovDZ", means="expMean", dimnames=selVars, thresholds="expThre")
 
 
pars      <- list(a, c, e, A, C, E, V, I, iSD)
 
 
modelMZ   <- mxModel( expCovMZ, expMean, Thre, Inc, ThreInc, expThre, dataMZ, expMZ, funML, pars, name="MZ" )
modelDZ   <- mxModel( expCovDZ, expMean, Thre, Inc, ThreInc, expThre, dataDZ, expDZ, funML, pars, name="DZ")
multi     <- mxFitFunctionMultigroup( c("MZ","DZ") )
 
multiCholACEModel       <- mxModel( "multiCholACEModel", modelMZ, modelDZ, multi)
multiCholACEModel       <- mxTryHard(multiCholACEModel)
multiCholACEModelfit    <- mxRun( multiCholACEModel, intervals=F )
summultiCholACEModel    <- summary( multiCholACEModelfit )
summultiCholACEModel
AdminRobK's picture
Offline
Joined: 01/24/2014 - 12:15
non-ASCII quote; mxTryHardOrdinal()

I corrected a non-ASCII quote in line 12 of your script, from Vars <- c('PAIN','CMD’, 'DISABILITY') to Vars <- c('PAIN','CMD', 'DISABILITY'). I could not run that line under Windows or Linux/GNU. Are you on a Mac?

The algorithm that calculates the multivariate-normal probability integral only has so much numerical accuracy, and the inaccuracy is worse out into the tails of the distribution. Further, the numerical error is compounded by the finite-differences subroutine that numerically approximates the fitfunction derivatives. As a result, sometimes models of threshold traits cannot satisfy the first or second-order conditions for a local minimum, even when they've actually reached one. In such situations, the best you can do is try to find the smallest possible -2logL. I notice you're using mxTryHard(). Some of the default argument values for mxTryHard() are downright counterproductive for optimization with threshold traits. Use mxTryHardOrdinal() instead (or equivalently use different argument values to vanilla mxTryHard()). Also, if you're not using the on-load default optimizer, CSOLNP, you should be.

The issue of "inescapable status red with threshold variables" is quite common. Two relevant forums threads that readily come to my mind are this one and this one. You could find others if you search our forums.

Lisa M's picture
Offline
Joined: 08/19/2013 - 04:02
seperate thresholds

Thank you so much, now that I changed over to mxTryHardOrdinal() it is finding a solution. I am on a PC; I must have accidentally added a space when copying over the script.
However, now that I got some results, I noticed that my model is estimating separate thresholds for MZ and DZ twins, even though they seem to have the same label. Am I doing something wrong in the mxFitFunctionMultigroup?

AdminRobK's picture
Offline
Joined: 01/24/2014 - 12:15
labels
However, now that I got some results, I noticed that my model is estimating separate thresholds for MZ and DZ twins, even though they seem to have the same label. Am I doing something wrong in the mxFitFunctionMultigroup?

It's nothing related to mxFitFunctionMultigroup(). Your syntax defines a character vector thLabels but doesn't use it when you create Thre. Consequently, each threshold exists in your MxModel's namespace as 'containingModelName.matrixName[row,col]', e.g. 'MZ.Thre[1,1]'.

tbates's picture
Offline
Joined: 07/31/2009 - 14:25
need to add labels to the "Thre" matrix

The issue of separate thresholds for MZs and DZs is that you don't have any labels in your Thre:

Thre<- mxMatrix( type="Full", nrow=nth, ncol=nv, free=TRUE, values=thValues, lbound=thLBound, name="Thre")

You could add labels.

Also consider that umxACE will do all of this automatically for you in one maintained and flexible function:

m1 = umxACE("multiCholACEModel", selVars = c('PAIN','CMD', 'DISABILITY'), sep = "", dzData = mzDataOrd, dzData = dzDataOrd, tryHard="yes")
umxSummary(m1)
plot(m1)

Bates, T. C., Maes, H., & Neale, M. C. (2019). umx: Twin and Path-Based Structural Equation Modeling in R. Twin Res Hum Genet, 22(1), 27-41. doi:10.1017/thg.2019.2

Lisa M's picture
Offline
Joined: 08/19/2013 - 04:02
umx

Thank you so much for the help, I have added the labels in the OpenMx model and it now works, however since I am still getting code red error message, I thought I would give umx a go. When I fit a cholesky model it estimates the thresholds separately for twin 1 and twin 2 and I am getting the following parameters:
1 PAIN1_dev1
2 CMD1_dev1
3 DISABILITY1_dev1
4 PAIN2_dev1
5 CMD2_dev1
6 DISABILITY2_dev1
7 a_r1c1
8 a_r2c1
9 a_r3c1
10 a_r2c2
11 a_r3c2
12 a_r3c3
13 c_r1c1
14 c_r2c1
15 c_r3c1
16 c_r2c2
17 c_r3c2
18 c_r3c3
19 e_r1c1
20 e_r2c1
21 e_r3c1
22 e_r2c2
23 e_r3c2
24 e_r3c3

The extra thresholds are giving me problems when I try to fit an IP model. I tried using umxThresholdMatrix and it is telling me that the thresholds all have the same labels and same values.

> umxThresholdMatrix(dzDataOrd, selDVs = selVars, sep = "", method = c("auto"), threshMatName = "threshMat", droplevels = FALSE, verbose = FALSE)

[[1]]
LowerMatrix 'lowerOnes_for_thresh'

$labels: No labels assigned.

$values
[,1]
[1,] 1

$free: No free parameters.

$lbound: No lower bounds assigned.

$ubound: No upper bounds assigned.

[[2]]
FullMatrix 'deviations_for_thresh'

$labels
PAIN1 CMD1 DISABILITY1 PAIN2 CMD2 DISABILITY2
dev_1 "PAIN_dev1" "CMD_dev1" "DISABILITY_dev1" "PAIN_dev1" "CMD_dev1" "DISABILITY_dev1"

$values
PAIN1 CMD1 DISABILITY1 PAIN2 CMD2 DISABILITY2
dev_1 1.754467 1.367181 1.957871 1.754467 1.367181 1.957871

$free
PAIN1 CMD1 DISABILITY1 PAIN2 CMD2 DISABILITY2
dev_1 TRUE TRUE TRUE TRUE TRUE TRUE

$lbound: No lower bounds assigned.

$ubound: No upper bounds assigned.

[[3]]
mxAlgebra 'threshMat'
$formula: lowerOnes_for_thresh %*% deviations_for_thresh
$result: (not yet computed) <0 x 0 matrix>
dimnames:
[[1]]
[1] "th_1"

[[2]]
[1] "PAIN1" "CMD1" "DISABILITY1" "PAIN2" "CMD2" "DISABILITY2"

>
> umxThresholdMatrix(mzDataOrd, selDVs = selVars, sep = "", method = c("auto"), threshMatName = "threshMat", droplevels = FALSE, verbose = FALSE)
[[1]]
LowerMatrix 'lowerOnes_for_thresh'

$labels: No labels assigned.

$values
[,1]
[1,] 1

$free: No free parameters.

$lbound: No lower bounds assigned.

$ubound: No upper bounds assigned.

[[2]]
FullMatrix 'deviations_for_thresh'

$labels
PAIN1 CMD1 DISABILITY1 PAIN2 CMD2 DISABILITY2
dev_1 "PAIN_dev1" "CMD_dev1" "DISABILITY_dev1" "PAIN_dev1" "CMD_dev1" "DISABILITY_dev1"

$values
PAIN1 CMD1 DISABILITY1 PAIN2 CMD2 DISABILITY2
dev_1 1.802673 1.333306 2.006859 1.802673 1.333306 2.006859

$free
PAIN1 CMD1 DISABILITY1 PAIN2 CMD2 DISABILITY2
dev_1 TRUE TRUE TRUE TRUE TRUE TRUE

$lbound: No lower bounds assigned.

$ubound: No upper bounds assigned.

[[3]]
mxAlgebra 'threshMat'
$formula: lowerOnes_for_thresh %*% deviations_for_thresh
$result: (not yet computed) <0 x 0 matrix>
dimnames:
[[1]]
[1] "th_1"

[[2]]
[1] "PAIN1" "CMD1" "DISABILITY1" "PAIN2" "CMD2" "DISABILITY2"

Am I missing something in my model? Below is the syntax I have been using.

nv <- 3 #number of variables
Vars <- c('PAIN','CMD','DISABILITY')
Vars
selVars <- paste(Vars,c(rep(1,nv),rep(2,nv)),sep="")
selVars
mzDataOrd <- subset(selData, bestzyg==1, selVars)
dzDataOrd <- subset(selData, bestzyg==2, selVars)

mzDataOrd [,1]<- mxFactor(mzDataOrd[,1], levels = c(0:1))
mzDataOrd [,2]<- mxFactor(mzDataOrd[,2], levels = c(0:1))
dzDataOrd [,1]<- mxFactor(dzDataOrd[,1], levels = c(0:1))
dzDataOrd [,2]<- mxFactor(dzDataOrd[,2], levels = c(0:1))
mzDataOrd [,3]<- mxFactor(mzDataOrd[,3], levels = c(0:1))
mzDataOrd [,4]<- mxFactor(mzDataOrd[,4], levels = c(0:1))
dzDataOrd [,3]<- mxFactor(dzDataOrd[,3], levels = c(0:1))
dzDataOrd [,4]<- mxFactor(dzDataOrd[,4], levels = c(0:1))
mzDataOrd [,5]<- mxFactor(mzDataOrd[,5], levels = c(0:1))
mzDataOrd [,6]<- mxFactor(mzDataOrd[,6], levels = c(0:1))
dzDataOrd [,5]<- mxFactor(dzDataOrd[,5], levels = c(0:1))
dzDataOrd [,6]<- mxFactor(dzDataOrd[,6], levels = c(0:1))

summary(mzDataOrd)
summary(dzDataOrd)

umxThresholdMatrix(dzDataOrd, selDVs = selVars, sep = "", method = c("auto"), threshMatName = "threshMat", droplevels = FALSE, verbose = FALSE)

umxThresholdMatrix(mzDataOrd, selDVs = selVars, sep = "", method = c("auto"), threshMatName = "threshMat", droplevels = FALSE, verbose = FALSE)

Chol1 = umxACE("CholACEModel", selDVs = Vars, sep = "", mzData = mzDataOrd, dzData = dzDataOrd)
umxSummary(Chol1)
plot(Chol1)

parameters(Chol1)

AdminNeale's picture
Offline
Joined: 03/01/2013 - 14:09
More info?

Could you be a bit more explicit when you say "The extra thresholds are giving me problems when I try to fit an IP model. I tried using umxThresholdMatrix and it is telling me that the thresholds all have the same labels and same values"?

It is pretty much impossible to help when one doesn't know what exactly the problems are. However, good that you post the code which can sometimes give the intrepid support people clues:

Note how in the example part of ?umxThresholdMatrix its result is put into an object called tmp:

tmp = umxThresholdMatrix(twinData, selDVs = selVars, sep = "", verbose = TRUE) 

That object should be included in the model. Running it without a target object to put its output into simply dumps the results to the screen and does nothing else.

umxThresholdMatrix(dzDataOrd, selDVs = selVars, sep = "", method = c("auto"), threshMatName = "threshMat", droplevels = FALSE, verbose = FALSE)

should, I think, include a tmp <- at the beginning, and then be used in the mxModel. But (and it's a big one) umxACE does all this for you by detecting which variables are ordinal and which are not.

Incidentally, it is possible to generate data that have similar properties to the real data, but which are definitely not the observed data and therefore can be shared to help others to debug. See ?mxGenerateData

Finally, if code 6 is the only concern, note that the message is often a false alarm caused by the precision of numerical integration making it difficult to find the exact solution - but the solution found may be extremely close to the correct one (no differences in 2nd decimal place of estimates or -2lnL). Rerunning from different starting values can increase confidence that the approximate solution is very close indeed to the actual one.

tbates's picture
Offline
Joined: 07/31/2009 - 14:25
thresholds are not in unique to each twin
  1. tldr for umxThresholdMatrix: you don't need to call it unless you're building a model from scratch.
  2. thresholds are not in unique to each twin. As shown in the example for this function:
# Example 1
obesityLevels = c('normal', 'obese')
cutPoints = quantile(twinData[, "bmi1"], probs = .2, na.rm = TRUE)
twinData$obese1 = cut(twinData$bmi1, breaks = c(-Inf, cutPoints, Inf), labels = obesityLevels) 
twinData$obese2 = cut(twinData$bmi2, breaks = c(-Inf, cutPoints, Inf), labels = obesityLevels) 
 
# Step 2: Make the ordinal variables into umxFactors (ordered, with the levels found in the data)
selVars = c("obese1", "obese2")
twinData[, selVars] <- umxFactor(twinData[, selVars])
 
tmp = umxThresholdMatrix(twinData, selDVs = selVars, sep = "")
tmp[[2]]
$labels
      obese1       obese2      
dev_1 "obese_dev1" "obese_dev1"
$values
          obese1     obese2
dev_1 -0.888 -0.888
$free
      obese1 obese2
dev_1   TRUE   TRUE

FYI: umxThresholdMatrix builds an algebra and 2 matrices: one consisting of offsets (deviations_for_thresh) and the other a lower-1s matrix lowerOnes_for_thresh which the algebra (threshMat) uses to add up the deviations to form thresholds). It thus handles the complex-for-humans job of building correct thresholds which are used within a model.

Lisa M's picture
Offline
Joined: 08/19/2013 - 04:02
umx

Sorry if my post was unclear, I have not been able to get a model to run with generated data, but I have fitted a umx model with some public data from a VCU workshop and the same thing happened, the model seem to generate seperate thresholds for twin one and twin 2 and I am getting warning messages about these paths in the IP model, see output below:

> #setting up for the analysis  
> nv  <- 2 #number of variables 
> ntv <- nv*2 #number of variables for a pair
> nth <- 1 #number of thresholds?
> thRows <- paste("th",1:nth,sep="") 
> thFree <- matrix(c(T,T),nrow=nth,ncol=nv)
> thValues <- matrix(c(0.01,0.01),nrow=nth,ncol=nv)
> thLBound <- matrix(rep(c(0.001,rep(0.001,nth-1)),nv),nrow=nth,ncol=nv)#constricting the values to be positive
> thLabels=rep(c("mo","fi"),2)
> 
> 
> #Organising the data as ordinal
> Vars <- c('mo','fi')
> selVars <- paste(Vars,c(rep(1,nv),rep(2,nv)),sep="")
> mzDataOrd <- subset(selData, zyg==3, selVars)
> dzDataOrd <- subset(selData, zyg==4, selVars)
> 
> 
> 
> mzDataOrd [,1]<- mxFactor(mzDataOrd[,1], levels = c(0:1))
> mzDataOrd [,2]<- mxFactor(mzDataOrd[,2], levels = c(0:1))
> dzDataOrd [,1]<- mxFactor(dzDataOrd[,1], levels = c(0:1))
> dzDataOrd [,2]<- mxFactor(dzDataOrd[,2], levels = c(0:1))
> mzDataOrd [,3]<- mxFactor(mzDataOrd[,3], levels = c(0:1))
> mzDataOrd [,4]<- mxFactor(mzDataOrd[,4], levels = c(0:1))
> dzDataOrd [,3]<- mxFactor(dzDataOrd[,3], levels = c(0:1))
> dzDataOrd [,4]<- mxFactor(dzDataOrd[,4], levels = c(0:1))
> 
> summary(mzDataOrd)
   mo1       fi1       mo2       fi2    
 0   :65   0   :40   0   :64   0   :41  
 1   :10   1   :35   1   :12   1   :35  
 NA's:77   NA's:77   NA's:76   NA's:76  
> summary(dzDataOrd)
   mo1       fi1       mo2       fi2    
 0   :49   0   :21   0   :37   0   :25  
 1   : 5   1   :33   1   : 8   1   :20  
 NA's:44   NA's:44   NA's:53   NA's:53  
> 
> Chol1 = umxACE("CholACEModel", selDVs = Vars, sep = "", mzData = mzDataOrd, dzData = dzDataOrd)
Found 2 pairs of binary variables:'mo1', 'fi1', 'mo2', and 'fi2'
 
I am fixing the latent means and variances of these variables to 0 and 1
No continuous variables
Running CholACEModel with 13 parameters
 
MxComputeGradientDescent(CSOLNP) evaluations 2660 fit 563.574 change -7.317e-010
MxComputeGradientDescent(CSOLNP) evaluations 8242 fit 539.366 change -7.991e-006
MxComputeNumericDeriv 23/91                                                     
 
CholACEModel -2 × log(Likelihood) = 538.36
Standardized solution
 
 
|   |a1 |a2 |   c1|c2 |   e1|e2  |
|:--|:--|:--|----:|:--|----:|:---|
|mo |.  |   | 0.37|   | 0.93|    |
|fi |.  |.  | 0.38|.  | 0.19|0.9 |
> umxSummary(Chol1)
CholACEModel -2 × log(Likelihood) = 538.36
Standardized solution
 
 
|   |a1 |a2 |   c1|c2 |   e1|e2  |
|:--|:--|:--|----:|:--|----:|:---|
|mo |.  |   | 0.37|   | 0.93|    |
|fi |.  |.  | 0.38|.  | 0.19|0.9 |
> plot(Chol1)
> 
> parameters(Chol1)
       name Estimate
1  mo1_dev1     1.21
2  fi1_dev1    -0.05
3  mo2_dev1     0.97
4  fi2_dev1     0.11
5    a_r1c1     0.00
6    a_r2c1     0.00
7    a_r2c2     0.00
8    c_r1c1     0.37
9    c_r2c1     0.38
10   c_r2c2     0.00
11   e_r1c1     0.93
12   e_r2c1     0.19
13   e_r2c2     0.90
> 
> 
> ip1 <- umxIP("IndPathACEModel", selDVs = Vars, sep = "", dzData = dzDataOrd, mzData = mzDataOrd, nFac=1)
Found 2 pairs of binary variables:'mo1', 'fi1', 'mo2', and 'fi2'
 
I am fixing the latent means and variances of these variables to 0 and 1
No continuous variables
Running IndPathACEModel with 16 parameters
 
MxComputeGradientDescent(CSOLNP) evaluations 1142 fit 544.704 change 0.001265
MxComputeGradientDescent(CSOLNP) evaluations 6668 fit 543.923 change 3.504e-005
MxComputeGradientDescent(CSOLNP) evaluations 12205 fit 540.231 change 1.653e-005
MxComputeGradientDescent(CSOLNP) evaluations 17762 fit 538.355 change 7.731e-012
 
IndPathACEModel -2 × log(Likelihood) = 538.36
## General IP path loadings
 
 
|   |ai1 |  ci1|  ei1|
|:--|:---|----:|----:|
|mo |.   | 0.37| 0.80|
|fi |.   | 0.38| 0.23|
## Specific factor loadings
 
 
|           |mo   |fi  |
|:----------|:----|:---|
|Specific a |.    |.   |
|Specific c |.    |.   |
|Specific e |0.48 |0.9 |
While making the plot, I found a path labeled mo1_dev1I don't know where that goes.
If you are using umxModify to make newLabels, instead of making up a new label, use, say, the first label in update as the newLabel to help plot()
Error incurred trying to run umxSummary
object 'from' not found> umxSummary(ip1)
IndPathACEModel -2 × log(Likelihood) = 538.36
## General IP path loadings
 
 
|   |ai1 |  ci1|  ei1|
|:--|:---|----:|----:|
|mo |.   | 0.37| 0.80|
|fi |.   | 0.38| 0.23|
## Specific factor loadings
 
 
|           |mo   |fi  |
|:----------|:----|:---|
|Specific a |.    |.   |
|Specific c |.    |.   |
|Specific e |0.48 |0.9 |
While making the plot, I found a path labeled mo1_dev1I don't know where that goes.
If you are using umxModify to make newLabels, instead of making up a new label, use, say, the first label in update as the newLabel to help plot()
Error in umxPlotIP(x = stdFit, file = file, digits = digits, std = FALSE) : 
  object 'from' not found
> plot(ip1)
While making the plot, I found a path labeled mo1_dev1I don't know where that goes.
If you are using umxModify to make newLabels, instead of making up a new label, use, say, the first label in update as the newLabel to help plot()
Error in plot.MxModelIP(ip1) : object 'from' not found
> 
> parameters(ip1)
       name Estimate
1  mo1_dev1     1.21
2  fi1_dev1    -0.05
3  mo2_dev1     0.97
4  fi2_dev1     0.11
5   ai_r1c1     0.00
6   ai_r2c1     0.00
7   ci_r1c1     0.37
8   ci_r2c1     0.38
9   ei_r1c1     0.80
10  ei_r2c1     0.23
11  as_r1c1     0.00
12  as_r2c2     0.00
13  cs_r1c1     0.00
14  cs_r2c2     0.00
15  es_r1c1     0.48
16  es_r2c2     0.90
>