如何在 python 中执行 breusch-pagan 测试
在回归分析中,异方差是指残差的离散程度不均匀。更准确地说,这是残差分布在测量值范围内发生系统变化的情况。
异方差是一个问题,因为普通最小二乘 (OLS) 回归假设残差来自具有同方差的总体,即方差恒定。
当回归分析中存在异方差时,分析结果变得难以相信。
确定回归分析中是否存在异方差的一种方法是使用Breusch-Pagan 检验。
本教程介绍如何在 Python 中执行 Breusch-Pagan 测试。
示例:Python 中的 Breusch-Pagan 测试
在此示例中,我们将使用以下数据集来描述 10 名篮球运动员的属性:
import numpy as np import pandas as pd #create dataset df = pd.DataFrame({'rating': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86], 'points': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19], 'assists': [5, 7, 7, 8, 5, 7, 6, 9, 9, 5], 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]}) #view dataset df rating points assists rebounds 0 90 25 5 11 1 85 20 7 8 2 82 14 7 10 3 88 16 8 6 4 94 27 5 6 5 90 20 7 9 6 76 12 6 6 7 75 15 9 10 8 87 14 9 10 9 86 19 5 7
我们将拟合一个多元线性回归模型,使用得分作为响应变量,得分、助攻和篮板作为解释变量。接下来,我们将执行 Breusch-Pagan 检验来确定回归中是否存在异方差。
步骤 1:拟合多元线性回归模型。
首先,我们将拟合多元线性回归模型:
import statsmodels.formula.api as smf #fit regression model fit = smf.ols('rating ~ points+assists+rebounds', data=df). fit () #view model summary print (fit.summary())
步骤 2:执行 Breusch-Pagan 测试。
接下来,我们将执行 Breusch-Pagan 检验以确定是否存在异方差。
from statsmodels.compat import lzip import statsmodels.stats.api as sms #perform Bresuch-Pagan test names = ['Lagrange multiplier statistic', 'p-value', 'f-value', 'f p-value'] test = sms.het_breuschpagan(fit.resid, fit.model.exog) lzip(names, test) [('Lagrange multiply statistic', 6.003951995818433), ('p-value', 0.11141811013399583), ('f-value', 3.004944880309618), ('f p-value', 0.11663863538255281)]
Breusch-Pagan 检验使用以下原假设和备择假设:
原假设 (H 0 ):存在同方差性。
备择假设:(Ha):不存在同方差(即存在异方差)
在此示例中,检验的拉格朗日乘子统计量为6.004 ,相应的 p 值为0.1114 。由于该 p 值不小于 0.05,因此我们无法拒绝原假设。我们没有足够的证据表明回归模型中存在异方差性。
如何修复异方差
在前面的示例中,我们看到回归模型中不存在异方差性。
然而,当异方差确实存在时,可以通过三种常见方法来纠正这种情况:
1.变换因变量。校正异方差的一种方法是以某种方式转换因变量。常见的转换是简单地取因变量的对数。
2. 重新定义因变量。纠正异方差的另一种方法是重新定义因变量。一种常见的方法是使用因变量的比率,而不是原始值。
3. 使用加权回归。校正异方差的另一种方法是使用加权回归。这种类型的回归根据拟合值的方差为每个数据点分配权重。当使用适当的权重时,可以消除异方差问题。
请阅读本文中有关这三种方法的更多详细信息。