Сообщение "Ошибка контрастности" с 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 **
Я пытаюсь приступить к тесту posthoc (Tukey), чтобы сравнить взаимодействие 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
Я озадачен и не уверен, как я могу исправить это сообщение об ошибке. Любая помощь приветствуется!
1 ответ
Эта ошибка возникает, когда указанная переменная не является фактором. Вы проверили и обнаружили, что это так, так что это загадка, и все, что я могу догадаться, это то, что данные изменились, так как вы подходите модели Поэтому попробуйте переоснастить модель текущим набором данных.
После всего этого я подвергаю сомнению то, что вы пытаетесь сделать. Во-первых, у вас есть ParticleTypeSize
взаимодействовать с двумя другими предикторами, что означает, что, вероятно, не рекомендуется рассматривать предельные средние (lsmeans) для этого фактора. Тот факт, что существуют взаимодействия, означает, что структура этих средств изменяется в зависимости от значений других переменных.
Во-вторых, являются AlgaePresent
а также ParticlePresent
действительно числовые переменные? По своим именам они кажутся факторами. Если они действительно являются индикаторами (0 и 1), то все в порядке, но все же лучше кодировать их как факторы, если вы используете такие функции, как lsmeans
где факторы и ковариаты трактуются совершенно по-разному.
Кстати, пакет lsmeans устарел, и в его преемнике, пакете emmeans, происходят новые разработки.