Fit the Continuous-Time Vector Autoregressive Model Using the OpenMx Package
Ivan Jacob Agaloos Pesigan
2025-02-20
Source:vignettes/fit-ct-var-mx.Rmd
fit-ct-var-mx.Rmd
Data Generation Using the SimSSMOUFixed
Function from
the simStateSpace
Package
n
#> [1] 5
time
#> [1] 100
delta_t
#> [1] 0.1
mu0
#> [1] 0 0 0
sigma0
#> [,1] [,2] [,3]
#> [1,] 1.0 0.2 0.2
#> [2,] 0.2 1.0 0.2
#> [3,] 0.2 0.2 1.0
sigma0_l # sigma0_l <- t(chol(sigma0))
#> [,1] [,2] [,3]
#> [1,] 1.0 0.0000000 0.0000000
#> [2,] 0.2 0.9797959 0.0000000
#> [3,] 0.2 0.1632993 0.9660918
mu
#> [1] 0 0 0
phi
#> [,1] [,2] [,3]
#> [1,] -0.357 0.000 0.000
#> [2,] 0.771 -0.511 0.000
#> [3,] -0.450 0.729 -0.693
sigma
#> [,1] [,2] [,3]
#> [1,] 0.24455556 0.02201587 -0.05004762
#> [2,] 0.02201587 0.07067800 0.01539456
#> [3,] -0.05004762 0.01539456 0.07553061
sigma_l # sigma_l <- t(chol(sigma))
#> [,1] [,2] [,3]
#> [1,] 0.49452559 0.0000000 0.000000
#> [2,] 0.04451917 0.2620993 0.000000
#> [3,] -0.10120330 0.0759256 0.243975
nu
#> [1] 0 0 0
lambda
#> [,1] [,2] [,3]
#> [1,] 1 0 0
#> [2,] 0 1 0
#> [3,] 0 0 1
theta
#> [,1] [,2] [,3]
#> [1,] 0.2 0.0 0.0
#> [2,] 0.0 0.2 0.0
#> [3,] 0.0 0.0 0.2
theta_l # theta_l <- t(chol(theta))
#> [,1] [,2] [,3]
#> [1,] 0.4472136 0.0000000 0.0000000
#> [2,] 0.0000000 0.4472136 0.0000000
#> [3,] 0.0000000 0.0000000 0.4472136
library(simStateSpace)
sim <- SimSSMOUFixed(
n = n,
time = time,
delta_t = delta_t,
mu0 = mu0,
sigma0_l = sigma0_l,
mu = mu,
phi = phi,
sigma_l = sigma_l,
nu = nu,
lambda = lambda,
theta_l = theta_l,
type = 0
)
data <- as.data.frame(sim)
colnames(data) <- c("id", "time", "x", "m", "y")
head(data)
#> id time x m y
#> 1 1 0.0 -0.3504435 0.41877429 2.611996
#> 2 1 0.1 -0.5920330 1.07433208 1.669272
#> 3 1 0.2 -0.7619855 1.21483834 2.369837
#> 4 1 0.3 -1.6964652 0.21209722 2.128531
#> 5 1 0.4 -1.2282686 0.09950326 1.891140
#> 6 1 0.5 0.1433985 0.66784226 2.036033
Model Fitting
We use the OpenMx
package to fit the continuous-time
vector autoregressive model.
Prepare the Initial Condition
mu0 <- mxMatrix(
type = "Full",
nrow = 3,
ncol = 1,
free = TRUE,
values = matrix(
data = c(
0, 0, 0
),
nrow = 3,
ncol = 1
),
labels = matrix(
data = c(
"mu0_1_1", "mu0_2_1", "mu0_3_1"
),
nrow = 3,
ncol = 1
),
lbound = NA,
ubound = NA,
byrow = FALSE,
dimnames = list(
c("eta_x", "eta_m", "eta_y"),
"mu0"
),
name = "mu0"
)
sigma0 <- mxMatrix(
type = "Symm",
nrow = 3,
ncol = 3,
free = TRUE,
values = matrix(
data = c(
1.0, 0.2, 0.2,
0.2, 1.0, 0.2,
0.2, 0.2, 1.0
),
nrow = 3,
ncol = 3
),
labels = matrix(
data = c(
"sigma0_1_1", "sigma0_2_1", "sigma0_3_1",
"sigma0_2_1", "sigma0_2_2", "sigma0_3_2",
"sigma0_3_1", "sigma0_3_2", "sigma0_3_3"
),
nrow = 3,
ncol = 3
),
lbound = matrix(
data = c(
0, NA, NA,
NA, 0, NA,
NA, NA, 0
),
nrow = 3,
ncol = 3
),
ubound = NA,
byrow = FALSE,
dimnames = list(
c("eta_x", "eta_m", "eta_y"),
c("eta_x", "eta_m", "eta_y")
),
name = "sigma0"
)
Prepare the Dynamic Model
phi <- mxMatrix(
type = "Full",
nrow = 3,
ncol = 3,
free = TRUE,
values = matrix(
data = c(
-0.2, 0.0, 0.0,
0.0, -0.2, 0.0,
0.0, 0.0, -0.2
),
nrow = 3,
ncol = 3
),
labels = matrix(
data = c(
"phi_1_1", "phi_2_1", "phi_3_1",
"phi_1_2", "phi_2_2", "phi_3_2",
"phi_1_3", "phi_2_3", "phi_3_3"
),
nrow = 3,
ncol = 3
),
lbound = -1.5,
ubound = 1.5,
byrow = FALSE,
dimnames = list(
c("eta_x", "eta_m", "eta_y"),
c("eta_x", "eta_m", "eta_y")
),
name = "phi"
)
Prepare the Noise Matrices
sigma <- mxMatrix(
type = "Symm",
nrow = 3,
ncol = 3,
free = TRUE,
values = 0.2 * diag(3),
labels = matrix(
data = c(
"sigma_1_1", "sigma_2_1", "sigma_3_1",
"sigma_2_1", "sigma_2_2", "sigma_3_2",
"sigma_3_1", "sigma_3_2", "sigma_3_3"
),
nrow = 3,
ncol = 3
),
lbound = matrix(
data = c(
0, NA, NA,
NA, 0, NA,
NA, NA, 0
),
nrow = 3,
ncol = 3
),
ubound = NA,
byrow = FALSE,
dimnames = list(
c("eta_x", "eta_m", "eta_y"),
c("eta_x", "eta_m", "eta_y")
),
name = "sigma"
)
theta <- mxMatrix(
type = "Diag",
nrow = 3,
ncol = 3,
free = TRUE,
values = 0.2 * diag(3),
labels = matrix(
data = c(
"theta_1_1", "fixed", "fixed",
"fixed", "theta_2_2", "fixed",
"fixed", "fixed", "theta_3_3"
),
nrow = 3,
ncol = 3
),
lbound = matrix(
data = c(
0, NA, NA,
NA, 0, NA,
NA, NA, 0
),
nrow = 3,
ncol = 3
),
ubound = NA,
byrow = FALSE,
dimnames = list(
c("x", "m", "y"),
c("x", "m", "y")
),
name = "theta"
)
Prepare Miscellaneous Matrices
time <- mxMatrix(
type = "Full",
nrow = 1,
ncol = 1,
free = FALSE,
labels = "data.time",
name = "time"
)
gamma <- mxMatrix(
type = "Zero",
nrow = 3,
ncol = 1,
name = "gamma"
)
kappa <- mxMatrix(
type = "Zero",
nrow = 3,
ncol = 1,
name = "kappa"
)
covariate <- mxMatrix(
type = "Zero",
nrow = 1,
ncol = 1,
name = "covariate"
)
Prepare the Model
In this parameterization, we fit the same model to all individuals
(id
) using a multi-group framework, assuming that the
parameters remain fixed across individuals.
model <- mxModel(
model = "CTVAR",
phi,
gamma,
lambda,
kappa,
sigma,
theta,
mu0,
sigma0,
covariate,
time,
mxExpectationStateSpaceContinuousTime(
A = "phi",
B = "gamma",
C = "lambda",
D = "kappa",
Q = "sigma",
R = "theta",
x0 = "mu0",
P0 = "sigma0",
u = "covariate",
t = "time",
dimnames = c("x", "m", "y")
),
mxFitFunctionML(),
mxData(
observed = data,
type = "raw"
)
)
ids <- sort(
unique(data[, "id"])
)
model_id <- lapply(
X = ids,
FUN = function(i,
data,
model) {
return(
mxModel(
name = paste0("CTVAR", "_", i),
model = model,
mxData(
observed = data[
which(
data[, "id"] == i
), ,
drop = FALSE
],
type = "raw"
)
)
)
},
data = data,
model = model
)
Fit the Model
fit <- mxTryHardctsem(
model = mxModel(
name = "CTVAR",
model_id,
mxFitFunctionMultigroup(
paste0(
"CTVAR",
"_",
ids
)
)
),
extraTries = 1000
)
#> Running CTVAR with 27 parameters
#>
#> Beginning initial fit attempt
#> Running CTVAR with 27 parameters
#>
#> Lowest minimum so far: 2176.87071212889
#>
#> Solution found
#>
#> Solution found! Final fit=2176.8707 (started at 2276.7509) (1 attempt(s): 1 valid, 0 errors)
#> Start values from best fit:
#> -0.469633097943292,0.480979436662968,-0.271144930394438,-0.108492958846069,-0.233084787767979,0.579655044136986,0.121502295445461,-0.0743526254508862,-0.573819308509521,0.294397331358657,0.0597425749324876,0.0483077801421585,-0.0767125109058171,0.00757282595532045,0.0918244085985979,0.199133514903907,0.211264230326455,0.191340809469612,-0.218807723002373,0.573571407991234,0.640524197606774,0.0663834450624793,0.0480089949288089,0.357386121201136,-0.380916208653524,0.194542015850014,2.89853105941126
summary(fit)
#> Summary of CTVAR
#>
#> free parameters:
#> name matrix row col Estimate Std.Error A lbound
#> 1 phi_1_1 CTVAR_1.phi eta_x eta_x -0.469633098 0.38714913 -1.5
#> 2 phi_2_1 CTVAR_1.phi eta_m eta_x 0.480979437 0.18010565 -1.5
#> 3 phi_3_1 CTVAR_1.phi eta_y eta_x -0.271144930 0.20890955 -1.5
#> 4 phi_1_2 CTVAR_1.phi eta_x eta_m -0.108492959 0.23527670 -1.5
#> 5 phi_2_2 CTVAR_1.phi eta_m eta_m -0.233084788 0.11116194 -1.5
#> 6 phi_3_2 CTVAR_1.phi eta_y eta_m 0.579655044 0.13645810 -1.5
#> 7 phi_1_3 CTVAR_1.phi eta_x eta_y 0.121502295 0.15751240 -1.5
#> 8 phi_2_3 CTVAR_1.phi eta_m eta_y -0.074352625 0.07370607 -1.5
#> 9 phi_3_3 CTVAR_1.phi eta_y eta_y -0.573819309 0.09164907 -1.5
#> 10 sigma_1_1 CTVAR_1.sigma eta_x eta_x 0.294397331 0.12081184 0
#> 11 sigma_2_1 CTVAR_1.sigma eta_x eta_m 0.059742575 0.04037450
#> 12 sigma_2_2 CTVAR_1.sigma eta_m eta_m 0.048307780 0.02401624 ! 0!
#> 13 sigma_3_1 CTVAR_1.sigma eta_x eta_y -0.076712511 0.04234992
#> 14 sigma_3_2 CTVAR_1.sigma eta_m eta_y 0.007572826 0.02113105
#> 15 sigma_3_3 CTVAR_1.sigma eta_y eta_y 0.091824409 0.03422524 0
#> 16 theta_1_1 CTVAR_1.theta x x 0.199133515 0.01820020 0
#> 17 theta_2_2 CTVAR_1.theta m m 0.211264230 0.01488856 0
#> 18 theta_3_3 CTVAR_1.theta y y 0.191340809 0.01404758 0
#> 19 mu0_1_1 CTVAR_1.mu0 eta_x mu0 -0.218807723 0.16816689
#> 20 mu0_2_1 CTVAR_1.mu0 eta_m mu0 0.573571408 0.28117884
#> 21 mu0_3_1 CTVAR_1.mu0 eta_y mu0 0.640524198 0.76950280
#> 22 sigma0_1_1 CTVAR_1.sigma0 eta_x eta_x 0.066383445 0.09450999 0
#> 23 sigma0_2_1 CTVAR_1.sigma0 eta_x eta_m 0.048008995 0.10778010
#> 24 sigma0_2_2 CTVAR_1.sigma0 eta_m eta_m 0.357386121 0.24857019 0
#> 25 sigma0_3_1 CTVAR_1.sigma0 eta_x eta_y -0.380916209 0.34637400
#> 26 sigma0_3_2 CTVAR_1.sigma0 eta_m eta_y 0.194542016 0.49953722
#> 27 sigma0_3_3 CTVAR_1.sigma0 eta_y eta_y 2.898531059 1.86988934 0
#> ubound
#> 1 1.5
#> 2 1.5
#> 3 1.5
#> 4 1.5
#> 5 1.5
#> 6 1.5
#> 7 1.5
#> 8 1.5
#> 9 1.5
#> 10
#> 11
#> 12
#> 13
#> 14
#> 15
#> 16
#> 17
#> 18
#> 19
#> 20
#> 21
#> 22
#> 23
#> 24
#> 25
#> 26
#> 27
#>
#> Model Statistics:
#> | Parameters | Degrees of Freedom | Fit (-2lnL units)
#> Model: 27 1473 2176.871
#> Saturated: NA NA NA
#> Independence: NA NA NA
#> Number of observations/statistics: 500/1500
#>
#> Information Criteria:
#> | df Penalty | Parameters Penalty | Sample-Size Adjusted
#> AIC: -769.1293 2230.871 2234.074
#> BIC: -6977.2470 2344.665 2258.965
#> CFI: NA
#> TLI: 1 (also known as NNFI)
#> RMSEA: 0 [95% CI (NA, NA)]
#> Prob(RMSEA <= 0.05): NA
#> To get additional fit indices, see help(mxRefModels)
#> timestamp: 2025-02-20 21:17:06
#> Wall clock time: 24.46378 secs
#> optimizer: SLSQP
#> OpenMx version number: 2.21.13
#> Need help? See help(mxSummary)
coefs <- coef(fit)
vcovs <- vcov(fit)
Extract Matrices from the Fitted Model to use in cTMed
phi_names <- c(
"phi_1_1", "phi_2_1", "phi_3_1",
"phi_1_2", "phi_2_2", "phi_3_2",
"phi_1_3", "phi_2_3", "phi_3_3"
)
sigma_names <- c(
"sigma_1_1", "sigma_2_1", "sigma_3_1",
"sigma_2_1", "sigma_2_2", "sigma_3_2",
"sigma_3_1", "sigma_3_2", "sigma_3_3"
)
sigma_vech_names <- c(
"sigma_1_1", "sigma_2_1", "sigma_3_1",
"sigma_2_2", "sigma_3_2",
"sigma_3_3"
)
theta_names <- c(
"phi_1_1", "phi_2_1", "phi_3_1",
"phi_1_2", "phi_2_2", "phi_3_2",
"phi_1_3", "phi_2_3", "phi_3_3",
"sigma_1_1", "sigma_2_1", "sigma_3_1",
"sigma_2_2", "sigma_3_2",
"sigma_3_3"
)
phi <- matrix(
data = coefs[phi_names],
nrow = 3,
ncol = 3
)
sigma <- matrix(
data = coefs[sigma_names],
nrow = 3,
ncol = 3
)
theta <- coefs[theta_names]
vcov_phi_vec <- vcovs[phi_names, phi_names]
vcov_sigma_vech <- vcovs[sigma_vech_names, sigma_vech_names]
vcov_theta <- vcovs[theta_names, theta_names]
Estimated Drift Matrix with Corresponding Sampling Covariance Matrix
phi
#> [,1] [,2] [,3]
#> [1,] -0.4696331 -0.1084930 0.12150230
#> [2,] 0.4809794 -0.2330848 -0.07435263
#> [3,] -0.2711449 0.5796550 -0.57381931
vcov_phi_vec
#> phi_1_1 phi_2_1 phi_3_1 phi_1_2 phi_2_2
#> phi_1_1 0.149884446 0.019442765 -0.0264543952 -0.067196940 -0.0085429557
#> phi_2_1 0.019442765 0.032438046 0.0037159313 -0.005776780 -0.0147797147
#> phi_3_1 -0.026454395 0.003715931 0.0436431997 0.011722580 -0.0011680496
#> phi_1_2 -0.067196940 -0.005776780 0.0117225801 0.055355124 0.0061148915
#> phi_2_2 -0.008542956 -0.014779715 -0.0011680496 0.006114891 0.0123569762
#> phi_3_2 0.012867934 -0.003081525 -0.0201876586 -0.011418150 0.0019136149
#> phi_1_3 0.034537185 0.003067041 -0.0051365826 -0.024766042 -0.0024738588
#> phi_2_3 0.004132925 0.007046874 0.0004648646 -0.002429955 -0.0055880785
#> phi_3_3 -0.006626738 0.001331255 0.0091461824 0.004989733 -0.0009095608
#> phi_3_2 phi_1_3 phi_2_3 phi_3_3
#> phi_1_1 0.0128679338 0.034537185 0.0041329251 -0.0066267381
#> phi_2_1 -0.0030815247 0.003067041 0.0070468741 0.0013312548
#> phi_3_1 -0.0201876586 -0.005136583 0.0004648646 0.0091461824
#> phi_1_2 -0.0114181495 -0.024766042 -0.0024299553 0.0049897334
#> phi_2_2 0.0019136149 -0.002473859 -0.0055880785 -0.0009095608
#> phi_3_2 0.0186208135 0.004510307 -0.0006387087 -0.0078702326
#> phi_1_3 0.0045103070 0.024810157 0.0028901996 -0.0049119984
#> phi_2_3 -0.0006387087 0.002890200 0.0054325849 0.0007397764
#> phi_3_3 -0.0078702326 -0.004911998 0.0007397764 0.0083995526
Process Noise Covariance Matrix with Corresponding Sampling Covariance Matrix
sigma
#> [,1] [,2] [,3]
#> [1,] 0.29439733 0.059742575 -0.076712511
#> [2,] 0.05974257 0.048307780 0.007572826
#> [3,] -0.07671251 0.007572826 0.091824409
vcov_sigma_vech
#> sigma_1_1 sigma_2_1 sigma_3_1 sigma_2_2 sigma_3_2
#> sigma_1_1 0.0145955018 2.188831e-03 -1.989020e-03 3.576194e-04 -2.489777e-04
#> sigma_2_1 0.0021888309 1.630100e-03 -3.754290e-05 4.305307e-04 -3.187041e-04
#> sigma_3_1 -0.0019890204 -3.754290e-05 1.793516e-03 5.891012e-05 2.308878e-04
#> sigma_2_2 0.0003576194 4.305307e-04 5.891012e-05 5.767800e-04 8.499908e-05
#> sigma_3_2 -0.0002489777 -3.187041e-04 2.308878e-04 8.499908e-05 4.465211e-04
#> sigma_3_3 0.0001281149 5.442322e-05 -6.234443e-04 -2.191944e-05 6.906819e-05
#> sigma_3_3
#> sigma_1_1 1.281149e-04
#> sigma_2_1 5.442322e-05
#> sigma_3_1 -6.234443e-04
#> sigma_2_2 -2.191944e-05
#> sigma_3_2 6.906819e-05
#> sigma_3_3 1.171367e-03
Estimated Drift Matrix and Process Noise Covariance Matrix with Corresponding Sampling Covariance Matrix
theta
#> phi_1_1 phi_2_1 phi_3_1 phi_1_2 phi_2_2 phi_3_2
#> -0.469633098 0.480979437 -0.271144930 -0.108492959 -0.233084788 0.579655044
#> phi_1_3 phi_2_3 phi_3_3 sigma_1_1 sigma_2_1 sigma_3_1
#> 0.121502295 -0.074352625 -0.573819309 0.294397331 0.059742575 -0.076712511
#> sigma_2_2 sigma_3_2 sigma_3_3
#> 0.048307780 0.007572826 0.091824409
vcov_theta
#> phi_1_1 phi_2_1 phi_3_1 phi_1_2 phi_2_2
#> phi_1_1 1.498844e-01 0.0194427646 -0.0264543952 -0.0671969397 -8.542956e-03
#> phi_2_1 1.944276e-02 0.0324380465 0.0037159313 -0.0057767800 -1.477971e-02
#> phi_3_1 -2.645440e-02 0.0037159313 0.0436431997 0.0117225801 -1.168050e-03
#> phi_1_2 -6.719694e-02 -0.0057767800 0.0117225801 0.0553551237 6.114891e-03
#> phi_2_2 -8.542956e-03 -0.0147797147 -0.0011680496 0.0061148915 1.235698e-02
#> phi_3_2 1.286793e-02 -0.0030815247 -0.0201876586 -0.0114181495 1.913615e-03
#> phi_1_3 3.453718e-02 0.0030670410 -0.0051365826 -0.0247660425 -2.473859e-03
#> phi_2_3 4.132925e-03 0.0070468741 0.0004648646 -0.0024299553 -5.588079e-03
#> phi_3_3 -6.626738e-03 0.0013312548 0.0091461824 0.0049897334 -9.095608e-04
#> sigma_1_1 -3.753065e-02 -0.0058911663 0.0060223065 0.0141593672 2.125709e-03
#> sigma_2_1 -4.092461e-03 -0.0048540800 -0.0004555514 -0.0001070123 1.497035e-03
#> sigma_3_1 4.627567e-03 -0.0000644365 -0.0053800826 -0.0014738126 3.798997e-05
#> sigma_2_2 -4.553220e-04 -0.0006151725 -0.0002799013 -0.0003105556 -5.505724e-04
#> sigma_3_2 1.929390e-04 0.0011913035 -0.0001858181 0.0003444267 -4.829790e-04
#> sigma_3_3 2.455237e-05 -0.0003577351 0.0018901936 -0.0002624319 2.917148e-04
#> phi_3_2 phi_1_3 phi_2_3 phi_3_3 sigma_1_1
#> phi_1_1 0.0128679338 3.453718e-02 4.132925e-03 -6.626738e-03 -0.0375306535
#> phi_2_1 -0.0030815247 3.067041e-03 7.046874e-03 1.331255e-03 -0.0058911663
#> phi_3_1 -0.0201876586 -5.136583e-03 4.648646e-04 9.146182e-03 0.0060223065
#> phi_1_2 -0.0114181495 -2.476604e-02 -2.429955e-03 4.989733e-03 0.0141593672
#> phi_2_2 0.0019136149 -2.473859e-03 -5.588079e-03 -9.095608e-04 0.0021257094
#> phi_3_2 0.0186208135 4.510307e-03 -6.387087e-04 -7.870233e-03 -0.0024865465
#> phi_1_3 0.0045103070 2.481016e-02 2.890200e-03 -4.911998e-03 -0.0072674417
#> phi_2_3 -0.0006387087 2.890200e-03 5.432585e-03 7.397764e-04 -0.0010063249
#> phi_3_3 -0.0078702326 -4.911998e-03 7.397764e-04 8.399553e-03 0.0012881971
#> sigma_1_1 -0.0024865465 -7.267442e-03 -1.006325e-03 1.288197e-03 0.0145955018
#> sigma_2_1 0.0005776911 -2.901908e-04 -7.417505e-04 -1.819125e-04 0.0021888309
#> sigma_3_1 0.0018538361 -1.188467e-04 -1.569975e-04 -6.344679e-04 -0.0019890204
#> sigma_2_2 -0.0000053559 5.392112e-05 1.634474e-04 -4.109799e-05 0.0003576194
#> sigma_3_2 -0.0005005247 -2.508785e-04 -4.332547e-06 9.314361e-05 -0.0002489777
#> sigma_3_3 -0.0003870415 4.061610e-04 -2.480889e-04 -5.097955e-04 0.0001281149
#> sigma_2_1 sigma_3_1 sigma_2_2 sigma_3_2 sigma_3_3
#> phi_1_1 -4.092461e-03 4.627567e-03 -4.553220e-04 1.929390e-04 2.455237e-05
#> phi_2_1 -4.854080e-03 -6.443650e-05 -6.151725e-04 1.191303e-03 -3.577351e-04
#> phi_3_1 -4.555514e-04 -5.380083e-03 -2.799013e-04 -1.858181e-04 1.890194e-03
#> phi_1_2 -1.070123e-04 -1.473813e-03 -3.105556e-04 3.444267e-04 -2.624319e-04
#> phi_2_2 1.497035e-03 3.798997e-05 -5.505724e-04 -4.829790e-04 2.917148e-04
#> phi_3_2 5.776911e-04 1.853836e-03 -5.355900e-06 -5.005247e-04 -3.870415e-04
#> phi_1_3 -2.901908e-04 -1.188467e-04 5.392112e-05 -2.508785e-04 4.061610e-04
#> phi_2_3 -7.417505e-04 -1.569975e-04 1.634474e-04 -4.332547e-06 -2.480889e-04
#> phi_3_3 -1.819125e-04 -6.344679e-04 -4.109799e-05 9.314361e-05 -5.097955e-04
#> sigma_1_1 2.188831e-03 -1.989020e-03 3.576194e-04 -2.489777e-04 1.281149e-04
#> sigma_2_1 1.630100e-03 -3.754290e-05 4.305307e-04 -3.187041e-04 5.442322e-05
#> sigma_3_1 -3.754290e-05 1.793516e-03 5.891012e-05 2.308878e-04 -6.234443e-04
#> sigma_2_2 4.305307e-04 5.891012e-05 5.767800e-04 8.499908e-05 -2.191944e-05
#> sigma_3_2 -3.187041e-04 2.308878e-04 8.499908e-05 4.465211e-04 6.906819e-05
#> sigma_3_3 5.442322e-05 -6.234443e-04 -2.191944e-05 6.906819e-05 1.171367e-03
References
Hunter, M. D. (2017). State space modeling in an open source, modular,
structural equation modeling environment. Structural Equation
Modeling: A Multidisciplinary Journal, 25(2), 307–324. https://doi.org/10.1080/10705511.2017.1369354
Neale, M. C., Hunter, M. D., Pritikin, J. N., Zahery, M., Brick, T. R.,
Kirkpatrick, R. M., Estabrook, R., Bates, T. C., Maes, H. H., &
Boker, S. M. (2015). OpenMx 2.0: Extended structural
equation and statistical modeling. Psychometrika,
81(2), 535–549. https://doi.org/10.1007/s11336-014-9435-8
R Core Team. (2024). R: A language and environment for
statistical computing. R Foundation for Statistical Computing. https://www.R-project.org/