mgcv::gam,名称(数据)<- object$term 中的错误:属性 'names' [2] 与向量 [1] 的长度相同
mgcv::gam, Error in names(dat) <- object$term : attribut 'names' [2] as to be same length as vector [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"
我有两个问题:
一)
当我尝试用 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的方法可以吗?
问一)
您的 SITE
向量是一个字符向量,它必须是一个因子。
Qb)
看起来不错,但您不需要 s(INTERTIDAL_TRANSECT, bs = "re")
项中的 m = 1
。
如果您希望 {brms} 和 {mgcv} 之间的参数化相同,您还应该在 t2()
项上使用 full = TRUE
选项。
我想 运行 使用 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"
我有两个问题: 一)
当我尝试用 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的方法可以吗?
问一)
您的 SITE
向量是一个字符向量,它必须是一个因子。
Qb)
看起来不错,但您不需要 s(INTERTIDAL_TRANSECT, bs = "re")
项中的 m = 1
。
如果您希望 {brms} 和 {mgcv} 之间的参数化相同,您还应该在 t2()
项上使用 full = TRUE
选项。