File: loadMatrix.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 (72 lines) | stat: -rw-r--r-- 2,267 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
library(OpenMx)
library(mvtnorm)

Cov <- rWishart(4, 20, toeplitz(c(2,1)/20))
write.table(t(apply(Cov, 3, vech)),
            file="cov.csv", col.names=FALSE, row.names=FALSE)
Mean <- rmvnorm(4, sigma = diag(2))
write.table(Mean, file="mean.csv", col.names=FALSE, row.names=FALSE)

m1 <- mxModel(
  "test1",
  mxMatrix("Full", 1,2, values=0,       name="mean"),
  mxMatrix("Symm", 2,2, values=diag(2), name="cov"),
  mxMatrix("Full", 1,2, values=-1,      name="lbound"),
  mxMatrix("Full", 1,2, values=1,       name="ubound"),
  mxAlgebra(omxMnor(cov,mean,lbound,ubound), name="area"),
  mxFitFunctionAlgebra("area"),
  mxComputeLoop(list(
    mxComputeLoadMatrix(c('mean', 'cov'),
	    path=c('mean.csv', 'cov.csv')),
    mxComputeOnce('fitfunction', 'fit'),
    mxComputeCheckpoint(path="loadMatrix.csv")
  ), i=1:4))

m1 <- mxRun(m1)

log <- read.table("loadMatrix.csv", sep="\t",
                   header=TRUE, check.names = FALSE, stringsAsFactors = FALSE)

e1 <- sapply(1:4, function (x) omxMnor(covariance = Cov[,,x], means = Mean[x,],
                                 lbound = c(-1,-1), ubound = c(1,1)))

omxCheckCloseEnough(log$objective, e1, 1e-4)

#---------

df <- as.data.frame(cbind(Mean, t(apply(Cov, 3, vech))))

plan <- mxComputeLoop(list(
  mxComputeLoadMatrix(c('mean', 'cov'), observed=df, method = 'data.frame'),
  mxComputeOnce('fitfunction', 'fit'),
  CP=mxComputeCheckpoint(toReturn=TRUE)), maxIter = 4L)

m1 <- mxRun(mxModel(m1, plan))

omxCheckCloseEnough(e1, m1$compute$steps$CP$log$objective, 1e-4)

#---------

m2 <- mxModel(m1,   mxComputeLoop(list(
    mxComputeLoadMatrix(c('mean', 'cov'),
	    path=c('mean.csv', 'cov.csv')),
    mxComputeOnce('fitfunction', 'fit'),
    mxComputeCheckpoint(path="loadMatrix.csv")
), i=3:4))

m2 <- mxRun(m2)

log <- read.table("loadMatrix.csv", sep="\t",
                   header=TRUE, check.names = FALSE, stringsAsFactors = FALSE)

omxCheckCloseEnough(log$objective, e1[3:4], 1e-4)

m3 <- mxModel(m1,   mxComputeLoop(list(
    mxComputeLoadMatrix(c('mean', 'cov'),
	    path=c('mean.csv', 'cov.csv')),
    mxComputeOnce('fitfunction', 'fit'),
    mxComputeCheckpoint(path="loadMatrix.csv")
), i=2:1))

omxCheckError(mxRun(m3),
	"MxComputeLoadMatrix: at line 3, cannot seek backwards to line 1")