Прогнозирование с использованием полиномиальной логистической регрессии 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 соответственно.

Другие вопросы по тегам