为什么我的代码不允许我指定要计算的变量 'by'?

Why won't my code allow me to specify what I want a variable evaluated 'by'?

我正在尝试创建一个 gamm 浮游动物种群(作为时间变量的函数),其中 sample_site(分类变量)对种群有随机影响(retrocurva 是一种浮游动物).

jr1 <- gamm(retrocurva ~ s(DOY, by = "Sample_site") + s(Year, by = "Sample_site") + s(Sample_site, bs = "re"), data = zooskeleton2)

但我不断收到此错误:

Error in terms.formula(formula, data = data) : invalid model formula in ExtractVars

如果我进行这些修改,代码就可以工作:

jr1 <- gamm(retrocurva ~ s(DOY) + s(Year), data = zooskeleton2)

但是我在其中添加 Sample_Site 的那一刻(即使没有在 s() 中指定它)...

jr1 <- gamm(retrocurva ~ s(DOY) + s(Year) + s(Sample_site), data = zooskeleton2)

我收到这个错误:

Error in names(dat) <- object$term : 'names' attribute [1] must be the same length as the vector [0]

对我做错了什么有什么想法吗?这是我正在操作的 'zooskeleton2' 数据框的一个子集以供参考。

retrocurva  Sample_site DOY Year
<dbl>           <chr>  <dbl><dbl>
5.054528e-01    3-996   137 1995    
7.192713e-01    3-996   137 1995    
1.827290e-01    8-994   137 1995    
7.925904e-01    8-994   137 1995    
5.506497e-01    27-918  142 1995    
2.001039e-01    29-905  142 1995    
5.606469e-01    36-873  143 1995    
4.903655e-01    37-890  143 1995    
6.504399e+01    14-972  152 1995    
5.058930e+01    16-970  152 1995    

有两个问题:

  1. 您需要将 Sample_site 编码为一个因素,并且
  2. 您需要将此变量传递给 by 参数 unquoted

这应该可以解决问题:

zooskeleton2 <- transform(zooskeleton2, Sample_site = factor(Sample_site))
jr1 <- gamm(retrocurva ~ s(DOY, by = Sample_site) +
              s(Year, by = Sample_site) +
              s(Sample_site, bs = "re"),
            data = zooskeleton2)