绘制最佳拟合曲线
plotting a curvilinear line of best fit
在图形上绘制最佳拟合曲线的正确方法是什么?我试图提供一个回归模型作为线的参数 - 而不是特定点。在下面的模型中,正确的线应该是完美的(因为数据中没有噪音)。如何绘制线性模型的最佳拟合线?
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
要使用 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"
是针对平滑回归的。这将产生一个看起来像这样的图表
或者,如果您出于某种原因确实想要对此进行线性回归,您的代码将如下所示
library(lattice)
vals<-data.frame(x=1:10,y=(1:10)^2)
xyplot(x~y,data=vals,type=c("p","r"))
你的图表看起来像这样
我认为您可能颠倒了公式中参数的顺序,因为 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')
在图形上绘制最佳拟合曲线的正确方法是什么?我试图提供一个回归模型作为线的参数 - 而不是特定点。在下面的模型中,正确的线应该是完美的(因为数据中没有噪音)。如何绘制线性模型的最佳拟合线?
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
要使用 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"
是针对平滑回归的。这将产生一个看起来像这样的图表
或者,如果您出于某种原因确实想要对此进行线性回归,您的代码将如下所示
library(lattice)
vals<-data.frame(x=1:10,y=(1:10)^2)
xyplot(x~y,data=vals,type=c("p","r"))
你的图表看起来像这样
我认为您可能颠倒了公式中参数的顺序,因为 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')