Temporarily quarentine test failing with CSOLNP
[openmx:openmx.git] / models / failing / BootstrapParallel.R
1 #
2 #   Copyright 2007-2014 The OpenMx Project
3 #
4 #   Licensed under the Apache License, Version 2.0 (the "License");
5 #   you may not use this file except in compliance with the License.
6 #   You may obtain a copy of the License at
7
8 #        http://www.apache.org/licenses/LICENSE-2.0
9
10 #   Unless required by applicable law or agreed to in writing, software
11 #   distributed under the License is distributed on an "AS IS" BASIS,
12 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 #   See the License for the specific language governing permissions and
14 #   limitations under the License.
15
16
17 # -----------------------------------------------------------------------
18 # Program: BootstrapParallel.R  
19 # Author: Unknown
20 #  Date: 9999.99.99 
21 #
22 # ModelType: Parallel
23 # DataType: Continuous
24 # Field: None
25 #
26 # Purpose:
27 #      Bootstrap parallel models
28 #
29 # RevisionHistory:
30 #      Ross Gore -- 2011.06.16 updated & reformatted
31 # -----------------------------------------------------------------------
32
33 #options(error = utils::recover)
34 require(OpenMx)
35
36
37 lambda <- matrix(c(.8, .5, .7, 0), 4, 1)
38 nObs <- 500
39 nReps <- 10
40 nVar <- nrow(lambda)
41 specifics <- diag(nVar)
42 chl <- chol(lambda %*% t(lambda) + specifics)
43 # parameters for the simulation: lambda = factor loadings,
44 # specifics = specific variances
45 # -----------------------------------------------------------------------------
46
47
48 pStrt <- 3
49 pEnd <- pStrt + 2*nVar - 1
50 hStrt <- pEnd + 1
51 hEnd <- hStrt + 2*nVar - 1
52 # indices for parameters and hessian estimate in results
53 # -----------------------------------------------------------------------------
54
55
56 dn <- list()
57 dn[[1]] <- paste("Var", 1:4, sep="")
58 dn[[2]] <- dn[[1]]
59 # dimension names for OpenMx
60 # -----------------------------------------------------------------------------
61
62
63 randomCov <- function(nObs, nVar, chl, dn) {
64   x <- matrix(rnorm(nObs*nVar), nObs, nVar)
65   x <- x %*% chl
66   thisCov <- cov(x)
67   dimnames(thisCov) <- dn
68   return(thisCov)  
69 }
70 # function to get a covariance matrix
71 # -----------------------------------------------------------------------------
72
73 createNewModel <- function(index, prefix, model) {
74         modelname <- paste(prefix, index, sep='')
75         data <- mxData(randomCov(nObs, nVar, chl, dn), type="cov", numObs=nObs)
76         model <- mxModel(model, data)
77         model <- mxRename(model, modelname)
78         return(model)
79 }
80
81 getStats <- function(model) {
82         retval <- c(model@output$status[[1]],
83                 max(abs(model@output$gradient)),
84                 model@output$estimate,
85                 sqrt(diag(solve(model@output$hessian))))
86         return(retval)
87 }
88
89
90
91 obsCov <- randomCov(nObs, nVar, chl, dn)
92 # initialize obsCov for MxModel
93 # -----------------------------------------------------------------------------
94
95 results <- matrix(0, nReps, hEnd)
96 dnr <- c("inform", "maxAbsG", paste("lambda", 1:nVar, sep=""),
97          paste("specifics", 1:nVar, sep=""),
98          paste("hessLambda", 1:nVar, sep=""),
99          paste("hessSpecifics", 1:nVar, sep=""))
100 dimnames(results)[[2]] <- dnr
101 # results matrix: get results for each simulation
102 # -----------------------------------------------------------------------------
103
104
105 template <- mxModel("stErrSim",
106                        mxMatrix(name="lambda", type="Full", nrow=4, ncol=1,
107                                 free=TRUE, values=c(.8, .5, .7, 0)),
108                        mxMatrix(name="specifics", type="Diag", nrow=4,
109                                 free=TRUE, values=rep(1, 4)),
110                        mxAlgebra(lambda %*% t(lambda) + specifics,
111                                  name="preCov", dimnames=dn),
112                        mxData(observed=obsCov, type="cov", numObs=nObs),
113                        mxFitFunctionML(),mxExpectationNormal(covariance='preCov'),
114                        independent = TRUE)
115 # instantiate MxModel
116 # -----------------------------------------------------------------------------
117
118 topModel <- mxModel("container")
119
120 submodels <- lapply(1:nReps, createNewModel, 'stErrSim', template)
121
122 names(submodels) <- imxExtractNames(submodels)
123 topModel@submodels <- submodels
124
125 modelResults <- mxRun(topModel, silent=TRUE, suppressWarnings=TRUE)
126
127 results <- t(omxSapply(modelResults@submodels, getStats))
128
129
130 results2 <- data.frame(results[which(results[,1] <= 1),])
131 # get rid of bad covergence results
132 # -----------------------------------------------------------------------------
133
134 means <- colMeans(results2)
135 stdevs <- sapply(results2, sd)
136 sumResults <- data.frame(matrix(dnr[pStrt:pEnd], 2*nVar, 1,
137                                 dimnames=list(NULL, "Parameter")))
138 sumResults$mean <- means[pStrt:pEnd]
139 sumResults$obsStDev <- stdevs[pStrt:pEnd]
140 sumResults$meanHessEst <- means[hStrt:hEnd]
141 sumResults$sqrt2meanHessEst <- sqrt(2) * sumResults$meanHessEst
142 # summarize the results
143 # -----------------------------------------------------------------------------
144
145 print(sumResults)
146 # print results
147 # -----------------------------------------------------------------------------
148