如何在 python 中执行怀特测试(一步一步)


怀特检验用于确定回归模型中是否存在异方差性

异方差是指残差响应变量的不同水平上的分散不均匀,这违反了残差在响应变量的每个水平上均匀分散的假设

以下分步示例演示如何在 Python 中执行 White 检验,以确定异方差性是否是给定回归模型中的问题。

第 1 步:加载数据

在此示例中,我们将使用mtcars数据集拟合多元线性回归模型

以下代码显示了如何将此数据集加载到 pandas DataFrame 中:

 from sklearn. linear_model import LinearRegression
from statsmodels. stats . diagnostic import het_white
import statsmodels. api as sm
import pandas as pd

#define URL where dataset is located
url = "https://raw.githubusercontent.com/Statorials/Python-Guides/main/mtcars.csv"

#read in data
data = pd. read_csv (url)

#view summary of data
data. info ()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 32 entries, 0 to 31
Data columns (total 12 columns):
 # Column Non-Null Count Dtype  
--- ------ -------------- -----  
 0 model 32 non-null object 
 1 mpg 32 non-null float64
 2 cyl 32 non-null int64  
 3 disp 32 non-null float64
 4 hp 32 non-null int64  
 5 drat 32 non-null float64
 6 wt 32 non-null float64
 7 qsec 32 non-null float64
 8 vs 32 non-null int64  
 9 am 32 non-null int64  
 10 gear 32 non-null int64  
 11 carb 32 non-null int64  
dtypes: float64(5), int64(6), object(1)

步骤 2:拟合回归模型

接下来,我们将使用mpg作为响应变量,使用disphp作为两个预测变量来拟合回归模型:

 #define response variable
y = data[' mpg ']

#define predictor variables
x = data[[' disp ', ' hp ']]

#add constant to predictor variables
x = sm. add_constant (x)

#fit regression model
model = sm. OLS (y,x). fit ()

第 3 步:执行怀特测试

接下来,我们将使用 statsmodels 包中的het_white()函数执行 White 检验,以确定回归模型中是否存在异方差:

 #perform White's test
white_test = het_white(model. resid , model. model . exog )

#define labels to use for output of White's test
labels = ['Test Statistic', 'Test Statistic p-value', 'F-Statistic', 'F-Test p-value']

#print results of White's test
print (dict(zip(labels, white_test)))

{'Test Statistic': 7.076620330416624, 'Test Statistic p-value': 0.21500404394263936,
 'F-Statistic': 1.4764621093131864, 'F-Test p-value': 0.23147065943879694}

以下是如何解释结果:

  • 检验统计量为X2 = 7.0766
  • 相应的 p 值为0.215

怀特检验使用以下原假设和备择假设:

  • Null (H 0 ) :存在同方差(残差也分散)
  • 替代方案 ( HA ):存在异方差性(残差分布不均匀)

由于 p 值不小于 0.05,因此我们无法拒绝原假设。

这意味着我们没有足够的证据来证明回归模型中存在异方差性。

接下来做什么

如果您未能拒绝怀特检验的原假设,则不存在异方差,您可以继续解释原始回归的结果。

但是,如果您拒绝原假设,则意味着存在异方差。在这种情况下,回归输出表中显示的标准误差可能不可靠。

有两种常见方法可以解决此问题:

1. 变换响应变量。

您可以尝试对响应变量执行转换,例如取响应变量的对数、平方根或立方根。这通常会导致异方差消失。

2. 使用加权回归。

加权回归根据拟合值的方差为每个数据点分配权重。本质上,这为具有较高方差的数据点赋予了较低的权重,从而减少了它们的残差平方。当使用适当的权重时,可以消除异方差问题。

其他资源

以下教程提供了有关 Python 中线性回归的更多信息:

Python 线性回归完整指南
如何在 Python 中创建残差图
如何用Python计算VIF

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注