使用lmrob处理含异常值时间序列时t值返回无穷大的问题咨询
lmrob回归出现t值为-inf及负协方差警告的原因
1. 负协方差警告的原因
你看到的警告来自lf.cov函数,提示默认的.vcov.avar1协方差估计方法计算出的协方差矩阵出现负对角线元素,函数已自动修正。这种情况的触发条件通常是:
- 样本量偏小(你的示例仅12个数据点);
- 数据存在明显异常值(比如序列中的728、441);
.vcov.avar1方法在小样本+异常值的场景下数值稳定性不足,无法生成正定的协方差矩阵。
警告里推荐改用cov=".vcov.w."参数,这个方法基于稳健权重计算协方差,对小样本和异常值的适应性更强。
2. t值为-inf的原因
t值的计算公式是系数估计值 ÷ 系数标准误,当标准误计算为0时,就会出现-inf或inf的结果。结合你的场景:
- 因默认协方差估计的数值问题,协方差矩阵的对角线(对应系数的方差)被修正为0或极小值,导致标准误趋近于0;
- MM型稳健回归在处理小样本异常值时,权重分配可能过度压制了变量的变异,进一步加剧了标准误的数值异常。
解决尝试
按照警告提示改用.vcov.w.协方差估计方法,重新运行模型:
ts_list <- c(563, 522, 535, 728, 683, 624, 595 ,589, 535, 529, 441, 565) res <- lmrob(ts_list~1 + seq(1:12), type='MM', cov=".vcov.w.") summary(res)
这样通常能得到合理的标准误和t值,同时消除警告。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

