File: xxm-hcfa.R

package info (click to toggle)
r-cran-openmx 2.21.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 14,412 kB
  • sloc: cpp: 36,577; ansic: 13,811; fortran: 2,001; sh: 1,440; python: 350; perl: 21; makefile: 5
file content (43 lines) | stat: -rw-r--r-- 1,724 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# http://xxm.times.uh.edu/learn-xxm/three-level-hierarchical-model-with-observed-and-latent-variables-at-multiple-levels/

library(OpenMx)

options(width=120)
got <- suppressWarnings(try(load("models/nightly/data/hcfa.xxm.RData")))
if (is(got, "try-error")) load("data/hcfa.xxm.RData")

hcfa.school$school <- as.integer(hcfa.school$school)
hcfa.teacher <- as.data.frame(lapply(hcfa.teacher, as.integer))
for (col in c('student', 'teacher', 'school')) {
	hcfa.student[[col]] <- as.integer(hcfa.student[[col]])
}

schoolModel <- mxModel(
    "schoolModel", type="RAM",
    manifestVars=paste0('q',1:3), latentVars=paste0('eta',1:2),
    mxData(hcfa.school, 'raw', primaryKey="school"),
    mxPath('one', paste0('q',1:3)),
    mxPath('eta2', paste0('q',1:3), free=c(FALSE,rep(TRUE,2)), values=1),
    mxPath(paste0('q',1:3), arrows=2, values=1),
    mxPath(paste0('eta',1:2), arrows=2, values=1),
    mxPath('eta2', 'eta1'))    

teacherModel <- mxModel(
    "teacherModel", type="RAM", schoolModel,
    latentVars='eta',
    mxData(hcfa.teacher, 'raw', primaryKey="teacher"),
    mxPath('eta', arrows=2, values=1),
    mxPath('schoolModel.eta1', 'eta', free=FALSE, values=1, joinKey="school"))

studentModel <- mxModel(
    "studentModel", type="RAM", teacherModel,
    latentVars='eta', manifestVars=paste0('y',1:3),
    mxData(hcfa.student, 'raw'),
    mxPath('one', paste0('y',1:3)),
    mxPath('eta', paste0('y',1:3), free=c(FALSE,rep(TRUE,2)), values=1),
    mxPath(paste0('y',1:3), arrows=2, values=1),
    mxPath('eta', arrows=2, values=1),
    mxPath('teacherModel.eta', 'eta', values=1, free=FALSE, joinKey='teacher'))

studentModel <- mxRun(studentModel)
omxCheckCloseEnough(studentModel$output$fit, 7107.828, 1e-2)