通过任意点绘制 (abline + lm) 最佳拟合直线的 R 代码

15

我想用abline(lm(...))来绘制一个最小二乘回归线,并使其通过特定的点。我看到这个问题与此相关,但并不完全符合我的需求。以下是一个例子:

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个回答

15

一个简单的解决方案是将您的模型原点移动到该点,并创建一个没有截距的模型。

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

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

在此输入图片描述


不错。这个解决方案看起来并不那么复杂。 - thelatemail
粗糙?不是从计算的角度来看,而是从统计学的角度来看。您会在Bill Venables(来自Venables / Ripley MASS)的一些抱怨中找到有关此主题的信息。 - Dieter Menne
没关系,我并没有将它用于任何严肃的事情,这只是一个想法项目。我会阅读一些有关统计问题的内容。 - thelatemail

3

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

p=10
q=50

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接