在R中使用mboost多项Logistic回归进行预测

时间:2015-07-23 07:32:32

标签: r logistic-regression multinomial


我正在尝试使用R中的mboost包来应用多项Logistic回归模型。我在网上找到了这个例子,但我在预测函数中添加了“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)中的错误:选择了未定义的列

我只是将预测中的虹膜数据重新用作测试,但之前有没有人遇到过这个问题?

1 个答案:

答案 0 :(得分:3)

您无法将predict函数用于新数据的原因是您在buser()中使用了预定义的设计和惩罚矩阵,即X0K0 。这些不是新数据集的一部分,因此在构建用于预测的新设计矩阵时不可用。

Sarah Brockhaus在github上发布solution,用buser替换bols。为此,需要将数据集转换为列表,并将新的dummy添加到此列表中。如果真的想用新数据进行预测,就需要保持dummy不变。另请参阅github上的帖子。

[编辑]正如@ Lorcan-Treanor在他的评论中提到的,bols所需的因子数量并不总是等于2。这里它实际上是nlevels(iris$Species) - 1,即比结果中的类少一个因子水平。我也相应地在github上更新了我的帖子。