【问题标题】:Set slope to 1 and y-intercept to 0 in linear regression to prune outliers在线性回归中将斜率设置为 1 并将 y 截距设置为 0 以修剪异常值
【发布时间】:2018-08-01 23:45:33
【问题描述】:

我正在尝试使用固定斜率(到 1)和截距(到 0)进行线性回归,最后想使用统计数据删除远离此拟合的点。

# set slope =1
my_slope <-1
mylm <- lm(as.numeric(y) ~ 1 + offset(x*my_slope), data = mydata)

# set intercept=0
my_intercept<-0
mylim<-lim(I(x-intercept)~0+y)

首先我不确定这两个代码是否正确。如果是,有什么方法可以更简单地组合这两个代码?

【问题讨论】:

  • 似乎你想自己定义完整的线性方程。然后,您可以使用subset(data, abs(y - 1 + x) &lt; threshold) 或任何其他公式(如平方距离)简单地删除异常值。不需要线性回归。
  • 线性回归的目的是求斜率和截距!在某些情况下,出于合理的原因,您可能会强制截取(例如,如果您知道自己正在处理线性现象)。但是如果你同时修复斜率和截距,你的回归有什么用?你们都准备好了直线方程,并且您可以从数据集中轻松计算错误,假设这些数据遵循您的方程给出的方案..
  • 谢谢大家。 @ziggystar,您能否为我提供一个应用平方距离或统计上可接受的阈值的示例?我尝试了 Mahalanobis Outliers、置信椭圆等。但它们并不是我真正想要的。我只想提取接近 1:1 拟合的点。
  • 对于您想做的事情没有统计可接受性的概念。也许如果你描述你的动机,我们可以得到一些东西。否则,只做你需要的。实际上,使用平方距离作为阈值是没有意义的。如果您想独立考虑每个点,我在第一条评论中的公式就是您所需要的。
  • @Ziggystar,你是对的。您建议的公式或者是我想要的。谢谢。 :)

标签: r regression linear-regression


【解决方案1】:

由于您已经完全指定了线性模型,因此您无需进行任何回归。你的模型是

y = x + 1

然后您可以使用以下方法修剪残差(与预测值的距离)大于d 的任何点

data.pruned = subset(data,abs(y - (x+1)) <= d)

请注意,如果您想修剪平方残差小于dq 的值,您只需设置

d = sqrt(dq)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-05
    • 2014-02-15
    • 2021-10-25
    • 1970-01-01
    • 2019-02-23
    • 2018-02-25
    • 2017-09-13
    • 1970-01-01
    相关资源
    最近更新 更多