如何在 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作为响应变量,使用disp和hp作为两个预测变量来拟合回归模型:
#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 中线性回归的更多信息: