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.glm
的 object
参数是一般线性模型本身,而不是摘要。我一直粗心大意,并假设 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
感谢那些花时间尝试解决我的问题的人。
我想使用 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.glm
的 object
参数是一般线性模型本身,而不是摘要。我一直粗心大意,并假设 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
感谢那些花时间尝试解决我的问题的人。