Сравните сообщение об ошибке с помощью lsmeans Tukey Test на GLM

Я определил обобщенную линейную модель следующим образом:

glm(formula = ParticleCount ~ ParticlePresent + AlgaePresent + 
ParticleTypeSize + ParticlePresent:ParticleTypeSize + AlgaePresent:ParticleTypeSize, 
family = poisson(link = "log"), data = PCB)

и у меня есть следующие важные взаимодействия

                                 Df  Deviance  AIC  LRT Pr(>Chi)   
<none>                               666.94  1013.8                  
ParticlePresent:ParticleTypeSize  6  680.59  1015.4 13.649 0.033818 * 
AlgaePresent:ParticleTypeSize     6  687.26  1022.1 20.320 0.002428 **

Я пытаюсь провести апостериорный тест (Тьюки), чтобы сравнить взаимодействие ParticleTypeSize с использованием пакета lsmeans. Однако, как только я продолжу, я получаю следующее сообщение:

library(lsmeans)
leastsquare=lsmeans(glm.particle3,~ParticleTypeSize,adjust ="tukey")

Error in `contrasts<-`(`*tmp*`, value = contrasts.arg[[nn]]) : 
  contrasts apply only to factors

Я проверил, является ли ParticleTypeSize действительным фактором, применив:

 l<-sapply(PCB,function(x)is.factor(x))
 l
      Sample     AlgaePresent  ParticlePresent ParticleTypeSize 
        TRUE            FALSE            FALSE             TRUE 
   ParticleCount 
       FALSE 

Я в тупике и не уверен, как я могу исправить это сообщение об ошибке. Любая помощь приветствуется!


person tiptothetop    schedule 14.04.2018    source источник


Ответы (1)


Эта ошибка возникает, когда указанная вами переменная не является фактором. Вы проверили и обнаружили, что это так, так что это загадка, и все, что я могу предположить, это то, что данные изменились с тех пор, как вы подошли к модели. Поэтому попробуйте перенастроить модель с помощью существующего набора данных.

Все, что сказал, я сомневаюсь, что вы пытаетесь сделать. Во-первых, у вас есть ParticleTypeSize, взаимодействующее с двумя другими предикторами, а это означает, что, вероятно, не целесообразно рассматривать предельные средние значения (lsmeans) для этого фактора. Тот факт, что существуют взаимодействия, означает, что структура этих средних изменяется в зависимости от значений других переменных.

Во-вторых, являются ли AlgaePresent и ParticlePresent действительно числовыми переменными? Судя по их именам, они должны быть факторами. Если они действительно являются индикаторами (0 и 1), все в порядке, но все же лучше кодировать их как факторы, если вы используете такие функции, как lsmeans, где факторы и ковариаты обрабатываются совершенно по-разному.

Кстати, пакет lsmeans устарел, и в его преемнике, пакете emmeans, происходят новые разработки.

person Russ Lenth    schedule 14.04.2018
comment
Спасибо за ваш комментарий. Мне удалось вписать его в модель, рассматривая AlgaePresent и ParticlePresent как факторы следующим образом: , AlgaePresent и ParticlePresent вводятся как наличие или отсутствие (T/F). ParticleTypeSize — это связанный фактор типа и размера частиц, который был объединен из-за отсутствия перекрытия, если их рассматривать отдельно. Я рассмотрю пакет emmeans. Спасибо! - person tiptothetop; 15.04.2018
comment
Хммм. Думаю, я даже не знал, что можно использовать логическую переменную в качестве предиктора, и с этим пониманием я могу воспроизвести ошибку, с которой вы столкнулись (используя другой пример). Теперь, когда я знаю об этом, по-видимому, я могу это исправить. Итак, примерно через месяц выйдет новое обновление emmeans, которое сможет обрабатывать логические предикторы. - person Russ Lenth; 15.04.2018
comment
Хорошо, это было чрезвычайно легко исправить. Логические предикторы теперь поддерживаются и работают как факторы. Если вы хотите это сейчас, перейдите на github.com/rvlenth/emmeans. - person Russ Lenth; 15.04.2018
comment
Большое спасибо! Ценю ваш быстрый ответ- - person tiptothetop; 15.04.2018