# Backward compatibility issue with extracting or inserting certain results of optimization into mxModel objects

3 posts / 0 new
Offline
Joined: 07/31/2009 - 15:14
Backward compatibility issue with extracting or inserting certain results of optimization into mxModel objects
AttachmentSize
8.8 KB

The attached file runs fine under 1.3 but fails unpleasantly under the current svn trunk (2484).

> LCA2 <- LCAfun(data[4:8], 2, 5, 3)
Error in as.character.default() :
no method for coercing this S4 class to a vector
1: In mxFIMLObjective(covariance = "R", means = "M", dimnames = nameList[1], :
2: In mxFIMLObjective(covariance = "R", means = "M", dimnames = tempVar, :
3: In is.na(x) : is.na() applied to non-(list or vector) of type 'S4'

The error comes as a result of:

temp$objective <- mxFIMLObjective(covariance = "R", means = "M", dimnames = tempVar, thresholds = paste("ThresholdClass", i, "Item", j, sep = "_"), vector = TRUE) which can be avoided easily enough with:  temp <- mxModel(temp,mxFIMLObjective(covariance="R", means="M", dimnames=tempVar, thresholds=paste("ThresholdClass",i,"Item",j,sep="_"),vector=TRUE)) However, it does mean that we are losing a bit of backward compatibility unless we were to trap old-fashioned access to model objects. Second, I discovered that weirdly a warning that the objective function is NaN is generated when there are no free parameters but the model is mxRun anyway: > LCA2 <- LCAfun(data[4:8], 2, 5, 3) Running LCA_model_2_classes Running LCA_model_2_classes Running LCA_model_2_classes Running LCA_model_2_classes Running LCA_model_2_classes Running LCA_model_2_classes Running LCA_model_2_classes Running LCA_model_2_classes NULL There were 17 warnings (use warnings() to see them) war > > nings Error: object 'nings' not found > warnings() Warning messages: 1: In mxFIMLObjective(covariance = "R", means = "M", dimnames = nameList[1], ... : Objective functions have been deprecated. Please use mxExpectationNormal() and mxFitFunctionML() instead. 13: The job for model 'LCA_model_2_classes' exited abnormally with the error message: Fit function returned nan at iteration 0.1 14: The job for model 'LCA_model_2_classes' exited abnormally with the error message: Fit function returned nan at iteration 0.1 15: The job for model 'LCA_model_2_classes' exited abnormally with the error message: Fit function returned nan at iteration 0.1 16: The job for model 'LCA_model_2_classes' exited abnormally with the error message: Fit function returned nan at iteration 0.1 17: The job for model 'LCA_model_2_classes' exited abnormally with the error message: Fit function returned nan at iteration 0.1 Although no optimization has occurred, I'd like to see these things anyway. I can (and do) grab them from the objective, per this bit of the code:  # This doesn't work due to bug when all parameters are fixed (returns NA for minimum) # funList[i] <- ifelse(is.na(lcamodelRun@output$minimum),Inf,modelList[[i]]@output$minimum) funList[i] <- ifelse(is.na(lcamodelRun$mixtureObj@result),Inf,lcamodelRun\$mixtureObj@result) 

I hesitate to label this as a bug, but I really don't think it should be issuing warnings and I do think it should be returning a function value. It has been optimized with respect to all the parameters, it just so happens that there aren't any.

Offline
Joined: 05/24/2012 - 00:35

I committed a fix to improve the error message.

Offline
Joined: 07/31/2009 - 15:14
Much better, thanks

The error now says:

Error: Right-hand side of assignment operator has illegal value MxExpectationNormal and MxFitFunctionML

which at least hints at what the issue is. How wide might be the use case that trigger this error?

Relatedly, to figure out which version of OpenMx someone is using (at the build level) one can do this:

as.numeric(unlist(strsplit(as.character(packageVersion("OpenMx")),"\\.")))[4]

but I wondered if there was anything a bit less cumbersome...