0

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

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

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即使它过去为我返回了正确的值,我也会得到。我意识到这不是一个很好的可重复示例,但我无法提供有关我的实际数据的详细信息。我感谢任何帮助。

4

1 回答 1

1

解决方案:在我原来的问题中,不是上面的玩具示例,我glm()summary(). 解决方案是确保我的object论点predict.glm是一般线性模型本身,而不是总结。我一直很粗心,并认为摘要glm将是与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

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

于 2019-07-12T17:06:40.593 回答