如何在Python中进行Breusch-Pagan测试
异方差是一个统计学术语,它被定义为残差的不平等散布。更具体地说,它指的是测量值的范围,即残差的变化。异方差拥有一个挑战,因为普通最小二乘法(OLS)回归认为从人口中抛出的残差具有同方差,也就是恒定方差。如果回归分析中存在异方差,那么分析的结果就不能轻易相信。
Breusch-Pagan检验是检查回归分析中是否存在异方差的一种方法。Breusch-Pagan检验遵循以下假设。
假设:
- 无效假设(H0)。标志着同方差性的存在。
- 备选假设:(Ha)。标志着同方差性不存在(即异方差性存在)。
安装numNumPypy、pandas和statsmodels库的语法。
进行Breusch-Pegan测试
进行Breusch-Pegan测试是一个分步骤的过程。这些都在下面讨论。
第1步:导入库。
第一步是导入我们上面安装的库。
第2步:创建一个数据集。
然后我们需要创建一个数据集。
步骤3:拟合一个多元线性回归模型。
下一步是拟合一个多元线性回归模型。作为一个例子,我们考虑将评级作为响应变量,将分数、跑数和门票作为解释变量。
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
dataframe = pd.DataFrame({'rating': [92, 84, 87, 82,
98, 94, 75, 80,
83, 89],
'points': [27, 30, 15, 26,
27, 20, 16, 18,
19, 20],
'runs': [5000, 7000, 5102,
8019, 1200, 7210,
6200, 9214, 4012,
3102],
'wickets': [110, 120, 110,
80, 90, 119,
116, 100, 90,
76]})
fit = smf.ols('rating ~ points+runs+wickets', data=dataframe).fit()
print(fit.summary())
输出:

第4步:进行Breusch-Pagan测试。
下一步是进行Breusch-Pagan检验,以确定是否存在异方差性。
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
from statsmodels.compat import lzip
import statsmodels.stats.api as sms
dataframe = pd.DataFrame({'rating': [92, 84, 87, 82,
98, 94, 75, 80,
83, 89],
'points': [27, 30, 15, 26,
27, 20, 16, 18,
19, 20],
'runs': [5000, 7000, 5102,
8019, 1200, 7210,
6200, 9214, 4012,
3102],
'wickets': [110, 120, 110,
80, 90, 119,
116, 100, 90,
76]})
fit = smf.ols('rating ~ points+runs+wickets', data=dataframe).fit()
names = ['Lagrange multiplier statistic', 'p-value',
'f-value', 'f p-value']
test_result = sms.het_breuschpagan(fit.resid, fit.model.exog)
lzip(names, test_result)
输出:

输出 Interpretation:
这里,测试的拉格朗日乘数统计量等于4.364,相应的p值等于0.224。由于p值大于0.05,所以我们不能拒绝无效假设。因此,我们没有足够的证据来证明回归模型中存在异方差性。
如何解决异方差问题:
在上面的例子中,回归模型中不存在异方差现象。但是对于异方差实际存在的情况,那么有三种方法可以解决这个问题。
- 改变因变量。我们可以用一些技术来改变因变量。例如,我们可以取因变量的对数。
- 重新定义因变量。我们可以重新定义因变量。例如,对因变量使用比缺陷值的比率。
- 使用加权回归。最后一种方法是使用加权回归。在这种类型的回归中,根据每个数据点的拟合值的方差为其分配权重。使用适当的权重可以消除异方差的问题。