R绘制(abline + lm)最佳拟合线穿过任意点

时间:2013-04-22 06:18:58

标签: r plot line point least-squares

我正在尝试使用abline(lm(...))绘制最小二乘回归线,这也是强制通过特定点的。我看到this question是相关的,但不是我想要的。这是一个例子:

test <- structure(list(x = c(0, 9, 27, 40, 52, 59, 76), y = c(50, 68, 
79, 186, 175, 271, 281)), .Names = c("x", "y"))

# set up an example plot
plot(test,pch=19,ylim=c(0,300),
     panel.first=abline(h=c(0,50),v=c(0,10),lty=3,col="gray"))

# standard line of best fit - black line
abline(lm(y ~ x, data=test))

# force through [0,0] - blue line
abline(lm(y ~ x + 0, data=test), col="blue")

这看起来像:

enter image description here

现在,我如何在(x=10,y=50)的标记任意点强制划线,同时最小化与其他点的距离?

# force through [10,50] - red line
??

2 个答案:

答案 0 :(得分:13)

一个粗略的解决方案是将模型的原点移动到该点并创建一个没有拦截的模型

nmod <- (lm(I(y-50)~I(x-10) +0, test))

abline(predict(nmod, newdata = list(x=0))+50, coef(nmod), col='red')

enter image description here

答案 1 :(得分:3)

您可以修改lm()的公式并偏移数据:

p=10
q=50

abline(lm(I(y-q) ~ I(x-p) + 0, data=test), col="red")