【问题标题】:Scenario development with GAM models使用 GAM 模型进行场景开发
【发布时间】:2019-04-02 20:38:00
【问题描述】:

我正在使用 R 中的 mgcv::gam 模型来生成预测,其中时间 (year) 和结果变量 (out) 之间的关系会发生变化。例如,在一种情况下,我想强制时间以线性方式影响结果变量,在另一种情况下以略微减少的方式,在另一种情况下,我想指定时间-结果交互的特定斜率。我不确定如何强制预测以特定方式处理时间和结果变量之间的交互:

res <- gam(out ~ s(time) + s(GEOID, bs='re'), data = df, method = "REML")
pred <- predict(gam, newdata = ndf, type="response", se=T)

【问题讨论】:

    标签: r prediction gam


    【解决方案1】:

    timeout 之间没有交互;这里timeout 有潜在的非线性影响。

    我们是在谈论尝试为time 的功能强制使用某些形状吗?如果是这样,您将需要估计不同的模型;如果您想要线性效果,请使用time

    res_lin <- gam(out ~ time + s(GEOID, bs='re'), data = df, method = "REML")
    

    并查看形状约束的 p 样条线以强制执行单调性或凹/凸关系。

    scam 包具有这些类型的约束,并使用带有 GCV 平滑度选择的 mgcv 来拟合形状约束模型。

    至于为时间的线性效应指定特定斜率,我认为您需要在模型中包含time 作为偏移量。所以说你想要的斜率是 0.5 我认为你需要做 + offset(I(0.5*time)) 因为偏移量的系数定义为 1。我会仔细检查一下,因为我可能在这里搞砸了我的想法。

    【讨论】:

    • 这真的很有帮助——我真正想做的是 (1) 估计最合适的历史模型,然后 (2) 在未来的预测中强制时间效应具有线性形状 (所以当使用 predict.gam()) - 不确定这是否可能?谢谢!
    • 另外,您可以添加缩放向量而不是单个值吗?再次感谢。
    • 我不知道你所说的缩放向量是什么意思。对于第一位,请查看 b 样条基 ?smooth.construct.bs.smooth.spec 的帮助,因为您需要使用 b 样条基进行估计,并适当设置惩罚范围以包括预测期。
    • 谢谢,我会调查的。缩放向量 - 所以不是将整个时间向量缩放 0.5,而是将时间向量的每个元素缩放相同长度的缩放向量。 length(scale_vector) = length(time) - 所以用 scale_vector 中的一个元素缩放向量中的每个元素。
    猜你喜欢
    • 2015-06-21
    • 1970-01-01
    • 2021-09-13
    • 2011-09-22
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 2016-11-04
    • 2021-07-15
    相关资源
    最近更新 更多