1.2.1-OpenMx中的結構方程建模: RAM(reticular Action Modeling)圖路徑方法 part1

RAM圖形式介紹

根據理論分析繪制RAM圖,是結構方程模型建模的起點,也是表達建模結果的最有效形式。

  • RAM圖基本規定
    1.變量用大寫英文希臘字母表示,其外圍圍以方框的是顯變量,其外圍圍以橢圓的是隱變量殘差小寫希臘字母表示,外圍亦應圍以橢圓(但為方便起見,經常不用)
    2.路徑用帶箭頭的線表示:
    直的單方向箭頭:表示因果關系,箭頭所指為果;
    雙向箭頭弧線:表示相關關系;
    從自身到自身的雙向箭頭線:表示變量的方差
    3.在每一條路徑上以小寫的英文或希臘字母表示待估計的結構系數或方差,以數字表示事先確定的固定參數
    4.在圖中,凡為因果路徑所指者,為內生變量,凡無如此箭頭所指者為外生變量

本文原文地址http://dbtemp.blogspot.com/2011/08/structural-equation-modeling-in-openmx.html

假設我們采集了兩項語言測試的數據:words(W)和 syntax (S),以及兩個非語言測試的數據:blocks(B)和 pics(P),共80個人。
我們想要檢驗這些語言的測試是不是能夠反應底層的語言能力verbal factor (V),以及非語言測試是否能夠反應底層非語言的nonverbal factor(N),并且兩個因素是完全獨立的。這里需要注意的是,這里的樣本量太小了,不足以檢驗這個假設,僅僅作為示例。
這個模型用路徑圖展示出來就非常清晰移動了,如下圖所示。
下圖是一個經典的結構方程模型,觀測變量用方框表示,潛變量
用橢圓(圓)表示。單向箭頭表示回歸系數,雙向箭頭表示方差或協方差。

Path diagram for 2 factor model

結構方程模型旨在解釋變量之間的關系,而不僅僅是變量的均值。我們用來檢驗模型的所有信息都來自于我們觀測的變量之間的協方差矩陣。(此處應有link: null)結構方程模型讓我們可以計算期望協方差矩陣,然后與觀測到的矩陣進行比較。值得注意的,協方差矩陣的對角元素即為變量的方差(即,變量自身的協方差為其方差)。

如上圖所示的路徑圖可以轉換為一系列的結構方程,這些方程結合觀測到的協方差矩陣可以用來估計路徑的系數。任意兩個變量之間協方差的期望都可以通過路徑跟蹤法則進行估計(path-tracing rules,詳細請看這里),這個協方差的期望可以告訴我們哪幾條路徑應當乘起來并加到協方差計算公式中。
簡言之,步驟為:

1.沿著路徑箭頭先向后追蹤,然后向前,或者僅僅從一個變量沿著箭頭方向向前而不向后追蹤(當箭頭變成向后時停止);
2.每條路徑鏈上的每個變量只通過一次;
3.每條路徑鏈上最多只通過一條雙向箭頭路徑。

我們的模型則非常簡單明了了。
例如:

  • W和S之間的協方差即為ab,我們沿著路徑a反向追蹤,然后通過V再沿著b正向追蹤,然后將兩個系數相乘。
  • W和B的協方差是0,因為這兩個變量之間沒有通路。
  • W的方差為a2 + e,其中e是模型不能解釋的部分變異,也就是殘差 (為何是a2?)
    作為練習,可以完成下表:
W S B P
W a2+e ab 0 0
S ab b2+f 0 0
B 0 0 c2+g cd
P 0 0 cd d2+h

RAM圖路徑方法可以通過矩陣代數計算模型中協方差的期望。通過制定路徑圖,可以得到三個矩陣:S,A和F。

  • A對應的是不對稱的路徑,即單箭頭路徑;
  • S對應的是對稱路徑(雙箭頭的路徑),且矩陣是對稱的;
  • F對應的是觀測變量(如下)
    設定,所有觀測變量為mobs, 所有的潛變量為mlat,則所有變量表示為mtot
    則有 mtot = mobs + mlat

則對于圖中的模型,
A =

V N W S B P
V 0 0 0 0 0 0
N 0 0 0 0 0 0
W a 0 0 0 0 0
S b 0 0 0 0 0
B 0 c 0 0 0 0
P 0 d 0 0 0 0

S =

V N W S B P
V 1 0 0 0 0 0
V 0 1 0 0 0 0
W 0 0 e 0 0 0
S 0 0 0 f 0 0
B 0 0 0 0 g 0
P 0 0 0 0 0 h

值得注意的是,S矩陣中,第一行第一列(1,1)元素和第二行第二列(2,2)元素代表了潛變量V和N的變異,并且被固定為1。實際上,我們會把潛變量標準化,從而使得模型中需要估計的變量較少。
F矩陣的大小為mobs x mtot的大小,因此對于行列均為同一個變量時,矩陣元素為1;
F =

V N W S B P
W 0 0 1 0 0 0
S 0 0 0 1 0 0
B 0 0 0 0 1 0
P 0 0 0 0 0 1

至此我們定義了這些矩陣,則協方差矩陣的期望就可以通過下面的矩陣公式進行計算

F * (I-A)-1 * S * ((I-A) -1)' * F' (其中-1代表矩陣求逆,'代表轉置)

其中,I為與A同大小的單位矩陣。


為了方便閱讀,這里再放一個路徑圖:


Path diagram for 2 factor model

現在,我們假設上圖中洗漱的真實值為:

|path|a|b|c|d|e|f|g|h|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|value|5|6|3|7|2|3|1|4|

則通過上述過程,我們應當可以得到協方差矩陣的期望值。即下表:

W S B P
W
S
B
P

現在,我們用OpenMx實現。

生成A,S和F矩陣。

1.首先生成空的6 x 6矩陣A。
myA=matrix(c(0),nrow=6,ncol=6)
2.然后修改矩陣myA
myA= edit(myA)
這是會彈出對話框,可以修改矩陣中的元素的值。
另一種方法是通過元素的位置下標來改變元素的值,如:
myA[3,1] = 5
最終A應當為:

A

同理,可以生成并修改S矩陣,
3. 生成S矩陣和單位I矩陣
由于S矩陣只在對角線上有值,因此我們首先生成一個對角單位陣。
myS = diag(1,6) #括號內第一個值(1)為對角元素的值,第二個值(6)為矩陣的大小(方陣)
由于RAM路徑公式中有單位陣,因此這里,在修改S矩陣之前,我們先順便生成一個矩陣
myI = myS
3. 修改S矩陣
同上;
最終S矩陣應為
S

F矩陣為:


F

接下來計算協方差的期望

F * (I-A)-1 * S * ((I-A) -1)' * F'
myF%*%solve(myI-myA)%*%myS%*%t(solve(myI-myA))%*%t(myF)

ExpCov
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容