一篇文章写清楚一个问题,关注我,自学pythonSEM结构方程模型!
本来打算写一个python做结构方程模型系列的SEM结构方程模型,发现python并不能生成路径图,于是决定先学习R吧,毕竟我时间有限,之后还是会更新python,也会加上R,感兴趣的朋友可以关注一波。今天给大家写结构方程的模型的比较,顺带写写路径图的画法。
结构方程模型拟合指标可用于反映模型拟合优度的指标有很多,总体上可以分为3类SEM结构方程模型:绝对指数、相对指数和简约指数,为了更明晰的展示,给大家放一个表吧:
常用的拟合指标
结构方程建模R语言实操这篇文章建模部分我会写的很简单,因为上篇文章有写,有兴趣的同学移步上篇文章。
今天我们建立以下2个图所示的模型,然后比较2个模型的拟合情况,从而决定最终选择哪一个模型!
模型a
模型b
我们注意到两个模型的变量都是一样的,不同理论下有不同的关系构成,到底哪一个是正确的呢,让数据来说话吧
导入数据library(lavaan)library(semPlot)data=lav_matrix_lower2full(c(1.00, .53, 1.00, .15, .18, 1.00, .52, .29, -.05, 1.00, .30, .34, .23, .09, 1.00))colnames(data) = rownames(data) = c("morale", "illness", "neuro", "relationship", "SES") 以上代码实现了R包的载入和数据的建立并命名
建立模型#model 1model1 = 'illness ~ moralerelationship ~ moralemorale ~ SES + neuro'#model 2model2 = 'SES ~ illness + neuromorale ~ SES + illnessrelationship ~ morale + neuro'以上代码完成了两个模型的建立,大家可以看图验证。
拟合模型并画路径图model1.fit = sem(model1, sample.cov=data, sample.nobs=469)semPaths(model1.fit, whatLabels="par", layout="spring")model2.fit = sem(model2, sample.cov=data, sample.nobs=469)semPaths(model2.fit, whatLabels="par", layout="spring")以上代码实现了2个模型的拟合以及路径图的绘制,绘出的图如下:
此为自动绘制的模型1的路径图
自动绘制的模型2的路径图
拟合参数比较fitmeasures(model1.fit)fitmeasures(model2.fit)以上代码可以得出每个模型的拟合参数,让大家瞅一瞅,输出的参数非常全:
超级全的参数
拟合参数的比较过程通过运行fitmeasures方法,我们可以得到各种拟合参数,如下表所示我们将常用的2个模型的拟合参数列出来以做对比(只列出了部分):
两个模型的拟合参数
解释一下我了解到的以上的拟合指数的比较:绝对指数(如GFI,SRMR,RMSEA)衡量了所考虑的理论模型与样本数据的拟合程度! 它只基于理论模型本身不与别的模型比较,首先是卡方值越小越好,RMSEA小于0.05 表示模型拟合得好,在0.05-0.08之间表示模型基本可以接受,RMSEA也是越小越好;CFI,NFI,TLI越大越好,AIC,ECVI越小越好,所以按数据说话的话,这两个模型便是模型2更好一些。
小结今天给大家写了R语言的结构方程建模实现以及模型比较,感谢大家耐心看完。发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,用到的数据集也会在原文中给出链接,你只要按照文章中的代码自己也可以做出一样的结果,一个目的就是零基础也能懂,因为自己就是什么基础没有从零学Python的,加油。
(站外链接发不了,请关注后私信回复“数据链接”获取本头条号所有使用数据)
往期内容:
python机器学习:机器学习模型评价-交叉验证与留一验证