File: MultipleGroupML.R

package info (click to toggle)
r-cran-openmx 2.21.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 14,412 kB
  • sloc: cpp: 36,577; ansic: 13,811; fortran: 2,001; sh: 1,440; python: 350; perl: 21; makefile: 5
file content (63 lines) | stat: -rwxr-xr-x 2,377 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#
#   Copyright 2007-2021 by the individuals mentioned in the source code history
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#        http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

require(OpenMx)

varNames <- c('x')

data1 <- mxData(matrix(1, dimnames = list(varNames,varNames)), type="cov", numObs=100)
data2 <- mxData(matrix(2, dimnames = list(varNames,varNames)), type="cov", numObs=100)

mat1 <- mxMatrix("Full",2,free=TRUE, nrow=1, ncol=1, name="mat1")
mat2 <- mxMatrix("Full",1,free=TRUE, nrow=1, ncol=1, name="mat2")

obj1 <- mxExpectationNormal("mat1", dimnames = varNames)
obj2 <- mxExpectationNormal("mat2", dimnames = varNames)

model1 <- mxModel("model1", data1, mat1, obj1, mxFitFunctionML())
model2 <- mxModel("model2", data2, mat2, obj2, mxFitFunctionML())

output1 <- mxRun(model1, suppressWarnings = TRUE)
output2 <- mxRun(model2, suppressWarnings = TRUE)

output1$output
output2$output

alg <- mxAlgebra(model1.objective + model2.objective, name="alg")
obj <- mxFitFunctionAlgebra("alg")

model <- mxModel("both", alg, obj, model1, model2)
model <- mxRun(model, suppressWarnings = TRUE)

omxCheckCloseEnough(model$output$estimate, .99 * c(1, 2), 0.001)

# Also use the multigroup fit function
mft <- mxFitFunctionMultigroup(c("model1", "model2"))
mgmodel <- mxModel("mgboth", mft, model1, model2)
mgmodel <- mxRun(mgmodel, suppressWarnings = TRUE)

#check estimates
omxCheckCloseEnough(omxGetParameters(model), omxGetParameters(mgmodel), 1e-3)

#check standard errors
omxCheckCloseEnough(summary(model)$parameters[,6], summary(mgmodel)$parameters[,6], 0.005)

mgmodel$output$hessian
mgmodel$output$calculatedHessian
mgmodel$output$hessianCholesky


omxCheckError(mxCheckIdentification(model), "Identification check is not possible for models with 'MxFitFunctionAlgebra', 'MxFitFunctionRow', and 'MxFitFunctionR' fit functions.
 If you have a multigroup model, use mxFitFunctionMultigroup.")