如何在 python 中执行 durbin-watson 测试
线性回归的假设之一是残差之间不存在相关性。换句话说,假设残差是独立的。
确定是否满足此假设的一种方法是执行Durbin-Watson 检验,该检验用于检测回归残差中是否存在自相关。该测试使用以下假设:
H 0 (零假设):残差之间不存在相关性。
H A (替代假设):残差是自相关的。
检验统计量约等于 2*(1-r),其中 r 是残差的样本自相关。因此,检验统计量将始终介于 0 和 4 之间,解释如下:
- 检验统计量为2表示不存在序列相关性。
- 检验统计量越接近0 ,就越有证据表明正序列相关。
- 检验统计量越接近4 ,负序列相关的证据就越多。
通常,检验统计值在 1.5 到 2.5 之间被认为是正常的。但是,超出此范围的值可能表明自相关存在问题。
本教程介绍如何在 Python 中执行 Durbin-Watson 测试。
示例:Python 中的 Durbin-Watson 测试
假设我们有以下数据集,描述了 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
假设我们使用评级作为响应变量,其他三个变量作为预测变量来拟合多元线性回归模型:
from statsmodels.formula.api import ols #fit multiple linear regression model model = ols('rating ~ points + assists + rebounds', data=df). fit () #view model summary print(model.summary())
我们可以使用 statsmodels 库中的durbin_watson() 函数执行 Watson Durbin,以确定回归模型残差是否自相关:
from statsmodels.stats.stattools import durbin_watson #perform Durbin-Watson test durbin_watson(model.resid) 2,392
检验统计量为2.392 。由于该值介于 1.5 和 2.5 之间,因此我们认为自相关在此回归模型中不是问题。
如何处理自相关
如果您拒绝零假设并得出残差中存在自相关的结论,那么如果您认为问题足够严重,则可以通过多种选择来纠正该问题:
1.对于正序列相关,请考虑将因变量和/或自变量的滞后添加到模型中。
2.对于负序列相关,请确保没有任何变量过度延迟。
3.对于季节性相关性,请考虑向模型添加季节性虚拟变量。