如何在 python 中执行 breusch-godfrey 测试
线性回归的关键假设之一是残差之间不存在相关性,即残差是独立的。
为了测试一阶自相关,我们可以执行Durbin-Watson 检验。然而,如果我们想测试更高阶的自相关性,我们需要执行Breusch-Godfrey 检验。
该测试使用以下假设:
H 0 (零假设):不存在小于或等于p的阶数的自相关。
H A (替代假设):存在小于或等于p的某个阶的自相关。
检验统计量遵循具有p 个自由度的卡方分布。
如果与该检验统计量相对应的p 值低于一定的显着性水平(例如 0.05),那么我们可以拒绝零假设并得出结论:在某个较低阶或等于p的残差之间存在自相关。
要在 Python 中执行 Breusch-Godfrey 测试,您可以使用statsmodels库中的acorr_breusch_godfrey()函数。
以下分步示例说明了如何在 Python 中执行 Breusch-Godfrey 测试。
第 1 步:创建数据
首先,我们创建一个包含两个预测变量(x1 和 x2)和一个响应变量 (y) 的数据集。
import pandas as pd #create dataset df = pd. DataFrame ({' x1 ': [3, 4, 4, 5, 8, 9, 11, 13, 14, 16, 17, 20], ' x2 ': [7, 7, 8, 8, 12, 4, 5, 15, 9, 17, 19, 19], ' y ': [24, 25, 25, 27, 29, 31, 34, 34, 39, 30, 40, 49]}) #view first five rows of dataset df. head () x1 x2 y 0 3 7 24 1 4 7 25 2 4 8 25 3 5 8 27 4 8 12 29
第 2 步:拟合回归模型
然后我们可以使用 x1 和 x2 作为预测变量,y 作为响应变量来拟合多元线性回归模型。
import statsmodels. api as sm
#define response variable
y = df[' y ']
#define predictor variables
x = df[[' x1 ', ' x2 ']]
#add constant to predictor variables
x = sm. add_constant (x)
#fit linear regression model
model = sm. OLS (y,x). fit ()
第 3 步:执行布洛施-戈弗雷测试
接下来,我们将执行 Breusch-Godfrey 检验来检验p阶残差之间的自相关性。对于本例,我们将选择p = 3。
import statsmodels. stats . diagnosis as dg
#perform Breusch-Godfrey test at order p = 3
print (dg. acorr_breusch_godfrey (model, nlags= 3 ))
(8.70314827, 0.0335094873, 5.27967224, 0.0403980576)
输出的第一个值表示检验统计量,第二个值表示相应的 p 值。
从结果中我们可以看到以下内容:
- 检验统计量 X 2 = 8.7031
- P 值 = 0.0335
由于该 p 值小于 0.05,因此我们可以拒绝原假设并得出结论:阶次小于或等于 3 的残差之间存在自相关。
如何处理自相关
如果您拒绝零假设并得出残差中存在自相关的结论,那么如果您认为问题足够严重,则可以通过多种选择来纠正该问题:
- 对于正序列相关,请考虑向模型添加因变量和/或自变量的滞后。
- 对于负序列相关,请确保没有任何变量过度延迟。
- 对于季节性相关性,请考虑向模型添加季节性虚拟变量。
其他资源
Python 线性回归完整指南
如何在 Python 中执行 Durbin-Watson 测试
如何在 Python 中执行 Ljung-Box 测试