【问题标题】:How do I aggregate data for glm() function in R如何在 R 中聚合 glm() 函数的数据
【发布时间】:2020-09-03 06:28:54
【问题描述】:

我正在尝试使用 glm 估计保险定价的相关性。我在 CASdatasets 中使用“freMPTL”。 ClaimNb 是我的回应,Exposure 是我的 Exposure,我对 ClaimNb/Exposure 感兴趣。

将较大的类别(例如驾驶员年龄(18-99 岁))划分为较小的前组后。 5 个类别,我将数据分组使用

data_grouped_freq <- data_freq4 %>%
  group_by(Power, Brand, Gas, Region, CarAge_cat, DriverAge_cat, Density_cat) %>%
  summarise(ClaimNb  = sum(ClaimNb),
            Exposure = sum(Exposure))

之后我使用命令

model_freq <- glm(ClaimNb ~ Power + Brand + Gas + Region + CarAge_cat + DriverAge_cat + Density_cat,
 family = poisson, data = data_grouped_freq, weights = Exposure)
    summary(model_freq)

绘制一个glm。结果就是

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-255.241    -2.634    -0.929    -0.202   199.629  

Coefficients:
                                          Estimate Std. Error z value Pr(>|z|)    
(Intercept)                              4.8629082  0.0011698 4156.99   <2e-16 ***
Powerd                                  -0.4660131  0.0014613 -318.90   <2e-16 ***
Powere                                  -0.7155983  0.0013723 -521.44   <2e-16 ***
Powerg                                  -0.4131892  0.0010905 -378.89   <2e-16 ***
...
RegionPoitou-Charentes                  -2.3903228  0.0052288 -457.14   <2e-16 ***
CarAge_cat1                             -1.2547176  0.0021645 -579.68   <2e-16 ***
DriverAge_cat1                          -0.7913098  0.0022811 -346.90   <2e-16 ***
DriverAge_cat2                          -1.2886084  0.0024688 -521.96   <2e-16 ***

我知道这是错误的,因为 DriverAge_cat1 具有更高的 ClaimNb/Exposure 比率,因此应该导致相对性>1,而 exp(-18.9082) 不是。 (cat1 的 ClaimNb/Exposure 比率为 0.134,而 DriverAge_cat1 的参考组为 0.071)

有人可以解释我做错了什么吗?是不是有很多类别的 0 声明导致问题?也许我处理错了重量? 7 个变量共有 14661 个单元格。

【问题讨论】:

  • 尝试用你的结果和DriverAge_cat1拟合一个单变量模型。如果这是您所期望的(即相对性大于 1),那么您的模型可能会正常工作,并且多变量模型中的其他变量解释了效应大小的负方向。也就是说,只有在不考虑其他变量的情况下,DriverAge_cat1 才会是肯定的。
  • @JustGettingStarted,在尝试之后它仍然给了我 DriverAge_cat1 的负值,即使没有考虑其他变量,所以我可能做错了什么。不过还是谢谢你的建议。

标签: r regression aggregate glm


【解决方案1】:

在用于创建泊松率模型的 GLM 代码中,您应该使用参数 offset -

model_freq <- glm(ClaimNb ~ Power + Brand + Gas + Region + CarAge_cat + DriverAge_cat + Density_cat,
 family = poisson, data = data_grouped_freq, offset= log(Exposure))

以上修改后的代码应该可以解决您的问题。

【讨论】:

    猜你喜欢
    • 2014-04-23
    • 2020-05-23
    • 2014-01-04
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2023-03-27
    相关资源
    最近更新 更多