Нелинейный график для линейной регрессии в R - PullRequest
1 голос
/ 03 декабря 2011
y<-c(0.0100,2.3984,11.0256,4.0272,0.2408,0.0200);
x<-c(1,3,5,7,9,11);
d<-data.frame(x,y)
myLm<-lm(x~y**2,data=d)
plot(d)
lines(x,lm(y ~ I(log(x)) + x,data=d)$fitted.values)
lines(x,lm(y ~ I(x**2) + x,data=d)$fitted.values) % not quite right, smooth plz

Это должен быть ровный сюжет, что-то не так.

enter image description here

Вспомогательные вопросы

  1. Какой алгоритм используется в линейной регрессии?
  2. Объяснение построения наименьших квадратов с помощью матрицы-единицы

Ответы [ 4 ]

9 голосов
/ 03 декабря 2011

Вам необходимо predict для интерполяции прогнозов между подобранными точками.

d <- data.frame(x=seq(1,11,by=2),
                y=c(0.0100,2.3984,11.0256,4.0272,0.2408,0.0200))
lm1 <-lm(y ~ log(x)+x, data=d)
lm2 <-lm(y ~ I(x^2)+x, data=d)
xvec <- seq(0,12,length=101)
plot(d)
lines(xvec,predict(lm1,data.frame(x=xvec)))
lines(xvec,predict(lm2,data.frame(x=xvec)))

enter image description here

6 голосов
/ 03 декабря 2011

Обязательный метод ggplot2:

library(ggplot2)
qplot(x,y)+stat_smooth(method="lm", formula="y~poly(x,2)", se=FALSE)

enter image description here

2 голосов
/ 03 декабря 2011

Вам следует потратить некоторое время на «Приложение A: Образец сеанса» руководства «Введение R», которое входит в вашу программу. Но вот начало

R> y<-c(0.0100,2.3984,11.0256,4.0272,0.2408,0.0200);
R> x<-c(1,3,5,7,9,11);
R> d<-data.frame(x,y)
R> myLm<-lm(x~y**2,data=d)
R> myLm

Call:
lm(formula = x ~ y^2, data = d)

Coefficients:
(Intercept)            y  
      6.434       -0.147  

и мы можем построить это как (где я теперь исправил вашу необычную инверсию ролей x и y):

R> plot(d)
R> lines(d$y,fitted(myLm))

enter image description here

2 голосов
/ 03 декабря 2011

что-то вроде:

 plot(d)    
 abline(lm(x~y**2,data=d), col="black")

сделает это (если оно будет линейным, как подразумевалось при первом вопросе)

Для того, что вы ищете, я думаю:

  lines(smooth.spline(x, y))

Может работать, как намекнул Дирк.

...