您的数据有问题;您不能将随机效应Plant作为一个因素并获得您在@Aaron's Answer的评论链接中显示的情节。你确定这Plant是一个超过1级的因素吗?如果没有,您需要正确编码数据以获得每株植物的随机截距。另外,你能同时包含RIL和Plant水平效果吗?一旦你考虑了单独的Plant影响(截距),那在逻辑上不也能解释基因系的影响吗?
其次,如果使用bs = 'fs',则需要传入一个连续变量和一个因子;到目前为止,您只能通过DateNum。此刻你有
s(DateNum, k = 9, bs = "fs")
我想你想要
s(DateNum, Trt, k = 9, bs = "fs")
这个模型类似于@Aaron 提出的模型,但在细节上有些不同。完整的模型可能是
gam(Total ~ Trt * RIL + s(DateNum, Trt, k = 9, bs = "fs") + s(Plant, bs = "re"),
data=ce1230)
但我怀疑那是错误的?(对于fs平滑,您不需要参数Trt。)所以我认为,
gam(Total ~ RIL + Trt:RIL + s(DateNum, Trt, k = 9, bs = "fs") +
s(Plant, bs = "re"), data=ce1230)
其中的主要效果Trt实际上包含在fs平滑中,因此我们不对其进行参数指定。
该模型与@Aaron 的主要区别在于,对于DateNumby的平滑,有一个平滑参数Trt,而在@Aaron 的回答中,每个平滑都有自己的平滑参数。这归结为您是否期望每个平滑的相似摆动(平滑的形状可能不同)或您是否希望四个平滑中的一些比其他平滑更摆动?
您似乎想要的是每个 之间的交互RIL和Trt加上单独的平滑Trt。但是你想要每个RIL和Trt组合的单独平滑吗?这将需要一个单独的变量,由数据中的RIL和Trt可用的组合形成:
ce1230 <- transform(ce1230,
RILTrt = interaction(RIL, Trt, drop = TRUE))
然后你可以适应
gam(Total ~ s(DateNum, RILTrt, k = 9, bs = "fs") +
s(Plant, bs = "re"), data=ce1230)
或者
gam(Total ~ s(DateNum, k = 9, by = RILTrt) +
s(Plant, bs = "re"), data=ce1230)
取决于您bs = 'fs'是否by希望DateNum.
该模型还需要尊重响应的非负面性质;你有计数,你不能有任何负数。使用family = poisson或family = nb将是合理的起点。