2013-11-20 43 views
1

我想弄清楚如何在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) 

回答

0

我相信我想通了 - 必須從克萊恩的SEM書(2011)這個圖指定預測的偏差和平均結構的路徑,在線路: LGC model with two predictors

在MPlus,我認爲默認迴歸預測變量的潛在斜率和截距是將平均結構路徑設置爲0,並將方差路徑設置爲1. 對此我不是100%確定,但是這給了我相同的參數化和非常相似的估計。所以,我加入這個片段上述第二模型:

      #Predictor mean structure 
         mxPath(
          from="one", 
          to="male", 
          arrows=1, 
          free=FALSE, 
          values = 0 
         ), 
         #Predictor Variance 
         mxPath(
          from="male", 
          arrows=2, 
          free=FALSE, 
          values = 1 
         ) 

克萊恩,R. B.(2011)。結構方程建模的原理和實踐。吉爾福德新聞。

相關問題