Made a note to users in the bivariate saturated files so they don't think they have...
[openmx:openmx.git] / demo / BivariateSaturated_PathRaw.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 # Program: BivariateSaturated_PathRaw.R  
18 # Author: Hermine Maes
19 # Date: 2009.08.01 
20 #
21 # ModelType: Saturated
22 # DataType: Continuous
23 # Field: None
24 #
25 # Purpose:
26 #      Bivariate Saturated model to estimate means and (co)variances
27 #      Path style model input - Raw data input
28 #
29 # RevisionHistory:
30 #      Hermine Maes -- 2009.10.08 updated & reformatted
31 #      Ross Gore -- 2011.06.15 added Model, Data & Field metadata
32 # -----------------------------------------------------------------------------
33
34 require(OpenMx)
35 require(MASS)
36 # Load Libraries
37 # -----------------------------------------------------------------------------
38
39 set.seed(200)
40 rs=.5
41 xy <- mvrnorm (1000, c(0,0), matrix(c(1,rs,rs,1),2,2))
42 testData <- xy
43 testData <- testData[, order(apply(testData, 2, var))[2:1]] #put the data columns in order from largest to smallest variance
44 # 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.
45 selVars <- c("X","Y")
46 dimnames(testData) <- list(NULL, selVars)
47 summary(testData)
48 cov(testData)
49 # Simulate Data
50 # -----------------------------------------------------------------------------
51
52 bivSatModel2 <- mxModel("bivSat2",
53     manifestVars= selVars,
54     mxPath(
55         from=c("X", "Y"), 
56         arrows=2, 
57         free=T, 
58         values=1, 
59         lbound=.01, 
60         labels=c("varX","varY")
61     ),
62     mxPath(
63         from="X", 
64         to="Y", 
65         arrows=2, 
66         free=T, 
67         values=.2, 
68         lbound=.01, 
69         labels="covXY"
70     ),
71     mxPath(
72         from="one",
73         to=c("X", "Y"),
74         arrows=1,
75         free=T),
76     mxData(
77         observed=testData, 
78         type="raw", 
79     ),
80     type="RAM"
81 )
82
83 bivSatFit2 <- mxRun(bivSatModel2)
84 EM2 <- mxEval(M, bivSatFit2)
85 EC2 <- mxEval(S, bivSatFit2)
86 LL2 <- mxEval(objective, bivSatFit2)
87 SL2 <- summary(bivSatFit2)$SaturatedLikelihood
88 Chi2 <- LL2-SL2
89 # Example 2: Saturated Model with Raw Data and Path input
90 # -----------------------------------------------------------------------------
91
92 Mx.EM2 <- matrix(c(0.03211188, -0.004889211),1,2)
93 Mx.EC2 <- matrix(c(1.0092891, 0.4813504, 0.4813504, 0.9935366),2,2)
94 Mx.LL2 <- 5415.772
95 # example Mx..2: Saturated Model with Raw Data
96 # Mx answers hard-coded
97 # -----------------------------------------------------------------------------
98
99 omxCheckCloseEnough(LL2,Mx.LL2,.001)
100 omxCheckCloseEnough(EC2,Mx.EC2,.001)
101 omxCheckCloseEnough(EM2,Mx.EM2,.001)
102 # 2:RawPat 
103 # -------------------------------------
104 # Compare OpenMx results to Mx results 
105 # (LL: likelihood; EC: expected covariance, EM: expected means)
106 # -----------------------------------------------------------------------------