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),并且两个因素是完全独立的。这里需要注意的是,这里的样本量太小了,不足以检验这个假设,仅仅作为示例。
这个模型用路径图展示出来就非常清晰移动了,如下图所示。
下图是一个经典的结构方程模型,观测变量用方框表示,潜变量
用椭圆(圆)表示。单向箭头表示回归系数,双向箭头表示方差或协方差。
结构方程模型旨在解释变量之间的关系,而不仅仅是变量的均值。我们用来检验模型的所有信息都来自于我们观测的变量之间的协方差矩阵。(此处应有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|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应当为:
同理,可以生成并修改S矩阵,
3. 生成S矩阵和单位I矩阵
由于S矩阵只在对角线上有值,因此我们首先生成一个对角单位阵。
myS = diag(1,6) #括号内第一个值(1)为对角元素的值,第二个值(6)为矩阵的大小(方阵)
由于RAM路径公式中有单位阵,因此这里,在修改S矩阵之前,我们先顺便生成一个矩阵
myI = myS
3. 修改S矩阵
同上;
最终S矩阵应为
F矩阵为:
接下来计算协方差的期望
F * (I-A)-1 * S * ((I-A) -1)' * F'
myF%*%solve(myI-myA)%*%myS%*%t(solve(myI-myA))%*%t(myF)