【问题标题】:How to predict GAM with smooth terms and basic functions with independent data?如何用独立数据预测具有平滑项和基本函数的 GAM?
【发布时间】:2021-01-12 01:07:53
【问题描述】:

我尝试使用 k 个基函数来拟合 GAM 模型,其中包含天数(tt 变量)和滞后预测变量 (k=2) 之间的交互。

library(mgcv)
# Example data
data=data.frame(
tt=1:107, # days
pol=(sample.int(101,size=107,replace=TRUE)-1)/100,
at_rec=sample.int(101,size=107,replace=TRUE),
w_cas=sample.int(2000,size=107,replace=TRUE)
)

# model
gam1<-gam(pol ~ s(tt, k = 10) + 
            s(tt, by = Lag(at_rec, k = 2), k = 10)+
            s(tt, by = Lag(w_cas, k = 2), k = 10), 
          data=data,method="GACV.Cp")
summary(gam1)

# while making newdata
> newdata=data.frame(tt=c(12,22),at_rec=c(44,34), w_cas=c(2011,2455))
# and prediction
> predict(gam1,newdata=newdata,se.fit=TRUE)

我收到了这个错误 “PredictMat(object$smooth[[k]], data) 中的错误:无法通过变量找到”

如何用新数据预测这样的模型?

【问题讨论】:

    标签: r spline smoothing gam


    【解决方案1】:

    我 99.9% 确定 predict 方法找不到 by 术语,因为它们是变量的函数,它正在寻找与您提供的名称完全相同的变量:“Lag(at_rec, k = 2 )”。

    尝试将这些滞后变量作为显式变量添加到您的数据框中并重新调整模型,它应该可以工作:

    data <- transform(data,
                      lag_at_rec = Lag(at_rec, k=2),
                      lag_w_cas = Lag(w_cas, k=2))
    gam1 <- gam(pol ~ s(tt, k = 10) + 
                  s(tt, by = lag_at_rec, k = 10)+
                  s(tt, by = lag_w_cas, k = 10), 
                data = data, method = "GACV.Cp")
    

    【讨论】:

    • 感谢您的回复。那行得通。 IE。我应该先应用 Lag 然后拟合模型。 Stackoverflow 不会让我将您的答案标记为有用,因为我没有足够的声誉。如果您知道另一种方式我可以如何将您的答案标记为有用 - 请告诉我。最好的问候!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2021-01-08
    相关资源
    最近更新 更多