今天依然不写代码,来给大家分享文献SEM结构方程模型。今天给大家介绍的文献是《An Introduction to Structural Equation Modeling》作者是J.J.Hox。因为自己毕业论文得做这个,基本上算是现学现卖,有问题私信我。
什么是结构方程模型结构方程模型是行为科学领域非常常用的建模技巧SEM结构方程模型。它是因子分析和路径分析的组合。
在结构方程模型中我们常常在研究潜变量之间的关系SEM结构方程模型,这些关系就体现在他们的回归或者路径系数上。结构方程模型认为我们的观测变量的协方差之间是存在某种特定的结构的,所以也有人叫它协方差结构模型。但是结构方程模型其实是可以包含观测变量的均值或者其他因子的,所以单单叫协方差结构模型并不是很对。
也有人叫它线性结构模型(LISREL),但是现在的结构方程已经不局限于探讨线性关系了,所以这个名字也不是很对。
还有,结构方程模型经常被可视化的展现为路径图。模型基本上就是一系列的回归方程矩阵。上世纪70年代的时候,使用软件做结构方程模型还必须要提供这些矩阵,但是发展到现在,我们仅仅画一个路径图就行。已经可以很方便的做结构方程模型了。
在这一部分,尝试着给大家写写验证性因子分析、回归分析和结构方程之间的区别。
验证性因子分析结构方程模型其实起源于路径分析,目前我们基本上还是习惯用路径图表示结构方程模型的结果。
在路径图中会有方框和圆,显变量用方框表示而因子用圆表示,同时还有单向箭头和双向箭头,单向箭头就是“路径”,表示因果关系:意思就是箭头尾部的变量“导致了”箭头指向的变量;双向箭头表示共变关系或者相关。
图一是一个两因子的验证性因子分析的路径图
图一
因子分析假设一系列变量的共变关系都是由“潜在因子”导致的,在探索性因子分析中我们对于因子的数目以及变量和因子的关系都没有假设,而是用统计方法来估计因子数量和因子载荷。在探索性因子分析中所有的变量都会在所有的因子上有载荷,通常我们还会进行因子旋转来提高因子的可解释性。
但是我们看图一,很显然图一对因子结构有一个清晰的假设,图一就是验证性因子分析,也叫做限制性的因子分析。
在结构方程模型中,我们会将图一所示的因子结构强加给我们的数据,这么做有两个目的:
得到模型的参数估计,比如因子载荷评估模型拟合,看一看模型和数据是否fit通常,我们还会把一些载荷固定为0,在图一中我们可以看到因子verbal到visperc、cubes、lozenges的箭头没有,也就是相应的载荷都被固定为0。同样的paragraph、sentence、wordmean到因子spatial的载荷也都被固定为0了。验证性因子分析要做的就是检验在这么固定后,我们的模型是否成立。这个就是为啥叫做验证。
还有一个问题就是,对于每一个因子,我们必须将一个载荷固定为1,这么做是为了给因子载荷一个可以解释的度量衡。这个有点不好理解。
我们想一想,如果我们不固定会出现什么结果:对于每一个因子,我们可以在方差固定的时候估计他的载荷;或者,我们可以在至少一个因子载荷固定的情况下估计因子方差,但是,载荷本来就是因子方差的一个函数,相应的因子方差也是因子载荷的函数,所以不可能在不固定其中某一个的情况下同时估计出方差或者载荷的值。
上面是我翻译的原文哈,翻译看不过瘾,请大家自己瞅一瞅原文哈:
For each factor, we also must fix one loading to one. This is needed to give the
latent factor an interpretable scale. If we do not fix one factor loading to one for (or to
another number not equal to zero), the scale of the latent factor is undetermined. For each
latent factor, we can estimate the loadings given a fixed variance for the latent factor,which standardizes the scale of the factor to a Z-score, or we can estimate the factor variance given at least one fixed loading. Since the loadings are a function of the variance of the latent factor, and the variance of the latent factor is a function of the loadings, we cannot simultaneously estimate unique values for all of these.
那么,这个问题的解决办法就是:要么:把所有因子的方差固定为1,然后来估计因子载荷;要么:把所有因子的一个载荷固定为1,然后来估计其他载荷和因子方差。当然最常见的做法是固定载荷哈。
在做结构方程模型之前,我们必须要先设定模型,记住,模型的设定一定是依据理论或者有的实证研究。
模型设定好了,我们就可以进行参数估计了,还可以用卡方检验检验模型和实际数据是否拟合,如果卡方检验显著,则拒绝模型。当然,卡方检验有它自己的问题,比如样本量的问题,我等会再写。
根据图一估计出来的因子载荷
可以看到表1中有标准化的因子载荷,提醒大家:这个标准化的因子载荷的解释和探索性因子分析是一样的哈。
好,验证性因子分析先写到这,接着看多元回归分析。
多元回归多元回归我们也可以用路径图来表示,图2就是一个例子:其中因变量为“perceived burden of having children”,自变量有5个,分别为‘child care by neighbors,’ ‘integration in the neighborhood,’ ‘inability to be alone,’ ‘relatives in the area,’and ‘child care by relatives.’
看上面这个图,我们需要理解2点:
在回归分析中自变量也是有相关的,注意和多重共线性区别哈因变量也有残差,而且我们将它固定为1(你把它理解为回归方程中的常数项就行)上面这个例子其实就是把多元回归放在了结构方程模型的框架下来理解。
在上面的回归中,我们共有6个变量,形成方差协方差矩阵后,我们会有6个方差和15个特异的协方差,共21个数据。然后对于上面的回归,我们需要估计:5个自变量的方差(5)和协方差(10),以及5个回归系数还有1个误差方差。共21个。所以我们的模型是其实就是数据的再现,就没法对模型进行检验了,所以也用不到卡方,我们对回归模型只会进行设定显著性的t检验。
含有潜变量的路径分析结构方程模型有时候会很复杂,既包含显变量又有潜变量,还有各种直接效应和间接效应,下面这个图就是一个两因子模型:
估计上面的模型时,我们需要估计共13个参数,我们有21个自由度,最终得到比如说卡方值17.2自由度剩8,此时我们的p为0.03,那么我们就得拒绝这个模型。接下来写一写模型的修正。在这之前首先得看模型拟合指数。
模型拟合指数模型拟合的统计检验方法常常会有一些问题:样本量大的话,基本上都会得到显著性的结果,这样的话,即使模型很好我们也会最终拒绝它。所以呢,好多研究者就提出了各种新的拟合指数,这些指数不仅仅考虑了模型的拟合好坏而且考虑了模型的简洁性,因为一个全模型(允许所有参数自由估计)基本上都可以很好的拟合数据,但是没有意义呀。所以在同样的拟合情况下,我们会选择更加简单的模型。
通常我们都会在模型拟合和模型的简洁性之间找到一个折中,我们也有很多的拟合指标同时考虑了模型拟合和模型的简洁性。
一些拟合指标比如说AIC会对复杂的模型进行惩罚,Jöreskog and Sörbom (1989)这个人发明了2个拟合指数GFI (Goodness of Fit) 和AGFI (Adjusted GFI);GFI 就是拟合优度(goodness-of-fit), AGFI就是控制了模型复杂度后的拟合优度 ( adjust the GFI for the complexity of the model)。
还有两个比较有名的指标TLI(也叫做非正态拟合指数(Non-Normed Fit Index or NNFI), 和正态拟合指数(Normed Fit Index NFI),这个TLI也是对模型的复杂度有调整的。
如果一个模型可以完美的拟合数据,那么这个模型的上面的拟合指数就是1,通常情况下0.9我们就可以接受这个模型,0.95的话我们就可以说模型拟合的好。
还有一些比较现代的思想是不可以追求模型的完美拟合,而是看模型与真实模型有多接近,在这种思想下就产生了RMSEA(Root Mean Square Error of Approximation)这个拟合指数,一般来讲RMSEA这个指数需要小于0.05才好。
模型修正指数如果我们拟合模型发现这个模型和数据不搭。此时我们就需要进行模型修正,我们可以删除那些没有显著性意义的参数或者增加路径来提高模型拟合优度。
模型修正指数就可以告诉我们可以通过删除哪些或者增加哪些可以提高整体模型的拟合优度。
修正指数的值的意思就是说当我们相应的参数自由估计时,我们的整个模型的卡方值可以减少的量,然后研究者就可以根据修正指数进行一系列的模型调整:每一次释放一个参数,直到整体的模型拟合良好为止。举个例子:比如在验证性因子分析的时候某些载荷指定为0,但是软件给出了非常大的修正指数,此时我们就可以将指定为0的载荷释放掉,重新来估计这个载荷,这么做就可以提高模型的拟合程度,代价就是少了一个自由度。
当然,上述做法是有风险的,因为我们不能把自己的模型完全变成数据驱动的模型,所以释放参数之前我们一定要想好相应的理论依据。
模型扩展在结构方程模型中,我们还可以同时拟合2组模型,这样我们就可以检验某一个模型在不同的两组中(比如男、女两组)是不是都是适用的。
做法就是同时拟合两组模型,而且令系数相等,这个叫做equality constraint on parameter。
然后我们将这个有constraint的模型和没有限制的模型进行比较,我们会发现限制的模型卡方肯定比较大,自由度会增加。对于这两个模型我们可以进行统计检验,从而判断哪个模型好,然后就可以知道模型在两组中是否都适用。
小结这个文章整的有点长了,但是原文献还有很多被我略去了,比如模型扩展的例子,还有结构方程模型本身的缺点。有兴趣的同学自行去看原文献吧。感谢大家耐心看完。发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,用到的数据集也会在原文中给出链接,你只要按照文章中的代码自己也可以做出一样的结果,一个目的就是零基础也能懂,因为自己就是什么基础没有从零学Python和R的,加油。
(站外链接发不了,请关注后私信回复“数据链接”获取本头条号所有使用数据)
往期内容:
R数据分析:结构方程模型画图以及模型比较,实例操练
python机器学习:回归问题学习模型的评价方法及代码实现
python机器学习:分类问题学习模型的评价方法及代码实现
R数据分析:如何理解模型中的“控制”,图例展示
python机器学习:如何储存训练好的模型并重新调用
python机器学习:多元线性回归模型实战
python机器学习:机器学习模型评价-交叉验证与留一验证