模型的显著性检验是指构成因变量的线性组合是否有效,即整个模型中是否至少存在一个自变量能够真正影响到因变量的波动。该检验是用来衡量模型的整体效应。回归系数的显著性检验是为了说明单个自变量在模型中是否有效,即自变量对因变量是否具有重要意义。这种检验则是出于对单个变量的肯定与否。
模型的显著性检验和回归系数的显著性检验分别使用统计学中的F检验法和t检验法,接下来将介绍有关F检验和t检验的理论知识和实践操作。
1. 模型的显著性检验——F检验
在统计学中,有关假设检验的问题,都有一套成熟的步骤。首先来看一下如何应用F检验法完成模型的显著性检验,具体的检验步骤如下:
(1)提出问题的原假设和备择假设。
(2)在原假设的条件下,构造统计量F。
(3)根据样本信息,计算统计量的值。
(4)对比统计量的值和理论F分布的值,如果计算的统计量值超过理论的值,则拒绝原假设,否则需接受原假设。
下面将按照上述四个步骤对构造的多元线性回归模型进行F检验,进一步确定该模型是否可用,详细操作步骤如下:
步骤一:提出假设
H0为原假设,该假设认为模型的所有偏回归系数全为0,即认为没有一个自变量可以构成因变量的线性组合;
H1为备择假设,正好是原假设的对立面,即p个自变量中,至少有一个变量可以构成因变量的线性组合。
就F检验而言,研究者往往是更加希望通过数据来推翻原假设H0,而接受备择假设H1的结论。
步骤二:构造统计量
为了使读者理解F统计量的构造过程,可以先观看下图,然后掌握总的离差平方和、回归离差平方和与误差平方和的概念与差异。
如上公式所示,公式中:
ESS称为误差平方和,衡量的是因变量的实际值与预测值之间的离差平方和,会随着模型的变化而变动(因为模型的变化会导致预测值的变动);
RSS为回归离差平方和,衡量的是因变量的预测值与实际均值之间的离差平方和,同样会随着模型的变化而变动;
TSS为总的离差平方和,衡量的是因变量的值与其均值之间的离差平方和,而其值并不会随模型的变化而变动,即它是一个固定值。
根据统计计算,这三个离差平方和之间存在这样的等式关系:TSS=ESS+RSS。
由于TSS的值不会随模型的变化而变动,因此ESS与RSS之间存在严格的负向关系,即ESS的降低会导致RSS的增加。正如Python数据分析与挖掘——线性回归预测模型所介绍的内容,线性回归模型的参数求解是依据误差平方和最小的理论,如果根据线性回归模型得到的ESS值达到最小,那么对应的RSS值就会达到最大,进而RSS与ESS的商也会达到最大。
按照这个逻辑,便可以构造F统计量,该统计量可以表示成回归离差平方和RSS与误差平方和ESS的公式:
其中,p和n-p-1分别为RSS和ESS的自由度。模型拟合得越好,ESS就会越小,RSS则会越大,得到的F统计量也就越大。
步骤三:计算统计量
下面按照F统计量的公式,运用Python计算该统计量的值,详细的计算过程可见下方代码:
import numpy as np
import pandas as pd
from sklearn import model_selection
import statsmodels.api as sm
Profit = pd.read_excel(r'Predict to Profit.xlsx')
train, test = model_selection.train_test_split(Profit, test_size=0.2, random_state=1234)
model = sm.formula.ols('Profit ~ RD_Spend + Administration + Marketing_Spend + C(State)', data=train).fit()
#计算建模数据中因变量的均值
ybar = train.Profit.mean()
#统计变量个数和观测个数
p = model.df_model
n = train.shape[0]
#计算回归离差平方和
RSS = np.sum((model.fittedvalues - ybar) ** 2)
#计算误差平方和
ESS = np.sum(model.resid ** 2)
#计算F统计量的值
F = (RSS/p) / (ESS/(n-p-1))
print('F的统计量的值:', F)
结果:
F的统计量的值: 174.6372171663537
为了验证手工计算的结果是否正确,可以通过fvalue“方法”直接获得模型的F统计量值,如下结果所示,经过对比发现,手工计算的结果与模型自带的F统计量值完全一致:
import pandas as pd
from sklearn import model_selection
import statsmodels.api as sm
Profit = pd.read_excel(r'Predict to Profit.xlsx')
train, test = model_selection.train_test_split(Profit, test_size=0.2, random_state=1234)
model = sm.formula.ols('Profit ~ RD_Spend + Administration + Marketing_Spend + C(State)', data=train).fit()
print(model.fvalue)
结果:
174.63721715703537
步骤四:对比结果下结论
最后一步所要做的是对比F统计量的值与理论F分布的值,如果读者手中有F分布表,可以根据置信水平(0.05)和自由度(5,34)查看对应的分布值。为了简单起见,这里直接调用Python函数计算理论分布值:
import pandas as pd
from sklearn import model_selection
import statsmodels.api as sm
from scipy.stats import f
Profit = pd.read_excel(r'Predict to Profit.xlsx')
train, test = model_selection.train_test_split(Profit, test_size=0.2, random_state=1234)
model = sm.formula.ols('Profit ~ RD_Spend + Administration + Marketing_Spend + C(State)', data=train).fit()
#计算建模数据中因变量的均值
ybar = train.Profit.mean()
#统计变量个数和观测个数
p = model.df_model
n = train.shape[0]
#计算F分布的理论值
F_Theroy = f.ppf(q=0.95, dfn=p, dfd=n-p-1)
print('F分布的理论值为:', F_Theroy)
结果:
F分布的理论值为: 2.502635007415366
如上结果所示,在原假设的前提下,计算出来的F统计量值174.64远远大于F分布的理论值2.50,所以应当拒绝原假设,即认为多元线性回归模型是显著的,也就是说回归模型的偏回归系数都不全为0。
回归系数的显著性检验——t检验
模型通过了显著性检验,只能说明关于因变量的线性组合是合理的,但并不能说明每个自变量对因变量都具有显著意义,所以还需要对模型的回归系数做显著性检验。关于系数的显著性检验,需要使用t检验法,构造t统计量。接下来按照模型显著性检验的四个步骤,对偏回归系数进行显著性检验。
步骤一:提出假设
如前文所提,t检验的出发点就是验证每一个自变量是否能够成为影响因变量的重要因素。t检验的原假设是假定第 j 变量的偏回归系数为0,即认为该变量不是因变量的影响因素;而备择假设则是相反的假定,认为第 j 变量是影响因变量的重要因素。
步骤二:构造统计量
步骤三:计算统计量
如果读者对 t 统计量值的计算比较感兴趣,可以使用如上公式完成统计量的计算,这里就不手工计算了。为了方便起见,可以直接调用summary“方法”,输出线性回归模型的各项指标值:
import pandas as pd
from sklearn import model_selection
import statsmodels.api as sm
Profit = pd.read_excel(r'Predict to Profit.xlsx')
train, test = model_selection.train_test_split(Profit, test_size=0.2, random_state=1234)
model = sm.formula.ols('Profit ~ RD_Spend + Administration + Marketing_Spend + C(State)', data=train).fit()
#有关模型的概览信息
print(model.summary())
结果:
OLS Regression Results
==============================================================================
Dep. Variable: Profit R-squared: 0.964
Model: OLS Adj. R-squared: 0.958
Method: Least Squares F-statistic: 174.6
Date: Sun, 28 Feb 2021 Prob (F-statistic): 9.74e-23
Time: 12:27:30 Log-Likelihood: -401.20
No. Observations: 39 AIC: 814.4
Df Residuals: 33 BIC: 824.4
Df Model: 5
Covariance Type: nonrobust
========================================================================================
coef std err t P>|t| [0.025 0.975]
----------------------------------------------------------------------------------------
Intercept 5.858e+04 6690.704 8.756 0.000 4.5e+04 7.22e+04
C(State)[T.Florida] 927.3944 3084.857 0.301 0.766 -5348.795 7203.584
C(State)[T.New York] -513.4683 3043.160 -0.169 0.867 -6704.824 5677.887
RD_Spend 0.8035 0.040 19.988 0.000 0.722 0.885
Administration -0.0578 0.051 -1.133 0.265 -0.162 0.046
Marketing_Spend 0.0138 0.015 0.930 0.359 -0.016 0.044
==============================================================================
Omnibus: 1.721 Durbin-Watson: 1.896
Prob(Omnibus): 0.423 Jarque-Bera (JB): 1.148
Skew: 0.096 Prob(JB): 0.563
Kurtosis: 2.182 Cond. No. 1.56e+06
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 1.56e+06. This might indicate that there are
strong multicollinearity or other numerical problems.
如上结果所示,模型的概览信息包含三个部分:
第一部分主要是有关模型的信息,例如模型的判决系数R2,用来衡量自变量对因变量的解释程度、模型的 F 统计量值,用来检验模型的显著性、模型的信息准则AIC或BIC,用来对比模型拟合效果的好坏等;
第二部分主要包含偏回归系数的信息,例如回归系数的估计值Coef、t 统计量值、回归系数的置信区间等;
第三部分主要涉及模型误差项 ε 的有关信息,例如用于检验误差项独立性的杜宾-瓦特森统计量Durbin-Watson、用于衡量误差项是否服从正态分布的JB统计量以及有关误差项偏度Skew和峰度Kurtosis的计算值等。
步骤四:对比结果下结论
在第二部分的内容中,含有每个偏回归系数的 t 统计量值,它的计算就是由估计值coef和标准误std err的商所得的。同时,每个 t 统计量值都对应了概率值p,用来判别统计量是否显著的直接办法,通常概率值p小于0.05时表示拒绝原假设。从返回的结果可知,只有截距项Intercept和研发成本RD_Spend对应的p值小于0.05,才说明其余变量都没有通过系数的显著性检验,即在模型中这些变量不是影响利润的重要因素。