R中泊松的预测值

Predicted values of a poisson in R

我试图根据年龄和性别找到车祸的预测值,并最终调整到人口。

我的数据是 (df):

df <- dplyr::tibble(
  city = c("a", "a", "b", "b", "c", "c"), 
  sex = c(1,0,1,0,1,0),
  age = c(1,2,1,2,1,2),
  population = c(100, 123, 189, 234, 221, 435),
  accidents = c(87, 98, 79, 43,45,65)
)

我的代码:

library(tidyverse)
library(ggeffects)

poisson<-glm(accidents~sex+age,family="poisson",data=df)

df<-df%>%
  mutate(acc_pred=predict(poisson))


输出:

city    sex age population  accidents   acc_pred
a   1   1   100 87  4.36
a   0   2   123 98  4.43
b   1   1   189 79  4.21
b   0   2   234 43  4.25
c   1   1   221 45  4.26
c   0   2   435 65  3.93

我做错了什么?

Poisson glm 使用 log link 函数,默认情况下 predict.glm 方法 returns 预测不应用反 link 函数。您要么需要在 predict 中使用 type = "response",这将对预测调用反函数 link,以便为您提供与输入数据相同单位的预测,或者等效地,因为反函数link 函数本质上就是 exp,您可以对 predict 的结果求幂。

因此您可以执行以下任一操作:

df %>%
  mutate(acc_pred=predict(poisson, type = 'response'))
#>   city sex age population accidents acc_pred
#> 1    a   1   1        100        87 70.33333
#> 2    a   0   2        123        98 68.66667
#> 3    b   1   1        189        79 70.33333
#> 4    b   0   2        234        43 68.66667
#> 5    c   1   1        221        45 70.33333
#> 6    c   0   2        435        65 68.66667

df %>%
  mutate(acc_pred = exp(predict(poisson)))
#>   city sex age population accidents acc_pred
#> 1    a   1   1        100        87 70.33333
#> 2    a   0   2        123        98 68.66667
#> 3    b   1   1        189        79 70.33333
#> 4    b   0   2        234        43 68.66667
#> 5    c   1   1        221        45 70.33333
#> 6    c   0   2        435        65 68.66667