Theil-Sen 估计器中的截距计算

机器算法验证 回归
2022-04-03 17:56:27

经过一些谷歌搜索后,我刚刚为 Theil-Sen 编写了一些 C 代码(我没有任何明确的文档)。我对截距计算的理解是,我先计算中值斜率,然后用这个斜率在每个数据点上构造一条线,求出每条线的截距,然后取中值截距。

我能找到测试代码的唯一方法是将结果与来自USGS的 Kendall-Theil Robust Line 程序进行比较。在包含 237 个点的数据集(医疗保健数据,皮尔逊相关系数约为 0.55)上,我们完全同意中位斜率,但不同意截距(相差 1.4%)。根据我的数据,KTRL 截距不是中值截距,而是整个范围的 46%。

在 KTRL 代码中进行了一些挖掘之后,似乎他们通过创建一条“中线”来计算截距,而不是所有截距的中位数。他们的拦截是medianY - medianX * median slope

任何关于哪种方法是“正确”的反馈,如果有的话,或者在 R/etc 中如何处理?

谢谢。

2个回答

Theil-Sen 估计器本质上是一个单独的斜率估计器;这条线以多种不同的方式构建 - 有多种计算截距的方法。

你说:

我对截距计算的理解是,我先计算中值斜率,然后用这个斜率在每个数据点上构造一条线,求出每条线的截距,然后取中值截距。

一个常见的(可能是最常见的)是计算中位数()。例如,这就是森所看到的;如果我正确理解您的拦截定义,这与您提到的拦截相同。ybx

有几种方法可以计算通过每对点的线的截距,并尝试获得某种加权中位数,但基于此(在 x 空间中相距较远的点上施加更多权重)。

另一个是尝试在正常情况下获得具有更高效率的估计器(类似于典型情况下的斜率估计器)和与斜率估计相似的分解点(以牺牲效率为代价进行更好的分解可能没有什么意义),例如在上使用 Hodges-Lehmann 估计器(成对平均值的中位数) 。这在定义斜率和截距的方式上有一种对称性......并且当正常假设几乎成立时,通常会给出非常接近 LS 线的东西,而 Sen 截距可以 - 相对而言 - 完全不同。ybx

有些人只是计算平均残差。

还有其他一些建议已经被研究过了。斜率估计确实没有“一个”截距。

迪茨列出了几种可能性,甚至可能包括我提到的所有可能性,但这绝不是详尽无遗的。

USGS 的 Kendall-Theil Robust Line 计划有一个配套的 PDF 文件

在第 8 页(PDF 第 15 页)上,它说明了您找到的使用的方法和公式,但提供了 Conover 的参考。

截距

截距的估计值是使用 Conover (1980) 方程计算的

b=Ymedianm×Xmedian  ,                      (6)

其中 是估计截距,是中位数响应变量, 是估计的斜率, \是中位数解释变量。
                b     
       Ymedian    
               m    

      Xmedian    

我确认这确实会产生与程序相同的结果。是否有更好的方法等等,一如往常,见仁见智和你的具体情况。

M 估计算法可以说是错误的。

for i = 1,   # dat-1 do
for j = i+1, # dat do

更改存在j索引i+1并且不处理i == j.

然后按照描述对结果选择索引进行排名(排序),或者可以说取中位数,这将给出稍微不同的结果。如果进行绘图,数据将看起来像 CDF 图。