Made a note to users in the bivariate saturated files so they don't think they have...
[openmx:openmx.git] / demo / BivariateSaturated_MatrixRaw.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_MatrixRaw.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 #      Matrix style model input - Raw 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 bivSatModel4 <- mxModel("bivSat4",
54         mxMatrix(
55             type="Symm", 
56             nrow=2, 
57             ncol=2, 
58             free=T, 
59             values=c(1,.5,1), 
60             name="expCov"
61         ),
62         mxMatrix(
63             type="Full", 
64             nrow=1, 
65             ncol=2, 
66             free=T, 
67             values=c(0,0), 
68             name="expMean"
69         ),
70         mxData(
71             observed=testData, 
72             type="raw", 
73         ),
74         mxFitFunctionML(),mxExpectationNormal(
75             covariance="expCov",
76             means="expMean",
77             dimnames=selVars
78         )
79 )
80
81 bivSatFit4 <- mxRun(bivSatModel4)
82 bivSatSummary4 <- summary(bivSatFit4)
83 EM4 <- mxEval(expMean, bivSatFit4)
84 EC4 <- mxEval(expCov, bivSatFit4)
85 LL4 <- mxEval(objective,bivSatFit4)
86 omxCheckEquals(bivSatSummary4$observedStatistics, sum(!is.na(testData)))
87 # examples 4: Saturated Model with Raw Data and Matrix-Style Input
88 # -----------------------------------------------------------------------------
89
90 Mx.EM2 <- matrix(c(0.03211188, -0.004889211),1,2)
91 Mx.EC2 <- matrix(c(1.0092891, 0.4813504, 0.4813504, 0.9935366),2,2)
92 Mx.LL2 <- 5415.772
93 # example Mx..2: Saturated Model with Raw Data
94 # Mx answers hard-coded
95 # -----------------------------------------------------------------------------
96
97 omxCheckCloseEnough(LL4,Mx.LL2,.001)
98 omxCheckCloseEnough(EC4,Mx.EC2,.001)
99 omxCheckCloseEnough(EM4,Mx.EM2,.001)
100 # 4:RawMat
101 # -------------------------------------
102 # Compare OpenMx results to Mx results 
103 # (LL: likelihood; EC: expected covariance, EM: expected means)
104 # -----------------------------------------------------------------------------