【问题标题】:How to score uncenterized term-wise prediction using predict.glm()如何使用 predict.glm() 对未中心化的术语预测进行评分
【发布时间】:2021-01-13 08:27:07
【问题描述】:

我正在构建一个简单的 GLM 模型,如下所示:

model1 = glm(y ~ x1 + x2 + x3, data=train)

我使用 predict 函数对新预测进行评分

newpred = predict(object=model1, newdata= validation, type = 'term')

通过指定选项type = 'term',我希望获得单个术语的预测(即 beta1 * x1、beta2 * x2 等)。然而,事实证明type = 'term' 选项将返回以 0 为中心的列值居中的“居中”预测(如下所述:What does predict.glm(, type="terms") actually do?)

我的问题是,是否有一种简单的方法可以获得普通的术语预测而不是中心化的术语预测。该模型有分类变量,我希望每个分类变量有一个术语(与type = 'term' 选项的输出相同),而不是一系列虚拟指标变量。

【问题讨论】:

    标签: r glm


    【解决方案1】:

    如果你的模型真的那么简单(例如,只有简单的连续预测变量)那么我觉得

    X <- model.matrix(formula(model), data=train)
    sweep(X, coef(model), MARGIN=2, FUN="*")
    

    应该可以(我没有测试过); predict(.,"terms") 的许多复杂内部机制用于收集属于同一“项”的列(例如,一组多项式或样条系数)。

    【讨论】:

    • 这正是我的奋斗目标。模型没那么简单。我有许多分类变量,它们在设计矩阵中表示为一系列指标变量。这正是我想要实现的目标:我希望每个预测变量都有一个术语(而不是 n-1 个虚拟指标)。我会在我原来的帖子中澄清。
    • 好的,你必须重新发明predict 函数的一个子集。我可以提供帮助,但如果你能展示一个可重现的例子,它会容易得多(只要它至少有两个不同的因子预测因子 > 2 水平,就足以展示这个想法)
    • 感谢您的好意。我找到了解决我的问题的变通方法。仍然令人困惑的是 predict() 函数将计算中心化术语估计(并且没有记录)而不是非中心化估计
    猜你喜欢
    • 2014-07-19
    • 1970-01-01
    • 2015-07-14
    • 2017-05-21
    • 1970-01-01
    • 2020-04-01
    • 2018-05-09
    • 2018-09-26
    • 2023-04-05
    相关资源
    最近更新 更多