Используемая функция Predict для нового набора данных с разными столбцами

Используя данные «стеклосс» в R, я создал модель регрессии, как показано ниже:

    stackloss.lm = lm(stack.loss ~  Air.Flow + Water.Temp + Acid.Conc.,data=stackloss)

stackloss.lm 
newdata = data.frame(Air.Flow=stackloss$Air.Flow, Water.Temp= stackloss$Water.Temp, Acid.Conc.=stackloss$Acid.Conc.)

Предположим, я получаю новый набор данных и должен предсказать его "stack.loss" на основе предыдущей модели, как показано ниже:

#suppose I need to used my model on a new set of data
stackloss$predict1[-1] <- predict(stackloss.lm, newdata)

Я получаю эту ошибку:

Error in `$<-.data.frame`(`*tmp*`, "predict1", value = numeric(0)) : 
  replacement has 0 rows, data has 21

Это способ использовать функцию прогнозирования для разных наборов данных с теми же столбцами, но разными строками?

Заранее спасибо.


person jbest    schedule 14.05.2015    source источник
comment
Это просто пример, как stackloss$predict1[-1] это новый набор данных с другим количеством строк. Мне нужно использовать мою исходную модель, чтобы предсказать y нового набора данных, чтобы убедиться, что он точен. Например, я создал модель, чтобы увидеть цену страховки автомобиля, и моя модель будет использоваться компанией для всех автомобилей, поэтому мне нужно будет использовать мою модель для нескольких наборов данных.   -  person jbest    schedule 14.05.2015
comment
Ошибка говорит, что количество строк не совпадает. Мне нужно использовать функцию прогнозирования для разных наборов данных с разным количеством строк.   -  person jbest    schedule 14.05.2015
comment
Я действительно имел в виду stackloss$predict1[-1], потому что я пытаюсь использовать прогнозирование в наборах данных для разных строк.   -  person jbest    schedule 14.05.2015


Ответы (1)


Вы можете прогнозировать в новый набор данных любой длины, которую вы хотите, вам просто нужно убедиться, что вы назначаете результаты существующему вектору соответствующего размера.

Эта строка вызывает проблему, потому что

stackloss$predict1[-1] <- predict(stackloss.lm, newdata)

потому что вы не можете назначить и подмножество несуществующего вектора одновременно. Это тоже не работает

dd <- data.frame(a=1:3)
dd$b[-1]<-1:2

Длина stackloss, которую вы использовали для соответствия модели, всегда будет одинаковой длины, поэтому повторное присвоение новых значений этому data.frame не имеет смысла. Если вы хотите использовать меньший набор данных для прогнозирования, это нормально.

stackloss.lm = lm(stack.loss ~  Air.Flow + Water.Temp + Acid.Conc.,data=stackloss)

newdata = head(data.frame(Air.Flow=stackloss$Air.Flow, Water.Temp= stackloss$Water.Temp, Acid.Conc.=stackloss$Acid.Conc.),5)

predict(stackloss.lm, newdata)
       1        2        3        4        5 
38.76536 38.91749 32.44447 22.30223 19.71165 

Так как результат имеет такое же количество значений, сколько newdata имеет строк (n=5), имеет смысл присоединить их к newdata. Не имеет смысла присоединяться к stackloss, потому что у него другое количество строк (n=21).

newdata$predcit1 <- predict(stackloss.lm, newdata)
person MrFlick    schedule 14.05.2015
comment
Спасибо за ответ. У меня есть продолжение, что, если я добавлю, скажем, новые строки в исходный набор данных, могу ли я по-прежнему использовать функцию прогнозирования? - person jbest; 14.05.2015
comment
Да. Я не понимаю, почему бы и нет. - person MrFlick; 14.05.2015
comment
но будет ли он автоматически предсказывать yhat новых строк. Спасибо - person jbest; 15.05.2015