У меня есть линейная модель, где одна из независимых переменных является фактором и где я пытаюсь сделать прогнозы на наборе данных, который содержит новый факторный уровень (факторный уровень, 't в наборе данных, на котором оценивалась модель). Я хочу иметь возможность делать прогнозы для наблюдений с новым уровнем фактора, вручную указывая коэффициент, который будет применяться к фактору. Например, предположим, что я оцениваю ежедневные объемы продаж для трех типов магазинов, и я ввожу четвертый тип хранилища в набор данных. У меня нет исторических данных, но я могу предположить, что он будет вести себя как некоторая взвешенная комбинация других магазинов, для которых у меня есть модельные коэффициенты.Коэффициент ввода вручную для нового уровня фактора при прогнозировании
Если я попытаюсь применить predict.lm()
к новым данным, я получу сообщение о том, что фактор имеет новые уровни (это имеет смысл).
df <- data.frame(y=rnorm(100), x1=factor(rep(1:4,25)))
lm1 <- lm(y ~ x1, data=df)
newdata <- data.frame(y=rnorm(100), x1=factor(rep(1:5,20)))
predict(lm1, newdata)
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) :
factor x2 has new levels 5
Я мог бы сделать предсказание вручную, просто умножив коэффициенты на отдельные столбцы в data.frame. Однако это громоздко, учитывая, что в реальной модели, с которой я работаю, есть много переменных и терминов взаимодействия, и я хочу иметь возможность легко циклически выполнять различные спецификации модели, меняя формулу модели. Есть ли способ для меня существенно добавить новый коэффициент к объекту модели, а затем использовать его для составления прогнозов? Если нет, есть ли другой подход, который менее громоздкий, чем установка всего шага прогнозирования вручную?
'? Update' может показать вам, как манипулировать формулой программно, не прибегая к использованию строк. – dardisco
Немного больше о том, как вы хотите предсказать для своего нового уровня, было бы хорошо. «Некоторая взвешенная комбинация» не очень точная. –
Если вы хотите попробовать это на многих моделях и с разными значениями коэффициентов для вашего дополнительного фактора, вы можете написать функцию для этого. Я бы попытался извлечь «model.matrix» и «коэффициенты» из объекта lm, вставить коэффициент и коэффициент фактора, а затем использовать умножение матрицы для получения прогнозов. – Edwin