Вот немного предыстории о моей ситуации: мои данные относятся к количеству добычи, успешно съеденной хищником. Поскольку число жертв ограничено (25 доступно) в каждом испытании, у меня был столбец «Образец», представляющий количество доступных жертв (то есть, 25 в каждом испытании), и еще один, названный «Счет», который был числом успеха ( сколько добычи было съедено). Я основал свой анализ на примере из книги R на данных о пропорциях (стр. 578). Объясняющими переменными являются температура (4 уровня, которые я рассматривал как фактор) и пол хищника (очевидно, мужской или женский). Итак, я в конечном итоге с этой моделью:
model <- glm(y ~ Temperature+Sex+Temperature*Sex data=predator, family=quasibinomial)
После получения таблицы анализа отклонений выясняется, что температура и пол (но не взаимодействие) оказывают существенное влияние на потребление добычи. Теперь моя проблема: мне нужно знать, какие температуры различаются, то есть я должен сравнить 4 температуры друг с другом. Если бы у меня была линейная модель, я бы использовал функцию TukeyHSD, но, поскольку я использую GLM, я не могу. Я просматривал пакет MASS и пытался настроить контрастную матрицу, но по какой-то причине он не работает. Любые предложения или ссылки?
Вот резюме, которое я получаю от своей модели, если это поможет прояснить ситуацию ...
y <- cbind(data$Count, data$Sample-data$Count)
model <- glm(y ~ Temperature+Sex+Temperature*Sex data=predator, family=quasibinomial)
> summary(model)
# Call:
# glm(formula = y ~ Temperature + Sex + Temperature * Sex, family=quasibinomial, data=data)
# Deviance Residuals:
# Min 1Q Median 3Q Max
# -3.7926 -1.4308 -0.3098 0.9438 3.6831
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) -1.6094 0.2672 -6.024 3.86e-08 ***
# Temperature8 0.3438 0.3594 0.957 0.3414
# Temperature11 -1.0296 0.4803 -2.144 0.0348 *
# Temperature15 -1.2669 0.5174 -2.449 0.0163 *
# SexMale 0.3822 0.3577 1.069 0.2882
# Temperature8:SexMale -0.2152 0.4884 -0.441 0.6606
# Temperature11:SexMale 0.4136 0.6093 0.679 0.4990
# Temperature15:SexMale 0.4370 0.6503 0.672 0.5033
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# (Dispersion parameter for quasibinomial family taken to be 2.97372)
# Null deviance: 384.54 on 95 degrees of freedom
# Residual deviance: 289.45 on 88 degrees of freedom
# AIC: NA
# Number of Fisher Scoring iterations: 5
glht
функцию вmultcomp
пакете . Чтобы выполнить тесты TukeyHSD на температуру, используйте его следующим образомglht(my.glm, mcp(Temperature="Tukey"))
. И кстати: Ваша модель формула может быть сокращена до:model<-glm(y ~ Temperature*Sex data=predator, family=quasibinomial)
. Звездочкой ( ) обозначены взаимодействия и основные эффекты.Temperature
как фактор? У вас нет фактических числовых значений? Я бы использовал их как непрерывную переменную, и тогда весь этот вопрос спорный.Ответы:
Энн, я коротко объясню, как делать такие множественные сравнения в целом. Почему это не работает в вашем конкретном случае, я не знаю; Мне жаль.
Но обычно вы можете сделать это с помощью
multcomp
пакета и функцииglht
. Вот пример:Если вы хотите рассчитать парные сравнения между
rank
использованием HSD Тьюки, вы можете сделать это следующим образом:Все парные сравнения даны вместе с значением. Предупреждение: эти сравнения касаются только основных эффектов. Взаимодействия игнорируются. Если взаимодействия присутствуют, будет дано предупреждение (как в выходных данных выше). Более подробное руководство о том, как действовать в случае присутствия взаимодействий, см. В этих дополнительных примерах для multicomp .п
Примечание: как отметил @gung в комментариях, вы должны - когда это возможно - включать температуру как непрерывную, а не категориальную переменную. Что касается взаимодействия: вы можете выполнить тест отношения правдоподобия, чтобы проверить, значительно ли термин взаимодействия улучшает подгонку модели. В вашем случае код будет выглядеть примерно так:
Если этот тест несущественен, вы можете удалить взаимодействие из вашей модели. Может тогда
glht
будет работать?источник