我想弄清楚如何在OpenMx包中爲R中的潛在增長曲線模型中正確添加斜率和截距的預測值。OpenMx中潛在增長曲線模型中斜率和截距的時間不變預測器
我想從一個非常簡單的增長曲線模型中預測性別的斜率和截距。爲了這個問題,我們假設這是在文檔here中描述的模型。
我會添加什麼以包含斜率和截距的時間不變預測器?在MPlus中,我會寫i on male;
,我會得到從性別變量到潛在截距的路徑估計。要在OpenMx中做同樣的事情,我會簡單地添加那個路徑規範?我是否需要覆蓋任何默認值,以便我不估計此清單變量的差異或平均路徑(或者我這樣做)?
爲了便於參考,下面是簡單增長曲線的代碼,以及我爲預測變量添加的代碼。但是,當我添加預測變量時,我得到的誤差'協方差矩陣不是正定的'。這也是我在真實數據中看到的。
n.b.,這個問題是在OpenMx論壇上的cross posted。
myLongitudinalData=data.frame(x1=rnorm(100),
x2=rnorm(100),
x3=rnorm(100),
x4=rnorm(100),
x5=rnorm(100),
male=round(runif(100,0,1)))
require(OpenMx)
growthCurveModel <- mxModel("Linear Growth Curve Model Path Specification",
type="RAM",
mxData(
myLongitudinalData,
type="raw"
),
manifestVars=c("x1","x2","x3","x4","x5"),
latentVars=c("intercept","slope"),
# residual variances
mxPath(
from=c("x1","x2","x3","x4","x5"),
arrows=2,
free=TRUE,
values = c(1, 1, 1, 1, 1),
labels=c("residual","residual","residual","residual","residual")
),
# latent variances and covariance
mxPath(
from=c("intercept","slope"),
arrows=2,
connect="unique.pairs",
free=TRUE,
values=c(1, 1, 1),
labels=c("vari", "cov", "vars")
),
# intercept loadings
mxPath(
from="intercept",
to=c("x1","x2","x3","x4","x5"),
arrows=1,
free=FALSE,
values=c(1, 1, 1, 1, 1)
),
# slope loadings
mxPath(
from="slope",
to=c("x1","x2","x3","x4","x5"),
arrows=1,
free=FALSE,
values=c(0, 1, 2, 3, 4)
),
# manifest means
mxPath(
from="one",
to=c("x1", "x2", "x3", "x4", "x5"),
arrows=1,
free=FALSE,
values=c(0, 0, 0, 0, 0)
),
# latent means
mxPath(
from="one",
to=c("intercept", "slope"),
arrows=1,
free=TRUE,
values=c(1, 1),
labels=c("meani", "means")
)
) # close model
growthCurveFit <- mxRun(growthCurveModel)
summary(growthCurveFit)
我嘗試添加預測 - 從它我的性別變量添加到清單中的變量,然後創建一個路徑定義的潛在變量(朝底部):
growthCurveModel2 <- mxModel("Linear Growth Curve Model Path Specification",
type="RAM",
mxData(
myLongitudinalData,
type="raw"
),
manifestVars=c("x1","x2","x3","x4","x5","male"),
latentVars=c("intercept","slope"),
# residual variances
mxPath(
from=c("x1","x2","x3","x4","x5"),
arrows=2,
free=TRUE,
values = c(1, 1, 1, 1, 1),
labels=c("residual","residual","residual","residual","residual")
),
# latent variances and covariance
mxPath(
from=c("intercept","slope"),
arrows=2,
connect="unique.pairs",
free=TRUE,
values=c(1, 1, 1),
labels=c("vari", "cov", "vars")
),
# intercept loadings
mxPath(
from="intercept",
to=c("x1","x2","x3","x4","x5"),
arrows=1,
free=FALSE,
values=c(1, 1, 1, 1, 1)
),
# slope loadings
mxPath(
from="slope",
to=c("x1","x2","x3","x4","x5"),
arrows=1,
free=FALSE,
values=c(0, 1, 2, 3, 4)
),
# manifest means
mxPath(
from="one",
to=c("x1", "x2", "x3", "x4", "x5"),
arrows=1,
free=FALSE,
values=c(0, 0, 0, 0, 0)
),
# latent means
mxPath(
from="one",
to=c("intercept", "slope"),
arrows=1,
free=TRUE,
values=c(1, 1),
labels=c("meani", "means")
),
mxPath(
from="male",
to=c("intercept", "slope"),
arrows=1,
free=TRUE,
values=c(1,1),
labels=c("iOnMale", "sOnMale"))
) # close model
growthCurveFit2 <- mxRun(growthCurveModel2)
summary(growthCurveFit2)