剩余比例为1:1

时间:2014-10-31 11:33:05

标签: r scatter-plot linear-regression variance

我想测量一组点与1:1线之间的距离。我可以构建一个线性模型并从最佳拟合中获得残差,但我无法从1:1线获得该度量。任何有用的提示?

#build a df of random numbers     
x=runif(100, 0, 100)
    y=runif (100, 0, 100)
    df=cbind (x,y)
    df=as.data.frame(df)
#build a linear model    
lm1<-lm(y~x, data=df)
    summary (lm1)
#plot the data, lm best fit and 1:1 (red) line)    
    plot (y~x, data=df, pch=16)
    line (lm1)
    abline abline(0,1, col="red")
#get residulas for the linear model 
y.resid= resid (lm1)

3 个答案:

答案 0 :(得分:4)

我建议使用y-x,就像@vpipkt建议的那样。仅为了完整性:您还可以创建具有固定系数y-x ~ 0的线性模型,并在那里获取残差。

resid(lm(y-x ~ 0))

当然这只是更复杂,并且给出与y-x相同的结果,但它明确表示你正在使用残差而不是计算到该线的最小距离(cf @ user3969377&#39; s)

答案 1 :(得分:3)

要确定一组点与1:1线之间的距离,请使用

dist[x-y=0; (x0,y0)] = abs(x0 - y0) / sqrt(2)

ref http://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line

对于您的示例,

par(pty="s")
plot (y~x, data=df, pch=16)
line (lm1)
abline(0,1, col="red")
#get residulas for the linear model 
y.resid= resid (lm1)
a=1;b=-1;c=0
xi = (b*(b*x-a*y)-a*c) / (a^2+b^2)
yi = (a*(-b*x+a*y)-b*c) / (a^2+b^2)
segments(x,y,xi,yi,col="blue")
yr = abs(a*x+b*y+c)/sqrt(a^2+b^2)
hist(yr)

答案 2 :(得分:2)

从模型y = x的残差意义上说,距离只是'y-x'。

r = y-x
plot(r~x)
abline(h=0)

您可以将其扩展为更一般的线性模型y = ax + b。剩余物是

r = y - ax - b