如何在 GAM 中包含交互项?

机器算法验证 r 时间序列 数据可视化 广义加法模型
2022-01-29 03:13:40

以下代码评估两个时间序列之间的相似性:

set.seed(10)
RandData <- rnorm(8760*2)
America <- rep(c('NewYork','Miami'),each=8760)

Date = seq(from=as.POSIXct("1991-01-01 00:00"), 
           to=as.POSIXct("1991-12-31 23:00"), length=8760)

DatNew <- data.frame(Loc = America,
                     Doy = as.numeric(format(Date,format = "%j")),
                     Tod = as.numeric(format(Date,format = "%H")),
                     Temp = RandData,
                     DecTime = rep(seq(1, length(RandData)/2) / (length(RandData)/2),
                                   2))
require(mgcv)
mod1 <- gam(Temp ~ Loc + s(Doy) + s(Doy,by = Loc) +
  s(Tod) + s(Tod,by = Loc),data = DatNew, method = "ML")

在这里,gam用于评估纽约和迈阿密的温度在一天中的不同时间与(两个地点的)平均温度有何不同。我现在遇到的问题是我需要包含一个交互项,该项显示每个位置的温度在一天中的不同日子里是如何变化的。我最终希望将所有这些信息显示在一个图表上(针对每个位置)。因此,对于迈阿密,我希望有一个图表来显示一天中不同时间和一年中不同时间的温度与平均值的变化(3d 图?)

2个回答

对于两个连续变量,您可以使用:

mod1 <- gam(Temp ~ Loc + s(Doy, bs = "cc", k = 5) + 
                         s(Doy, bs = "cc", by = Loc, k = 5, m = 1) + 
                         s(Tod, bs = "cc", k = 5) + 
                         s(Tod, bs = "cc", by = Loc, k = 5, m = 1) +
                         te(Tod, Doy, by = Loc, bs = rep("cc",2)),
            data = DatNew, method = "ML")

然后应该将更简单的模型嵌套在上面更复杂的模型中。那个更简单的模型是:

mod0 <- gam(Temp ~ Loc + s(Doy, bs = "cc", k = 5) + 
                         s(Doy, bs = "cc", by = Loc, k = 5, m = 1) + 
                         s(Tod, bs = "cc", k = 5) + 
                         s(Tod, bs = "cc", by = Loc, k = 5, m = 1),
            data = DatNew, method = "ML")

这里注意两点:

  1. 说明了每个平滑器的基础类型。在这种情况下,我们希望 Temp 在 23:59 和 00:00 之间不存在不连续性,Tod也不存在于Doy == 1和之间Doy == 365.25因此循环三次样条是合适的,此处通过 表示bs = "cc"
  2. 基础维度明确说明(k = 5)。te()这与术语中每个平滑的默认基础维度相匹配。

这些特性共同确保了更简单的模型真正嵌套在更复杂的模型中。

有关更多信息?gam.models,请参阅mgcv

“gam”中的“a”代表“additive”,表示没有交互,所以如果你适合交互,你就真的不再适合 gam 模型了。

也就是说,有一些方法可以在游戏中的加法项中获得一些交互项,您已经通过使用by参数来使用其中之一s您可以尝试将其扩展为使参数by成为具有 doy 或 tod 函数(sin,cos)的矩阵。您也可以在允许交互的常规线性模型中拟合平滑样条曲线(这不会像 gam 那样提供反向拟合,但仍然有用)。

您也可以将投影追踪回归视为另一种拟合工具。黄土或更多参数模型(带有 sin 和/或 cos)也可能有用。

决定使用什么工具的一部分是你试图回答什么问题。您是否只是想找到一个模型来预测未来的日期和时间?您是否正在尝试测试特定预测变量在模型中是否重要?您是否试图了解预测变量与结果之间关系的形状?还有什么?