关于R语言lmtest包中dwtest函数的使用困惑咨询
我来帮你拆解下你遇到的dwtest结果,核心是要明确:Durbin-Watson检验(dwtest)检测的是回归模型残差的一阶自相关性,而非自变量和因变量之间的相关性——这应该是你之前误解的关键点。
第一个测试案例分析
你生成了两个独立的均匀分布随机序列:
r1 <- runif(1000, 0.0, 1.0) r2 <- runif(1000, 0.0, 1.0) dwtest(lm(r2 ~ r1 ))
得到的结果是:
Durbin-Watson test
data: lm(r2 ~ r1)
DW = 1.9806, p-value = 0.3789
alternative hypothesis: true autocorrelation is greater than 0
这个结果完全合理:因为r1和r2是独立随机变量,回归后的残差也是独立的(没有自相关)。DW统计量的取值范围是0到4,当DW值接近2时,代表残差无自相关。这里1.98非常接近2,p值0.3789大于常用的显著性水平0.05,所以我们无法拒绝“残差无自相关”的原假设,符合预期。
第二个测试案例分析
你生成了两个完全线性相关的序列:
r1 <- seq(0, 1000, by=1) r2 <- seq(0, 1000, by=1) dwtest(lm(r2 ~ r1 ))
得到的结果是:
Durbin-Watson test
data: lm(r2 ~ r1)
DW = 2.2123, p-value = 0.8352
这里的关键是:r2和r1完全线性相关,回归模型的拟合度是100%,残差几乎全为0。残差序列是一串近似0的数值,相邻残差之间没有任何自相关趋势(毕竟都是0),所以DW值依然接近2(2.21属于正常波动范围)。p值0.8352很高,说明没有足够证据支持“残差存在正自相关”的备择假设,这也是合理的。
总结你的误解点
你可能误以为dwtest会检测自变量和因变量的相关性,但实际上它的核心是残差序列的自相关性——也就是残差项之间是否存在前后关联(比如时间序列数据中常见的滞后相关)。哪怕自变量和因变量完全相关,只要残差没有自相关,DW值就会接近2,p值也不会显著。
内容的提问来源于stack exchange,提问作者BadPractice

