predict.glm 在返回 NULL 的有效模型上

predict.glm on a valid model returning NULL

我想使用 predict.glm 到 return 的预测,使用与训练原始模型相同的数据集,但我的结果一直是 NULL。我有一个有效的模型,没有因缺失值而删除的行。

我的代码有很多变量,项目本质上有点敏感,所以我尝试使用玩具示例重现我的问题。但是,由于我不确定是什么导致了我的问题,我无法使用 glm.predict(object, type = "response) 重现任何 NULL 输出。我希望有此问题经验的人能够推荐解决方案。

library(MASS)
library(tidyverse)


mod1 <- glm(status ~ 
              state + sex + diag + death + T.categ + age,
            family = "binomial", data = Aids2)
#> Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

#Below is caused because `death` has values that yield a status of "D" 100% of #time

head(predict.glm(mod1, type = "response"))
#> 1 2 3 4 5 6 
#> 1 1 1 1 1 1

#removing `death` as predictor

mod2 <- glm(status ~ 
              state + sex + diag + T.categ + age,
            family = "binomial", data = Aids2)
head(predict.glm(mod2, type = "response"))
#>         1         2         3         4         5         6 
#> 0.4690554 0.4758433 0.9820719 0.9884703 0.9292926 0.9333818

我不确定什么条件会导致上述调用产生 NULL 作为 predict.glm 的结果,正如我指定的那样。代码中的结果是我希望得到的,但在我的实际项目中,我得到了 NULL,即使它在过去对我有 returned 正确的值。我意识到这不是一个很好的可重现示例,但我无法提供有关我的实际数据的详细信息。感谢任何帮助。

解决方案: 在我原来的问题中,不是上面的玩具示例,我用 summary() 包装了 glm()。解决方案是确保我对 predict.glmobject 参数是一般线性模型本身,而不是摘要。我一直粗心大意,并假设 glm 的摘要等同于 class 到 glm 本身。

#same as mod1, but wrapping in summary()

mod3 <- summary(glm(status ~ 
                      state + sex + diag + death + T.categ + age,
                    family = "binomial", data = MASS::Aids2))
#> Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

head(predict.glm(mod3, type = "response"))
#> NULL

mod4 <- summary(glm(status ~ 
                      state + sex + diag + T.categ + age,
                    family = "binomial", data = MASS::Aids2))

head(predict.glm(mod4, type = "response"))
#> NULL

感谢那些花时间尝试解决我的问题的人。