中年|python数据分析:如何用python做路径分析,附数据库实例操练


最近在学习结构方程模型 , 因为是个新东西 , 自己做毕业论文也得用 , 所以最近更新很慢 , 大家见谅 , 最近会给大家写一些自己理解的结构方程模型的东西 , 和python做法 , 今天主要是写路径分析 。
路径分析简介
路径分析其实是结构方程模型的一部分 。
结构方程模型(SEM)由两个部分所组成 ,第一部分是测量模型(measurement model) , 了解每个潜在变数下的结构是否符合理论预期?会以验证性因素分析(CFA)来分析;另一个部分则为结构模型(structural model) , 探讨研究者提出的特定行为科学理论 , 其变数间复杂的因果路径关系 , 因此也称为路径分析(Path analysis,以下简称PA) 。
1921年美国遗传学者Sewell Wright首先提出了路径分析(PA)的概念 , 用来处理演化与突变的机制关系 。 之后路径分析在许多社会科学领域获得非常广泛的使用 , 不管是经济学 , 心理学 , 甚至教育与政治学 。
其实 , 路径分析可以说是结构方程模型(SEM)的一种特殊的亚型 , 只要把PA看为每个变数都只用一个可观察指标(observable indicator)来测量的SEM即可 。

换言之 , PA不是只有一个回归方程 , 而是用一组回归方程来同时估计效果的模型 , 对于行为科学复杂的理论建构 , 以及理论上因果关系争议(例如到底是动机影响了成绩 , 还是成绩影响了动机 , 抑或是两者互为因果?)的厘清很有帮助 。
路径分析(PA)常常用于处理中介效果(mediated effect)的分析 。 中介模型(mediated model)常常在行为科学领域用来验证因果机制(causal mechanism) 。
中年|python数据分析:如何用python做路径分析,附数据库实例操练
本文插图

中介模型
以上图为例 , 研究者初期已经建立了自变量与因变量之间的关系 , 但是想进一步理解 , 自变数到底是透过什么机制来影响因变量 。

给大家举个例子 , 一家企业的HR 部门发现举办某个training program 后 , 参与员工的工作绩效显著提升了 。 对于HR 主管而言 , 他(她)或许有兴趣于到底是什么样的因果机制导致了这样的效果?因此其作了一些假设 , 并在下一次施行时 , 测量那些变数 , 结果发现是因为training program 提升了员工的自我效能感 , 进而使其愿意挑战自己 , 而让工作绩效随之爬升 。 在这里 , 自我效能感就是中介变数 , 从这次的分析中 , 可以让该组织了解到 , 之后不管有没有该training program , 透过各种途径与方法提升员工的自我效能感才是真正核心的关键 , 因为这能让员工工作绩效更上一层楼 , 进而让整体组织都能获益 。
在上图中 , 自变量本身对于因变量的独特效果 , 称为直接效果(direct effect);而自变数透过中介变数(mediator)影响因变量的部分 , 则称为间接效果(indirect effect) , 两种效果加总 , 就是所谓的总效果(total effect) 。

【中年|python数据分析:如何用python做路径分析,附数据库实例操练】在方法论上 , 模型考量了中介变数后 , 若直接效果变得不显著 , 表示该中介变数有完全中介(complete mediation)的效果 , 但只是让直接效果的估计值变小 , 但仍然具有统计显著性 , 称为部分中介(partial mediation)效果 , 以training program为例 , 表示很可能除了自我效能感外 , 还有其他心理因素也中介了该program对于工作绩效的关系 , 进一步探究以便厘清 。
python路径分析实操
用python做结构方程模型需要用到的库为semopy , semopy是一个伞形python包 , 它包含许多结构方程建模(sem)技术 。
第一步设定模型代码如下
from semopy import Modelmod = """ #c ~ a + bq4 ~ q12 + q2#d ~ c + aq1 ~ q4 + q12 """model = Model(mod)
代码解释:以上代码首先导入Model , 然后设定模型 , 我们设定了如下图所示的模型(代码中有注释)
中年|python数据分析:如何用python做路径分析,附数据库实例操练
本文插图

第二步导入数据(数据请关注私信获取 , 自动回复的)
from pandas import read_csvdata = http://news.hoteastday.com/a/read_csv("dataset/1 evals.csv")data.head()model.load_dataset(data)
代码解释:这个就不用解释啦嘿嘿 , 最后一行的代码是将数据导入模型 。
第三步估计模型参数
from semopy import Optimizeropt = Optimizer(model)from semopy.inspector import inspectinspect(opt)

代码解释:上面的第一部分是估计参数 , 然后查看参数 , 输出如下:
中年|python数据分析:如何用python做路径分析,附数据库实例操练
本文插图

可以看到结果有所有方程的回归系数和P值等 , 还有q1 , q4的方差 。
小结
今天给大家介绍了结构方程模型的概念和路径分析的python实现方法 , 算是给大家做了一个中介模型 , 感谢大家耐心看完 。 发表这些东西的主要目的就是督促自己 , 希望大家关注评论指出不足 , 一起进步 。 内容我都会写的很细 , 用到的数据集也会在原文中给出链接 , 你只要按照文章中的代码自己也可以做出一样的结果 , 一个目的就是零基础也能懂 , 因为自己就是什么基础没有从零学Python的 , 加油 。


    推荐阅读