2013-06-13 2 views
1

Создание полиномиальной линейной модели из следующих значений:R предсказать() не дает правильное число предсказаний

y <- c(0.040, 0.073, 0.87) 
x <- c(10.0, 15.0, 20.0) 

poly.lm <- lm(y~poly(x,2)) 

Я не могу показаться, чтобы получить правильное количество предсказаний от функции predict(), когда я пытаюсь для прогнозирования ряда значений из сгенерированной последовательности x. В самом деле, что я, кажется, просто выход по умолчанию я хотел бы получить за predict(poly.lm):

new <- seq(0,19,1.0) 
predict(poly.lm, x=new) 

не Должен ли я получать 20 предсказаний для y учитывая последовательность из 20 x значений?

+5

'предсказать()' нуждается в data.frame. Попробуйте 'pred (poly.lm, data.frame (x = new))'. Также см. '? Predict.lm'. – bdemarest

+0

, чтобы добавить к вышесказанному, 'x = new' считывается как param' x' для функции 'pred' (что здесь ничего не делает), а то, что вы делаете, эквивалентно' pred (poly. lm) ', т. е. прогнозирование на ваших данных в образце – eddi

+0

@bdemarest Да, это и помогло. Спасибо, парни! – ryanjdillon

ответ

2

Если вы хотите предсказать значения y для новых значений x, не включенных в исходный вызов lm, вам необходимо предоставить аргумент data.frame newdata. Кроме того, имена (имена) столбца data.frame должны соответствовать именам переменных, используемых в модели. ?predict не объясняет это, но это немного яснее в ?predict.lm.

y <- c(0.040, 0.073, 0.87) 
x <- c(10.0, 15.0, 20.0) 
poly.lm <- lm(y ~ poly(x, 2)) 

# As DWin noted, predict() will compute fitted y-values using an lm object alone: 
all.equal(predict(poly.lm), poly.lm$fitted) 
# [1] TRUE 

# To predict y for new x-values, make a data.frame: 
new.x <- seq(0, 20, 1.0) 
new.df <- data.frame(x=new.x) 
new.y <- predict(poly.lm, newdata=new.df) 


# Unsolicited visualization. 
par(mfrow=c(1, 2)) 
plot(x, y, pch=16, cex=1.6, xlim=c(0, 20), ylim=c(0, 3)) 
plot(new.x, new.y, col="skyblue", pch=16, cex=1.6, xlim=c(0, 20), ylim=c(0, 3)) 
points(x, y, cex=1.6) 

enter image description here

+1

На самом деле функция прогнозирования не нужна в качестве входного кадра данных. Он будет использовать исходные данные из объекта модели, в котором отсутствует аргумент newdata. –

+0

@DWin, я обновил ответ, чтобы включить вашу точку. – bdemarest

+0

Фантастический. Благодаря! – ryanjdillon

Смежные вопросы