Made a note to users in the bivariate saturated files so they don't think they have...
[openmx:openmx.git] / demo / BivariateSaturated_PathCov.R
1 #
2 #   Copyright 2007-2013 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: BivariateSaturated_PathCov.R  
19 # Author: Hermine Maes
20 # Date: 2009.08.01 
21 #
22 # ModelType: Saturated
23 # DataType: Continuous
24 # Field: None
25 #
26 # Purpose:
27 #      Bivariate Saturated model to estimate means and (co)variances
28 #      Path style model input - Covariance matrix data input
29 #
30 # RevisionHistory:
31 #      Hermine Maes -- 2009.10.08 updated & reformatted
32 #      Ross Gore -- 2011.06.15 added Model, Data & Field metadata   
33 # -----------------------------------------------------------------------------
34
35 require(OpenMx)
36 require(MASS)
37 # Load Libraries
38 # -----------------------------------------------------------------------------
39
40 set.seed(200)
41 rs=.5
42 xy <- mvrnorm (1000, c(0,0), matrix(c(1,rs,rs,1),2,2))
43 testData <- xy
44 testData <- testData[, order(apply(testData, 2, var))[2:1]] #put the data columns in order from largest to smallest variance
45 # Note: Users do NOT have to re-order their data columns.  This is only to make data generation the same on different operating systems: to fix an inconsistency with the mvrnorm function in the MASS package.
46 selVars <- c("X","Y")
47 dimnames(testData) <- list(NULL, selVars)
48 summary(testData)
49 cov(testData)
50 # Simulate Data
51 # -----------------------------------------------------------------------------
52
53 bivSatModel1 <- mxModel("bivSat1",
54     manifestVars= selVars,
55     mxPath(
56         from=c("X", "Y"), 
57         arrows=2, 
58         free=T, 
59         values=1, 
60         lbound=.01, 
61         labels=c("varX","varY")
62     ),
63     mxPath(
64         from="X", 
65         to="Y", 
66         arrows=2, 
67         free=T, 
68         values=.2, 
69         lbound=.01, 
70         labels="covXY"
71     ),
72     mxData(
73         observed=cov(testData), 
74         type="cov", 
75         numObs=1000 
76     ),
77     type="RAM"
78 )
79
80 bivSatFit1 <- mxRun(bivSatModel1)
81 EC1 <- mxEval(S, bivSatFit1)
82 LL1 <- mxEval(objective, bivSatFit1)
83 SL1 <- summary(bivSatFit1)$SaturatedLikelihood
84 Chi1 <- LL1-SL1
85 # example 1: Saturated Model with Cov Matrices and Path-Style Input
86 # -----------------------------------------------------------------------------
87
88 bivSatModel1m <- mxModel("bivSat1m",
89     manifestVars= selVars,
90     mxPath(
91         from=c("X", "Y"), 
92         arrows=2, 
93         free=T, 
94         values=1, 
95         lbound=.01, 
96         labels=c("varX","varY")
97     ),
98     mxPath(
99         from="X", 
100         to="Y", 
101         arrows=2, 
102         free=T, 
103         values=.2, 
104         lbound=.01, 
105         labels="covXY"
106     ),
107     mxPath(
108         from="one", 
109         to=c("X", "Y"), 
110         arrows=1, 
111         free=T, 
112         values=.01, 
113         labels=c("meanX","meanY")
114     ),
115     mxData(
116         observed=cov(testData), 
117         type="cov", 
118         numObs=1000, 
119         means=colMeans(testData)
120     ),
121     type="RAM"
122 )
123
124 bivSatFit1m <- mxRun(bivSatModel1m)
125 EM1m <- mxEval(M, bivSatFit1m)
126 EC1m <- mxEval(S, bivSatFit1m)
127 LL1m <- mxEval(objective, bivSatFit1m)
128 SL1m <- summary(bivSatFit1m)$SaturatedLikelihood
129 Chi1m <- LL1m-SL1m
130 # example 1m: Saturated Model with Cov Matrices & Means and Path-Style Input
131 # -----------------------------------------------------------------------------
132
133 Mx.EC1 <- matrix(c(1.0102951, 0.4818317, 0.4818317, 0.9945329),2,2)
134 Mx.LL1 <- -2.258885e-13
135 # example Mx..1: Saturated Model with 
136 # Cov Matrices
137 # -------------------------------------
138
139 Mx.EM1m <- matrix(c(0.03211648, -0.004883811),1,2)
140 Mx.EC1m <- matrix(c(1.0102951, 0.4818317, 0.4818317, 0.9945329),2,2)
141 Mx.LL1m <- -5.828112e-14
142 # example Mx..1m: Saturated Model with 
143 # Cov Matrices & Means
144 # -------------------------------------
145 # Mx answers hard-coded
146 # -----------------------------------------------------------------------------
147
148 omxCheckCloseEnough(Chi1,Mx.LL1,.001)
149 omxCheckCloseEnough(EC1,Mx.EC1,.001)
150 # 1:CovPat
151 # -------------------------------------
152
153 omxCheckCloseEnough(Chi1m,Mx.LL1m,.001)
154 omxCheckCloseEnough(EC1m,Mx.EC1m,.001)
155 omxCheckCloseEnough(EM1m,Mx.EM1m,.001)
156 # 1m:CovMPat 
157 # -------------------------------------
158 # Compare OpenMx results to Mx results 
159 # (LL: likelihood; EC: expected covariance, EM: expected means)
160 # -----------------------------------------------------------------------------