Почему мой код не позволяет мне указать, что я хочу, чтобы переменная оценивалась «по»?

#r #gam

Вопрос:

Я пытаюсь создать гамму популяций зоопланктона (в зависимости от временных переменных), в которой sample_site (категориальная переменная) оказывает случайное влияние на популяции (ретрокурва-вид зоопланктона).

 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:

Есть две проблемы:

  1. вам нужно кодировать Sample_site как фактор, и
  2. вам нужно передать эту переменную в by аргумент без кавычек

Это должно все исправить:

 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)