GLM结合了结果

时间:2014-08-01 07:47:06

标签: r glm

我正在编写一个Sweave文件,以便更清楚地呈现glm()个结果。 glm用于计算保险的保费价格。通常使用2个单独的glm s。一个用于索赔频率,一个用于索赔严重性。根据分类,为了得到最终价格,我必须将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中是否有任何功能/包可以让我这样做?如果没有,还有其他方式吗? 目前我唯一的想法是为因子级别使用自定义标签,然后在它们之间使用字符串比较。

1 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是创建用于以特定于模型的方式转换数据集的代码,然后在计算预测之前调用它。这很容易适用于模型涉及不同变量子集或完全具有不同形式的情况。由于这是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
}

这可以变成一个单行,但这可能会比它所阐明的更加混淆。