【问题标题】:GAM distributed lag model with factor smooth interaction (by variable)具有因子平滑交互作用的 GAM 分布式滞后模型(按变量)
【发布时间】:2023-02-08 01:40:36
【问题描述】:

我正在尝试比较过去 60 年植物两个亚群的气候响应(因子变量 subgroups 具有 2 个级别)。在同一块地块上生长的两个子组的响应以周长增长来衡量。由于气候数据平均温度 (tmean) 和平均降水量 (precmean) 可用。 我使用 mgcvgam() 制定了一个分布式滞后模型来检验假设,即植物亚群之间的气候反应不同:

climate_model <- gam(growth ~ te(tmean, lag, b = subgroups) +
                                    te(precmean, lag, , b = subgroups) +
                                    te(tmean, precmean, lag, , b = subgroups) ,
                                  data = plant_data)

plant_data 是一个列表,其中包含 tmeanpreclag 作为单独的数字矩阵,subgroups 作为区分子组 A 和 B 的因子变量,以及测量的数字 growth 作为向量。

但是,问题是因子 by 变量不能与来自 plant_data 的矩阵参数一起使用。错误消息如下所示:

Error in smoothCon(split$smooth.spec[[i]], data, knots, absorb.cons, scale.penalty = scale.penalty,  : 
  factor `by' variables can not be used with matrix arguments.

我想知道是否有办法将因子变量 subbgroups 包含到分布式滞后模型中,以便可以对因子的两个级别进行比较。

我已经尝试为两个级别运行两个单独的滞后模型亚群.这很好用。但是,我无法真正比​​较两个模型的预测,因为平滑的拟合和参数不同。此外,通过这种方式,两个子组的气候响应被视为完全独立。然而事实并非如此。

【问题讨论】:

    标签: r matrix gam mgcv contrast


    【解决方案1】:

    来自?mgcv::linear.functional.terms

    该机制可用于采用因子参数的随机效应平滑,方法是使用技巧创建一个二维因子数组。只需创建一个因子向量,其中包含首尾堆叠的因子矩阵的列(列主要顺序)。然后重置此向量的维度以创建适当的二维数组:第一个维度应该是响应数据的数量,第二个维度应该是所需因子矩阵的列数。您不能使用 matrix 或 data.matrix 来设置所需的因子水平矩阵。请参见下面的示例:

    ## set up a `factor matrix'...
    fac <- factor(sample(letters,n*2,replace=TRUE))
    dim(fac) <- c(n,2)
    

    您不能创建一个艰难的因子矩阵,但可以创建一个因子并在事后修改 dims。

    【讨论】:

      猜你喜欢
      • 2020-12-10
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多