2015-07-05 2 views
2

Язык R всегда был для меня загадкой - так что, хотя я знаю, что такое линейная регрессия - некоторые из следующих синтаксисов ускользают от меня.Понимание линейной модели в R

Так что у меня есть следующие:

x <- c(1, 2, 3, 4) 
y <- c(2.1, 3.8, 6.5, 7.78) 
lm1 <- lm(y~x) 

Насколько я понимаю, LM1 содержит линейную модель, когда я печатаю это подтверждает, что (я думаю):

> lm1 

Call: 
lm(formula = y ~ x) 

Coefficients: 
(Intercept)   x 
     0.110  1.974 

Теперь, когда я (я хочу предсказать значения x = 10 и x = 20:

test <- c(10,20) 
predict(lm1, test) 

я получаю следующее:

Ошибка в Eval (predvars, данные, ENV): числовая 'ENVIR' ARG не длины один

Любая помощь приветствуется.

данных

> dput(x) 
c(1, 2, 3, 4) 
> dput(y) 
c(2.1, 3.8, 6.5, 7.78) 
> dput(test) 
c(10, 20) 
+0

'test <- data.frame (x = c (10,20)); прогноз (lm1, newdata = test) ' – C8H10N4O2

ответ

6

predict() необходим параметр newdata= быть data.frame. Он использует имена столбцов в data.frame, чтобы соответствовать переменным в вашей формуле. Это особенно необходимо, когда ваша модель имеет более одного предиктора.

Вы можете сделать

predict(lm1, data.frame(x=test)) 

Кроме того, было бы лучше, чтобы соответствовать вашей модели с использованием data.frame, а также.

dd<-data.frame(
    x = c(1, 2, 3, 4), 
    y = c(2.1, 3.8, 6.5, 7.78) 
) 
lm1 <- lm(y~x, dd) 
predict(lm1, data.frame(x=c(10,20))) 

Это обычно приводит к меньшему количеству «сюрпризов».

+0

Большое спасибо :-) – user975917