经过一些谷歌搜索后,我刚刚为 Theil-Sen 编写了一些 C 代码(我没有任何明确的文档)。我对截距计算的理解是,我先计算中值斜率,然后用这个斜率在每个数据点上构造一条线,求出每条线的截距,然后取中值截距。
我能找到测试代码的唯一方法是将结果与来自USGS的 Kendall-Theil Robust Line 程序进行比较。在包含 237 个点的数据集(医疗保健数据,皮尔逊相关系数约为 0.55)上,我们完全同意中位斜率,但不同意截距(相差 1.4%)。根据我的数据,KTRL 截距不是中值截距,而是整个范围的 46%。
在 KTRL 代码中进行了一些挖掘之后,似乎他们通过创建一条“中线”来计算截距,而不是所有截距的中位数。他们的拦截是medianY - medianX * median slope
。
任何关于哪种方法是“正确”的反馈,如果有的话,或者在 R/etc 中如何处理?
谢谢。