python进行回归方程显著性检验
回归分析就是对具有相关关系的两个或两个以上变量之间数量变化的一般关系进行测定,确定因变量和自变量之间数量变动的数学表达式,以便对因变量进行估计或预测的统计分析方法。
本篇博客的重点不在于回归模型的建立,而在于模型建立后的显著性检验。
1.回归分析
1.1 定义
回归分析就是对具有相关关系的两个或两个以上变量之间数量变化的一般关系进行测定,确定因变量和自变量之间数量变动的数学表达式,以便对因变量进行估计或预测的统计分析方法。回归分析的数学描述如下:
假设变量
x
1
,
x
2
,
x
3
,
…
,
x
k
x_{1},x_{2},x_{3},\dots,x_{k}
x1,x2,x3,…,xk与随机变量
y
y
y之间存在较显著的相关关系,则就有以下的回归模型:
y
=
f
(
x
1
,
x
2
,
x
3
,
…
,
x
k
)
+
ϵ
y=f(x_{1},x_{2},x_{3},\dots,x_{k})+\epsilon
y=f(x1,x2,x3,…,xk)+ϵ其中
ϵ
\epsilon
ϵ为随机变量。而常用的回归模型是以下的线性形式:
y
=
β
0
+
β
1
x
1
+
β
2
x
2
+
⋯
+
β
k
x
k
+
ϵ
y=\beta_{0}+\beta_{1}x_{1}+\beta_{2}x_{2}+\cdots+\beta_{k}x_{k}+\epsilon
y=β0+β1x1+β2x2+⋯+βkxk+ϵ
1.2 步骤
(1)根据研究目的和现象之间的内在联系,确定自变量和因变量。
做回归分析时,应该首先从理论出发进行定性分析,根据现象的内在联系确定变量之间的因果关系,从而确定哪个为自变量,哪个为因变量。
(2)确定回归分析模型的类型及数学表达式。
根据现象之间的内在影响机制或通过对具体变量数据描点分析,找出最适合的回归分析模型,再通过计算求出模型的待估参数,得到回归方程。常用的估计方法有普通最小平方法、岭回归、偏最小平方法回归、约束最小平方法回归,主成分回归。
(3)对回归分析模型进行评价和诊断。
得到具体的回归方程以后,要对其进行统计检验,来对回归方程的代表性及拟合程度进行拟合。
2.回归方程的统计检验
对于所拟合的回归模型,需要检验其合理性。检验的内容包括:模型的参数取值含义是否符合经济意义,模型的参数在统计意义上是否显著,模型整体的拟合效果是否理想,模型的假设条件是否满足。
2.1 模型整体拟合效果的显著性检验
记实际观察值为 y i y_{i} yi,回归方程拟合的理论值(预测值)为 y c i y_{c_{i}} yci,观察值的平均值为 y ‾ \overline{y} y,则在最小平方法之下 y c ‾ \overline{y_{c}} yc与 y ‾ \overline{y} y是相等的。根据方差分析原理,则有 ∑ ( y − y ‾ ) 2 = ∑ ( y c − y ‾ ) 2 + ∑ ( y − y c ) 2 \sum(y-\overline{y})^{2}=\sum(y_{c}-\overline{y})^{2}+\sum(y-y_{c})^{2} ∑(y−y)2=∑(yc−y)2+∑(y−yc)2或 S S T = S S R + S S E SST=SSR+SSE SST=SSR+SSE在误差项服从正太分布的情况下,应该有 S S R ∼ χ 2 ( k ) , S S E ∼ χ 2 ( n − k − 1 ) SSR\sim\chi^{2}(k),SSE\sim\chi^{2}(n-k-1) SSR∼χ2(k),SSE∼χ2(n−k−1)所以有 F F F统计量 F = S S R / k S S E / ( n − k − 1 ) ∼ F ( k , n − k − 1 ) F=\frac{SSR/k}{SSE/(n-k-1)}\sim F(k,n-k-1) F=SSE/(n−k−1)SSR/k∼F(k,n−k−1)显然,回归方程拟合效果越好,表明方程解释部分所占比重越大, S S R SSR SSR和 S S E SSE SSE相比的值也越大, F F F统计量也越大。因此,方程整体显著性检验的假设为: H 0 : β 0 = β 1 = β 2 = ⋯ = β k = 0 H_{0}:\beta_{0}=\beta_{1}=\beta_{2}=\dots=\beta_{k}=0 H0:β0=β1=β2=⋯=βk=0 H 1 : β 0 ≠ 0 或 β 1 ≠ 0 或 … 或 β k ≠ 0 H_{1}:\beta_{0}\neq0或\beta_{1}\neq0或\dots或\beta_{k}\neq0 H1:β0=0或β1=0或…或βk=0再给定显著性水平 α \alpha α下,若 F > F α ( 1 , n − 2 ) F>F_{\alpha}(1,n-2) F>Fα(1,n−2)则拒绝原假设,认为回归方程整体是显著的。
2.2 模型参数显著性检验
模型参数显著性检验主要是判断每一个自变量对于回归模型是否必要。对于回归方程的单个参数进行
t
t
t检验,对于回归方程中的每个参数
β
i
\beta_{i}
βi,其假设如下:
H
0
i
:
β
i
=
0
,
i
=
0
,
1
,
…
,
k
H_{0i}:\beta_{i}=0,i=0,1,\dots,k
H0i:βi=0,i=0,1,…,k
H
1
i
:
β
i
≠
0
,
i
=
0
,
1
,
…
,
k
H_{1i}:\beta_{i}\neq0,i=0,1,\dots,k
H1i:βi=0,i=0,1,…,k其
t
t
t检验统计量为:
t
=
β
i
σ
^
y
x
c
i
i
∼
t
(
n
−
k
−
1
)
t=\frac{\beta_{i}}{ \widehat \sigma_{yx}\sqrt{c_{ii}}}\sim t(n-k-1)
t=σ
yxciiβi∼t(n−k−1)其中
c
i
i
c_{ii}
cii为矩阵
(
X
T
X
)
−
1
(X^{T}X)^{-1}
(XTX)−1对角线上第
i
i
i个元素,
σ
^
y
x
\widehat \sigma_{yx}
σ
yx的计算公式如下:
σ
^
y
x
=
∑
(
y
−
y
c
)
2
n
−
k
−
1
\widehat \sigma_{yx}=\sqrt{\frac{\sum(y-y_{c})^{2}}{n-k-1}}
σ
yx=n−k−1∑(y−yc)2
python中的statsmodel包中已经集成了完整的回归方程显著性检验。具体示例如下:
import pandas as pd
from sklearn.datasets import load_boston
from scipy import stats
import statsmodels.api as sm
import numpy as np
boston=load_boston()
X=pd.DataFrame(boston.data,columns=boston.feature_names)
y=pd.DataFrame(boston.target,columns=['target'])
X=sm.add_constant(X) #添加常数项
model=sm.OLS(y,X)
results=model.fit()
y_pred=pd.DataFrame(model.predict(results.params,X),
columns=['pred'])
print(results.summary())
"""
自写代码计算过程
SSR=np.dot(y_pred['pred']-y['target'].mean(),y_pred['pred']-y['target'].mean())
SSE=np.dot(y_pred['pred']-y['target'],y_pred['pred']-y['target'])
(1)回归方程显著性检验
f_val=(SSR/13)/(SSE/492)
f_pval=stats.f.sf(f_val,13,492)
(2)单个参数的显著性检验
ttest_result=pd.DataFrame(None,index=X.columns,columns=['tval','pval'])
error=np.dot(y['target']-y_pred['pred'],y['target']-y_pred['pred'])
S = np.array(np.linalg.inv(np.dot(np.mat(X).T,X)))
for i,col in enumerate(X.columns):
tval=results.params[col]/np.sqrt((error/492)*S[i][i])
ttest_result.loc[col,'tval']=tval
pval=stats.t.sf(np.abs(tval),df=492)*2
ttest_result.loc[col,'pval']=pval
"""
其结果如下:
从上述试验结果中可以发现,变量INDUS和AGE对回归方程是不显著的,可以从回归方程中剔除这两个变量。
参考资料
更多推荐
所有评论(0)