mgcv::gam, 名称错误 (dat) <- 对象$术语 : 属性 'names' [2] 与向量 [1] 的长度相同



我想使用GAM函数在mgcv包中运行一个层次GAM。我在brms中使用了相同形式的模型,没有问题,我最终会在brms上重新运行相同的模型,但提交摘要的截止日期是周日,所以我想在mgcv中尝试该模型,以获得更快的结果。

我的公式:

f = MDS1 ~ 1 + exposed + s(YEAR,bs = "tp")+ s(LEVEL, bs = "tp") +
t2(YEAR, SITE, bs = c("tp","re")) + s(INTERTIDAL_TRANSECT, bs = "re",
m = 1)

我的数据:

Classes ‘data.table’ and 'data.frame':  3992 obs. of  9 variables:
$ unique_id          : chr  "Babb's Cove-1-0-1988" "Babb's Cove-1-0-1989" "Babb's Cove-1-0-1990" "Babb's Cove-1-0-1992" ...
$ MDS1               : num  -0.607 -0.607 -0.607 -0.607 -0.607 ...
$ MDS2               : num  0.19 0.19 0.19 0.19 0.19 ...
$ MDS3               : num  0.36 0.36 0.36 0.36 0.36 ...
$ SITE               : chr  "Babb's Cove" "Babb's Cove" "Babb's Cove" "Babb's Cove" ...
$ INTERTIDAL_TRANSECT: Factor w/ 21 levels "1","2","5","7",..: 1 1 1 1 1 1 1 1 1 1 ...
$ LEVEL              : num  0 0 0 0 0 0 0 1 1 1 ...
$ YEAR               : num  1988 1989 1990 1992 1994 ...
$ exposed            : Factor w/ 2 levels "1","2": 2 2 2 2 2 2 2 2 2 2 ...
- attr(*, ".internal.selfref")=<externalptr> 
- attr(*, "sorted")= chr "unique_id"

我有两个问题:a(

当我尝试用fit_count <- gam(f, data = count_merge, method = "REML", family = gaussian())拟合模型时,我得到:

Error in names(dat) <- object$term : 
attribut 'names' [2] doit être de même longueur que le vecteur [1]

我认为这与公式的t2((参数有关。

b(我通常用brms运行GAM,我对该模型的公式是:

MDS1 ~ 1 + exposed + s(YEAR,bs = "tp")+ s(LEVEL, bs = "tp") + t2(YEAR, SITE, bs = c("tp","re"), full = T) +(1|r|INTERTIDAL_TRANSECT),
family = gaussian()

我将公式调整为mgcv::gam的方法可以吗?

Q a(

您的SITE矢量是一个字符矢量,它必须是一个因子。

Q b(

这看起来还可以,但s(INTERTIDAL_TRANSECT, bs = "re")术语中不需要m = 1

如果您希望{brms}调用{mgcv}之间的参数化相同,则还应在t2()项上使用full = TRUE选项。

相关内容