基于Python语言路径分析矩阵算法运演
2021-02-10钟志强张毅宁
钟志强 张毅宁
(鞍山师范学院物理科学与技术学院,辽宁 鞍山 114007)
1 引言
多元回归是一种简单的因果关系分析,其偏回归系数(partial regression coefficient)表示在控制其他自变量的条件下,每个自变量单独对因变量的作用。其中各个自变量处于相同地位,对因变量的作用是并列。如果在两个变量之间加上中介变量,一个变量既是自变量又是因变量时,存在多个环节,这就构成路径。多元回归就不能兼顾这种因果关系。
路(通)径分析(Path Analysis,Sewall Wright,1921)是相关系数分解的一种统计方法,不仅揭示自变量xi(i=1,2,…m)与因变量y的直接影响力和间接影响力,而且可以在xi,y间的复杂关系中,从某个自变量与其他自变量的“协调”关系中得到对y的最佳影响的路径信息。目标是探索是事物内在因果关系规律,将因变量与自变量的相互影响的相关系数分解为直接效果的路径系数和间接效果的路径系数。这使对模型中的变量的因果关系分析研究更为具体和深入。
路径分析早期在经济学领域,被称为联立方程模型(simultaneous equation modeling)[1],多用来分析价格等经济相关统计数据之间的关系[2,3]。国内相关文献中,路径分析研究主要体现在农林科学研究中[4,5],其实现技术有Excel,SPSS,SAS[6-10]。当下,受结构方程模型影响,学者们开始利用R语言(如利用“lavaan”和“semPlot”包)与Mplus工具通过潜变量和中介关系进行路径分析研究[11]。但当其研究显变量和无独立中介模型时,却要退回利用Excel计算,或利用引入截距项的回归算法和检验方式进行路径分析。如此造成了研究上的不方便与不科学。本文利用Python语言,实现借助矩阵算法计算决定系数和完成F检验,以期进一步说明路径系数的意义。
2 路径回归系数计算
2.1 路径回归是标准化的偏回归系数的推导
y=b0+b1x1+…+bn xn+e
其中bi是自变量xi对因变量y的偏回归系数。由于各自变量本身变异程度和量纲的不同,使得偏回归系数绝对值并不能准确反映相应自变量对依变量相对贡献的大小。为此需将各偏回归系数标准化,即用相应自变量的标准差与因变量的标准差之比去乘以各偏回归系数,因而路径系数为标准的偏回归系数pyxi,即为自变量对因变量y的直接通径系数。其推导如下:
由于
当i=1时,
其度量各自变量对因变量的直接效应,其意义上是其它自变量保持不变时,该自变数变动一个单位时,因变量y变动的标准单位数,它不受度量单位和自变量变异程度的影响。
2.2 利用矩阵计算路径回归系数
如有三个自变量时:
其中r xiy,rxixj都可以通过已知数据计算得出。令
三个自变量的全体路径系数为P矩阵表示方式为:
这里r x1x2px2y是自变量x1通过自变量x2对y的间接效应。间接通径系数即自变量xi通过其它相关变量对因变量y的影响,系直接路径系数乘以二者的相关系数rij pyj。其总间接通径效果为:
2.3 计算路径回归系数Python实现
用于分析的数据“pathdata.csv”为多个参考文献利用(小麦丰产3号各性状与单株籽粒产量或腰果种子发芽普遍期天数与气温)数据[12-14],在网络中亦可得到,见附录1。其有一个因变量(y)四个自变量(x1-4),四个自变量间互相关,没有独立中介变量。计算路径回归Python程序如下(其中变量名与文中公式标识一致,下同):
附录1 路径分析计算数据
import numpy asnp
import pandas as pd
from scipy.stats import f
df=pd.read_csv("pathdata.csv")#读取文档数据
y=df.iloc[:,-1]#得到y值
x=df.iloc[:,:-1]#得到x值
m,n=x.shape#得到x的行列数,为后期F检验做准备
r=df[["x1","x2","x3","x4"]].corr()#得到x1-4的相关系数
s=df.corr()["y"][:-1]#得到y对x1-4的相关系数
rni=np.linalg.inv(r)#得到相关系数R的逆矩阵
p=rni.dot(s)#得到直接相关系数
print(p)
a=np.diag(p)
P=r.dot(a)#得到直接、间接系数矩阵
P["sum"]=P.sum(axis=1)#得到直接、间接与总路径系数矩阵(见表1)
表1 直接、间接与总路径系数
print("P",P)
del P["sum"]#删除总路径系数,为后期计算决定系数做准备
3 路径系数的显著性检验
3.1 F显著性检验公式
由于路径系数就是标准偏回归系数,因而可以利用多元回归分析中偏回归系数显著性检验的方法对路径系数进行显著性检验。检验方法可用t检验,也可用F检验。F值计算如下[15]:
m为样本容量,n为自变数个数。C是自变量相关系数的逆矩阵的主对角元素的倒数。
3.2 F显著性检验Python实现
c=1/np.diag(rni)
fx=np.power(a,2).dot(c)/((1-r2)/(m-n-1))#计算数据F值
for iin fx:
print(i,f.sf(i,m-1,m*(n-1)))#利用第三方scipy.stats包做F检验(结果见表2)
表2 路径系数F检验表
从表2可以得知,除X4路径系数不显著为0外,不拒绝零假设(H0),其它系数都达到显著水平。认为路径系数有意义。
4 决定系数的计算
4.1 决定系数的推导
决定系数(Coefficient of determination)R2表示y值的变异在其总变异中所占的比率。
又因为
所以,决定系数是相关系数的平方。
在路径分析中,根据因变量y的方差:
进一步推导:
表示自变量xi,对因变量y的相对决定程度,即直接决定系数;而2rxixj Pxiy Pxjy表示自变量xixj共同对因变量y的相对决定程度,即间接决定系数。总决定系数是直接决定系数与间接决定系数的和。为不可控因素e对因变量y的相对决定程度,称为剩余决定系数。
4.2 利用矩阵计算决定系数
总决定系数R2=[1 1 1]*D*[1 1 1]T。则剩余决定系数pye2=1-R2。
4.3 决定系数Python实现
def toD(d):#封装计算成D矩阵函数
5 路径分析结果进一步探讨
路径分析的使用条件:各变量均为等距以上级别变量,各变量之间为线性关系,各因变量的作用可叠加。因果关系必须是单向,不得包括反馈环节[17]。根据路径系数的计算结果,可以进行以下分析:按绝对值大小,说明每一路径对因变量的作用的相对重要性[18]。如果路径系数接近相关系数,则反映了变量之间的真实关系[19]。如果相关系数大于0,但路径系数小于0,说明间接效应是相关的主要原因,直接作用是无效的,二者一定通过中介发生作用[20]。一般而言,相关分析仅蕴含着因果关系,但由于大多路径分析,有时间的先后关系,路径分析为此进一步验证了因果关系[21]。