我正在尝试使用 R 中的 mboost 包来应用多项逻辑回归模型。我在网上找到了这个示例,但我在预测函数中添加了“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
(newdata, nm) 中出现错误:选择了未定义的列
我只是在预测中重新使用了虹膜数据作为测试,但以前有人遇到过这个问题吗?
最佳答案
无法对新数据使用predict
函数的原因是您在buser()
中使用了预定义的设计和惩罚矩阵,即 X0
和 K0
。这些不是新数据集的一部分,因此在构建新的预测设计矩阵时不可用。
莎拉·布罗克豪斯 (Sarah Brockhaus) 发帖 solution在 github 上,将 buser
替换为 bols
。为此,需要将数据集转换为列表并将新的虚拟
添加到该列表。如果确实想用新数据进行预测,则需要保持此虚拟数据不变。另请参阅我在 github 上的帖子.
[编辑] 正如 @Lorcan-Treanor 在他的评论中提到的,bols
所需的因子数量并不总是等于 2。这里它实际上是 nlevels(iris$Species) - 1,即比结果中的类别少一个因子级别。我还相应地更新了我在 github 上的帖子。
关于r - 在 R 中使用 mboost 多项式逻辑回归进行预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31580891/