广义加性模型 (GAM) 中的自相关
Autocorrelation in Generalized Additive Models (GAM)
我有一个关于河流水温、气温和流速的时间序列数据集。我创建了一个 GAM 模型来根据气温和流量预测水温。但是我没有考虑数据集中的自相关。预测变量和因变量中的每个数据点都不是独立的(即第 2 天的气温与第 1 天的气温无关)。
有人可以帮助我编写适当的代码以在我的模型中包含某种形式的自相关度量 (AR1?)。据我了解,我需要使用 gamm()
函数而不是 gam()
函数?
我现在的模型是这样的:
model <- gam(W.T.Mean ~ s(T.Mean) +s(Discharge), data = Pre_regulation_temp)
W.T.Mean 是日平均水温。
T.Mean 是日平均气温。
流量是平均日流量
提前致谢
其实你有几个选择
gamm()
和 correlation = corAR1(form = ~ time)
(其中 time
是变量,为您提供均匀间隔观察的时间顺序
bam()
并指定 AR(1) 参数的已知值 rho
。
也就是说,推理的问题是以 估计模型(即协变量的影响)为条件,响应是独立且同分布的。换句话说,我们期望模型的残差是独立的(不是自相关的)。如果气温对水温的瞬时(平滑)影响足以使模型残差保持独立,那么您不一定需要做任何事情来校正模型。
但是,如果估计的气温平滑效应非常不稳定,这可能表明估计的效应受到数据中自相关的影响。我希望空气和水温之间的关系相对简单,在低端和高端都有饱和效应——您不能使水温低于 0,但空气温度可以低于 0,同样在高端,空气温度增加一个单位,水温也不会增加。因此,检查估计的平滑度,看看效果是否比您预期的更复杂。如果是,您应该尝试使用 gamm()
进行拟合,看看它如何改变估计的平滑度。如果没有太大区别,那么我会回到原来的 gam()
并查看模型残差的自相关函数,如果这表明自相关存在问题,那么您要么需要通过将术语添加到您的 gam()
模型或切换回 gamm()
并指定 correlation = ....
并将其用于推理。
其他更复杂的选择是使用 brms 包,它也可以估计具有 AR 或 ARMA 相关结构的模型。
我有一个关于河流水温、气温和流速的时间序列数据集。我创建了一个 GAM 模型来根据气温和流量预测水温。但是我没有考虑数据集中的自相关。预测变量和因变量中的每个数据点都不是独立的(即第 2 天的气温与第 1 天的气温无关)。
有人可以帮助我编写适当的代码以在我的模型中包含某种形式的自相关度量 (AR1?)。据我了解,我需要使用 gamm()
函数而不是 gam()
函数?
我现在的模型是这样的:
model <- gam(W.T.Mean ~ s(T.Mean) +s(Discharge), data = Pre_regulation_temp)
W.T.Mean 是日平均水温。 T.Mean 是日平均气温。 流量是平均日流量
提前致谢
其实你有几个选择
gamm()
和correlation = corAR1(form = ~ time)
(其中time
是变量,为您提供均匀间隔观察的时间顺序bam()
并指定 AR(1) 参数的已知值rho
。
也就是说,推理的问题是以 估计模型(即协变量的影响)为条件,响应是独立且同分布的。换句话说,我们期望模型的残差是独立的(不是自相关的)。如果气温对水温的瞬时(平滑)影响足以使模型残差保持独立,那么您不一定需要做任何事情来校正模型。
但是,如果估计的气温平滑效应非常不稳定,这可能表明估计的效应受到数据中自相关的影响。我希望空气和水温之间的关系相对简单,在低端和高端都有饱和效应——您不能使水温低于 0,但空气温度可以低于 0,同样在高端,空气温度增加一个单位,水温也不会增加。因此,检查估计的平滑度,看看效果是否比您预期的更复杂。如果是,您应该尝试使用 gamm()
进行拟合,看看它如何改变估计的平滑度。如果没有太大区别,那么我会回到原来的 gam()
并查看模型残差的自相关函数,如果这表明自相关存在问题,那么您要么需要通过将术语添加到您的 gam()
模型或切换回 gamm()
并指定 correlation = ....
并将其用于推理。
其他更复杂的选择是使用 brms 包,它也可以估计具有 AR 或 ARMA 相关结构的模型。