绘制最佳拟合曲线线

时间:2016-11-17 00:08:00

标签: r plot regression

在图表上绘制最佳拟合曲线线的正确方法是什么?我试图提供回归模型作为线的参数 - 而不是特定点。在下面的模型中,正确的线应该是完美的拟合(因为数据中没有噪声)。如何从线性模型绘制最佳拟合线?

library(lattice)
vals<-data.frame(x=1:10,y=(1:10)^2)

xyplot(x~y,data=vals)
line(lm(x~y,data=vals)) #doesnt work
abline(vals$x,vals$y) #doesnt work

enter image description here

2 个答案:

答案 0 :(得分:1)

要使用lattice库进行回归,您需要在xyplot函数中包含一个类型参数。要使用"r"进行线性回归并获得非线性回归(这是您想要的),请使用"smooth"。所以这就是你的代码应该是什么样的

library(lattice)
vals<-data.frame(x=1:10,y=(1:10)^2)
xyplot(x~y,data=vals,type=c("p","smooth"))

"p"用于点,"smooth"用于平滑回归。这将产生一个看起来像这样的图表

enter image description here

另外,如果您出于某种原因确实希望对此进行线性回归,那么您的代码将会是这样的

library(lattice)
vals<-data.frame(x=1:10,y=(1:10)^2)
xyplot(x~y,data=vals,type=c("p","r"))

你的图表看起来像这样

enter image description here

答案 1 :(得分:0)

我认为你可能会颠倒公式中参数的顺序,因为y与x的传统图将从xyplot( y ~ x )返回。但如果您确实需要使用二次多项式拟合进行线性回归,则使用公式中的poly函数和predict函数来获取拟合值:

xyplot(x~y,data=vals)
plot(vals$y, predict( lm(x~poly(y, 2), data=vals)) ) 

由于您正在绘制x的平方根与x的关系,因此它并不完全合适。

resid(  lm(x~poly(y, 2),data=vals)) 
#------------------------------
          1           2           3           4           5           6           7 
-0.57799840 -0.01438720  0.28444720  0.35772841  0.26036947  0.06297286 -0.14816950 
          8           9          10 
-0.27107622 -0.18807651  0.23418989 

另一种方式(确实合适)是在公式中使用I函数:

 plot(vals$y, fitted( lm(x~I(y^(1/2) ), data=vals)) )
 points(vals, pch="x", col='red')
 points(vals$y, vals$x, pch="x", col='red')

enter image description here