Прогнозирование с использованием полиномиальной логистической регрессии mboost в R
Я пытаюсь использовать пакет mboost в R для применения модели многочленной логистической регрессии. Я нашел этот пример в сети, но добавил функцию "newdata = iris" в функцию прогнозирования, чтобы увидеть, как формула прогнозирования работает в mboost для новых данных. Я получаю ошибку однако. Сначала вот код:
library(mboost)
### fitting multinomial logit model via a linear array model
X0 <- K0 <- diag(nlevels(iris$Species) - 1)
colnames(X0) <- levels(iris$Species)[-nlevels(iris$Species)]
mlm <- mboost(Species ~ bols(Sepal.Length, df = 2) %O%
buser(X0, K0, df = 2), data = iris,
family = Multinomial())
round(predict(mlm, type = "response", newdata = iris), 2)
Я получаю следующую ошибку:
Ошибка в [.data.frame
(новые данные, нм): выбраны неопределенные столбцы
Я просто повторно использовал данные радужной оболочки в прогнозе в качестве теста, но сталкивался ли кто-нибудь с этой проблемой раньше?
1 ответ
Причина, по которой вы не можете использовать predict
Функция с новыми данными заключается в том, что вы используете предопределенный дизайн и штрафные матрицы в buser()
т.е. X0
а также K0
, Они не являются частью нового набора данных и, следовательно, недоступны при построении новых матриц проектирования для прогнозирования.
Сара Брокгауз постет решение на github, которое заменяет buser
с bols
, Для этого необходимо преобразовать набор данных в список и добавить новый dummy
к этому списку. Если кто-то действительно хочет прогнозировать с новыми данными, нужно сохранить это dummy
нетронутым. Смотрите также мой пост на github.
[Править] Как @Lorcan-Treanor упоминает в своих комментариях, количество факторов, необходимых для bols
не всегда равен двум. Вот оно на самом деле nlevels(iris$Species) - 1
т. е. на один факторный уровень меньше, чем у нас есть классы в результате. Я также обновил свой пост на GitHub соответственно.