【问题标题】:GLM combining resultsGLM 组合结果
【发布时间】:2014-08-01 07:47:05
【问题描述】:

我正在编写一个 Sweave 文件,以便更清晰地展示 glm() 结果。 glm 用于计算保险的保费价格。通常为此使用 2 个单独的 glms。一个用于索赔频率,一个用于索赔严重性。为了得到最终价格,我必须根据分类乘以 2 个模型的系数估计值。如果两个模型具有相同水平的相同自变量,则问题是微不足道的。我可以将两者的拟合值相乘,就完成了。当因素具有不同的水平时,就会出现问题,这是将它们合并以获得更好结果的原因。假设我有 3 个级别 0-25,25-50,50-110 的频率因素年龄和 2 个级别 0-25,25-110 的严重程度。我想在以下意义上组合要相乘的拟合值:

Frequency      Severity
0-25              0-25
25-50            25-110
50-110          25-110

换句话说,只有当类别在同一范围内时,才应将拟合值相乘。这也适用于非数字分类。比如

Frequency       Severity
a                     ab
b                     ab
c                     c

R 中是否有任何函数/包可以让我这样做?如果没有,还有什么其他方式存在? 目前我唯一的想法是对因子级别使用自定义标签,然后在它们之间使用字符串比较。

【问题讨论】:

    标签: r glm


    【解决方案1】:

    执行此操作的最佳方法是创建代码以以特定于模型的方式转换数据集,然后在计算预测之前调用它。这很容易概括为您的模型涉及不同变量子集或完全不同形式的情况。由于这是 R 而不是 SAS,因此您可以在一个函数中完成所有操作。

    predict_combined <- function(glm.cf, glm.cs, newdata)
    {
        newdata.cf <- within(newdata, {
            age <- cut(age, c(0, 25, 50, 110))
            ...
            ...
        })
    
        newdata.cs <- within(newdata, {
            age <- cut(age, c(0, 25, 110))
            ...
            ...
        })
    
        pred.cf <- predict(glm.cf, newdata.cf, type="resp")
        pred.cs <- predict(glm.cs, newdata.cs, type="resp")
        pred.cf * pred.cs
    }
    

    这可以变成一个单行,但这可能会比它解释的更模糊。

    【讨论】:

    • 感谢您的回答,但我不确定我是否理解正确。使用您编写的代码,当我只想从两个模型中获得与年龄相关的拟合组合一样多的预测时,我仍然会得到与数据中的行数相同的预测数。例如在年龄示例中,我只想要 3 个预测。我感兴趣的是结合这 2 个模型我将获得的 3 种不同的保费。因此,作为输出,我想要一个具有 3 列的数据框。前两个是每个模型的因子水平,最后一列是适当的溢价。
    • 您是否以不同的方式计算频率和严重程度的分数?
    猜你喜欢
    • 2018-06-02
    • 1970-01-01
    • 2012-04-12
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多