You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

截尾最小二乘法(LTS)与剔除观测值的OLS对比

关于截尾最小二乘法(LTS)的理解纠正

嘿,我来帮你理清这个困惑~你的理解其实只对了一半,LTS的核心逻辑和你手动实现的流程完全不一样,这就是为什么结果和ltsReg输出不一致的原因!

你的误区:把LTS当成了「OLS后截尾」

你目前的做法是:

  • 先做全样本普通最小二乘法(OLS)
  • 按OLS残差排序,剔除残差大的观测,再用剩余子集做OLS

但这其实是截尾OLS(Truncated OLS),和真正的截尾最小二乘法(LTS)不是一回事!

LTS的正确流程

LTS的核心是直接在所有可能的大小为h(通常取floor(n/2)+1,或者用户指定的k)的观测子集中,找到能让残差平方和最小的那个子集,然后用这个子集拟合OLS得到估计量。

它完全不依赖全样本OLS的结果——因为全样本OLS会被 outliers 干扰,拟合线会偏向异常值,这时候OLS的残差排序根本无法反映哪些观测是真正的“正常点”(甚至可能出现正常点残差大、异常点残差小的反直觉情况)。

为什么ltsReg的结果和你的手动实现不同?

robustbase包中的ltsReg用的是FAST-LTS算法,这是一种高效的搜索最优子集的方法,它会通过随机抽样+迭代优化的方式找到全局(或近似全局)最优的h个观测,而不是基于全样本OLS的残差筛选。

你可以做个简单验证:

  1. 运行LTS回归并提取它选中的子集:
    library(robustbase)
    fit_lts <- ltsReg(y ~ x)
    selected_indices <- fit_lts$subset
    
  2. 用这个子集手动拟合OLS:
    fit_manual <- lm(y ~ x, data = your_data[selected_indices, ])
    
  3. 对比fit_lts$coefficients和fit_manual$coefficients,你会发现它们完全一致——这就说明LTS的本质是找到最优子集后做OLS,而不是先全样本OLS再截尾。

总结

你的核心误解是把LTS的流程搞反了:它不是先做OLS再截尾,而是先找到最优的h个观测子集,再在这个子集上做OLS。这也是它能抵抗异常值的关键——因为它从一开始就避开了被异常值污染的全样本拟合。

内容的提问来源于stack exchange,提问作者chris12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:20:55