Move all fitfunction args to expectation
[openmx:openmx.git] / models / nightly / 3LatentMultiRegWith2LevelModeratorAndMissing-a.R
1 # ---------------------------------------------------------------------
2 # Program: 3LatentMultiRegWithModerator100521.R
3 #  Author: Steven M. Boker
4 #    Date: Sat May 22 11:13:51 EDT 2010
5 #
6 # This program tests variations on a latent variable multiple regression
7 #    using a standard RAM.
8 #
9 # ---------------------------------------------------------------------
10 # Revision History
11 #    -- Sat May 22 11:13:51 EDT 2010
12 #      Created 3LatentMultiRegWithModerator100521.R.
13 #
14 # ---------------------------------------------------------------------
15
16 # ----------------------------------
17 # Read libraries and set options.
18
19 library(OpenMx)
20
21 options(width=100)
22
23 # ---------------------------------------------------------------------
24 # Data for multiple regression of F3 on F1 and F2 with moderator variable Z.
25
26 numberSubjects <- 1000
27 numberIndicators <- 12
28 numberFactors <- 3
29
30 set.seed(10)
31
32 fixedBMatrixF <- matrix(c(.4, .2), 2, 1, byrow=TRUE)
33 randomBMatrixF <- matrix(c(.3, .5), 2, 1, byrow=TRUE)
34 XMatrixF <- matrix(rnorm(numberSubjects*2, mean=0, sd=1), numberSubjects, 2)
35 UMatrixF <- matrix(rnorm(numberSubjects*1, mean=0, sd=1), numberSubjects, 1)
36 Z <- matrix(floor(runif(numberSubjects, min=0, max=1.999)), nrow=numberSubjects, ncol=2)
37
38 XMatrix <- cbind(XMatrixF, XMatrixF %*% fixedBMatrixF + (XMatrixF*Z) %*% randomBMatrixF + UMatrixF)
39
40 BMatrix <- matrix(c( 1, .6, .7, .8,  0,  0,  0,  0,  0,  0,  0,  0,
41                      0,  0,  0,  0,  1, .5, .6, .7,  0,  0,  0,  0,
42                      0,  0,  0,  0,  0,  0,  0,  0,  1, .7, .6, .5), numberFactors, numberIndicators, byrow=TRUE)
43 UMatrix <- matrix(rnorm(numberSubjects*numberIndicators, mean=0, sd=1), numberSubjects, numberIndicators)
44 YMatrix <- XMatrix %*% BMatrix + UMatrix
45
46 cor(cbind(XMatrix,Z[,1]))
47
48 dimnames(YMatrix) <- list(NULL, paste("X", 1:numberIndicators, sep=""))
49
50 YMatrixDegraded <- YMatrix
51 YMatrixDegraded[runif(length(c(YMatrix)), min=0.1, max=1.1) > 1] <- NA
52
53 latentMultiRegModerated1 <- data.frame(YMatrixDegraded,Z=Z[,1])
54
55 round(cor(latentMultiRegModerated1), 3)
56 round(cov(latentMultiRegModerated1), 3)
57
58 latentMultiRegModerated1$Z <- latentMultiRegModerated1$Z - mean(latentMultiRegModerated1$Z)
59
60 numberFactors <- 3
61 numberIndicators <- 12
62 numberModerators <- 1
63 indicators <- paste("X", 1:numberIndicators, sep="")
64 moderators <- c("Z")
65 totalVars <- numberIndicators + numberFactors + numberModerators
66
67 # ----------------------------------
68 # Build an orthogonal simple structure factor model
69
70 latents <- paste("F", 1:numberFactors, sep="")
71
72 uniqueLabels <- paste("U_", indicators, sep="")
73 meanLabels <- paste("M_", latents, sep="")
74 factorVarLabels <- paste("Var_", latents, sep="")
75
76 latents1 <- latents[1]
77 indicators1 <- indicators[1:4]
78 loadingLabels1 <- paste("b_F1", indicators[1:4], sep="") 
79 latents2 <- latents[2]
80 indicators2 <- indicators[5:8]
81 loadingLabels2 <- paste("b_F2", indicators[5:8], sep="") 
82 latents3 <- latents[3]
83 indicators3 <- indicators[9:12]
84 loadingLabels3 <- paste("b_F3", indicators[9:12], sep="") 
85
86 threeLatentOrthogonal <- mxModel("threeLatentOrthogonal",
87     type="RAM",
88     manifestVars=c(indicators),
89     latentVars=c(latents,"dummy1"),
90     mxPath(from=latents1, to=indicators1, 
91            arrows=1, connect="all.pairs",
92            free=TRUE, values=.2, 
93            labels=loadingLabels1),
94     mxPath(from=latents2, to=indicators2, 
95            arrows=1, connect="all.pairs",
96            free=TRUE, values=.2, 
97            labels=loadingLabels2),
98     mxPath(from=latents3, to=indicators3, 
99            arrows=1, connect="all.pairs",
100            free=TRUE, values=.2, 
101            labels=loadingLabels3),
102     mxPath(from=latents1, to=indicators1[1], 
103            arrows=1, 
104            free=FALSE, values=1),
105     mxPath(from=latents2, to=indicators2[1], 
106            arrows=1, 
107            free=FALSE, values=1),
108     mxPath(from=latents3, to=indicators3[1], 
109            arrows=1, 
110            free=FALSE, values=1),
111     mxPath(from=indicators, 
112            arrows=2, 
113            free=TRUE, values=.2, 
114            labels=uniqueLabels),
115     mxPath(from=latents,
116            arrows=2, 
117            free=TRUE, values=.8, 
118            labels=factorVarLabels),
119     mxPath(from="one", to=indicators, 
120            arrows=1, free=FALSE, values=0),
121     mxPath(from="one", to=c(latents), 
122            arrows=1, free=TRUE, values=.1, 
123            labels=meanLabels),
124     mxData(observed=latentMultiRegModerated1, type="raw")
125     )
126
127 threeLatentOrthogonalOut <- mxRun(threeLatentOrthogonal)
128