【问题标题】:calculate distance between regression line and datapoint计算回归线和数据点之间的距离
【发布时间】:2011-08-02 10:44:46
【问题描述】:

我想知道是否有一种方法可以计算图中的 abline 和数据点之间的距离?例如,concentration == 40signal == 643(元素 5)与 abline 之间的距离是多少?

concentration <- c(1,10,20,30,40,50)
signal <- c(4, 22, 44, 244, 643, 1102)
plot(concentration, signal)
res <- lm(signal ~ concentration)
abline(res)

【问题讨论】:

  • 你是指到直线的最短距离还是垂直距离(观察值和拟合值之间的距离)?如果是后者,那就看?residuals
  • @James:你的问题是关键。现在有两个答案,根据 Lisann 的要求,任何一个都是正确的。
  • 到直线的最短距离是Total Least Squares Regression的残差。
  • @cbeleites:是的,但你真的想运行 TLS 回归只是为了得到一个简单的答案吗?
  • 感谢您的回答,对于我的问题,我需要垂直距离

标签: r plot distance


【解决方案1】:

您基本上是在要求residuals

R> residuals(res)
      1       2       3       4       5       6 
 192.61   12.57 -185.48 -205.52  -26.57  212.39 

顺便说一句,当您拟合线性回归时,残差之和为 0:

R> sum(residuals(res))
[1] 8.882e-15

如果模型正确,则应遵循正态分布 - qqnorm(res)

我发现使用标准化残差更容易。

> rstandard(res)
       1        2        3        4        5        6 
 1.37707  0.07527 -1.02653 -1.13610 -0.15845  1.54918 

这些残差已缩放为均值为零,方差(大约)等于 1,并具有正态分布。异常标准化残差是那些大于 +/- 2 的残差。

【讨论】:

  • 不要迂腐,尤其是当您回答了所提出的问题时,但用户应该意识到此解决方案适用于拟合数据的残差。应用于新点需要 y 值与 predict 的输出之间的差异,也就是 y-hat。
【解决方案2】:

您可以使用以下功能:

http://paulbourke.net/geometry/pointlineplane/pointline.r

然后只提取斜率和截距:

> coef(res)
  (Intercept) concentration 
   -210.61098      22.00441

所以你的最终答案是:

concentration <- c(1,10,20,30,40,50)
signal <- c(4, 22, 44, 244, 643, 1102)
plot(concentration, signal)
res <- lm(signal ~ concentration)
abline(res)

cfs <- coef(res)
distancePointLine(y=signal[5], x=concentration[5], slope=cfs[2], intercept=cfs[1])

如果您想要更通用的解决方案来查找特定点,concentration == 40 返回一个长度为 length(concentration) 的布尔向量。您可以使用该向量来选择点。

pt.sel <- ( concentration == 40 )
> pt.sel
[1] FALSE FALSE FALSE FALSE TRUE FALSE
> distancePointLine(y=signal[pt.sel], x=concentration[pt.sel], slope=cfs["concentration"], intercept=cfs["(Intercept)"])
     1.206032

不幸的是 distancePointLine 似乎没有被矢量化(或者它确实,但是当你传递一个矢量时它会返回一个警告)。否则,您只需将 [] 选择器从 x 和 y 参数中移除即可获得所有点的答案。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-01-28
  • 2018-05-21
  • 1970-01-01
  • 2019-03-20
  • 2014-11-29
  • 2013-07-17
  • 1970-01-01
  • 2014-02-28
相关资源
最近更新 更多