R에서 GLM 후 요인 수준 비교


25

내 상황에 대한 약간의 배경은 다음과 같습니다. 내 데이터는 포식자가 성공적으로 먹은 먹이 수를 나타냅니다. 각 시험에서 먹이의 수가 제한되어 있으므로 (25 개의 이용 가능), 이용 가능한 먹이의 수를 나타내는 "샘플"열 (각 시험에서 25)과 성공 횟수 ( "Count")가 있습니다 ( 먹이를 몇 마리 먹었는지) 비율 데이터 (578 페이지)를 기준으로 R 책의 예를 바탕으로 분석을 수행했습니다. 설명 변수는 온도 (내가 요인으로 취급 한 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

2
@Anne 님 안녕하세요. 패키지에서이glht 기능 을 사용할 수 있습니다 . 온도에 대한 TukeyHSD 테스트를 수행하려면 다음과 같이 사용하십시오 . 그리고 btw : 모델 공식은 다음과 같이 축약 될 수 있습니다 . 별표 ( * )를 사용하면 상호 작용 주요 효과가 적합합니다. multcompglht(my.glm, mcp(Temperature="Tukey"))model<-glm(y ~ Temperature*Sex data=predator, family=quasibinomial)
COOLSerdash

빠른 답변 감사합니다. 그러나 오류 메시지 만 받기 때문에 잘못된 일을해야합니다 ... my.glm이 이전에 수행 한 glm이라고 가정합니다 (따라서 "모델"). mcp는 무엇을 의미하나요? 계수와 공분산 행렬의 차원이 일치하지 않는다는 오류 메시지가 표시됩니다.
Anne

질문을 편집하고 모델 출력을 포함하면 도움이됩니다.
COOLSerdash

3
Temperature요인으로 모델링 했 습니까? 실제 숫자 값이 없습니까? 나는 그것들을 연속 변수로 사용 하고이 전체 문제는 바보입니다.
gung-모니 티 복원

3
일반적으로이 작업을 수행하는 방법을 알고 자하는 것이 합리적입니다. 당신의 질문은 의미합니다. 그러나 특정 상황과 관련하여 temp를 원래 요인으로 생각한 경우에도 temp를 연속 변수로 사용합니다. 다중 비교와 함께 문제를 제쳐두고, 온도를 요인으로 모델링하는 것은 정보를 비효율적으로 사용하는 것입니다.
gung-모니 티 복원

답변:


15

Anne, 나는 그러한 다중 비교를 일반적으로 수행하는 방법을 간단히 설명 할 것이다. 특정 상황에서 이것이 작동하지 않는 이유는 모르겠습니다. 죄송 해요.

그러나 일반적으로 multcomp패키지와 함수로 할 수 있습니다 glht. 예를 들면 다음과 같습니다.

mydata      <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")
mydata$rank <- factor(mydata$rank)
my.mod      <- glm(admit~gre+gpa*rank, data=mydata, family=quasibinomial)

summary(my.mod)
# 
# Coefficients:
#              Estimate Std. Error t value Pr(>|t|)  
# (Intercept) -4.985768   2.498395  -1.996   0.0467 *
# gre          0.002287   0.001110   2.060   0.0400 *
# gpa          1.089088   0.731319   1.489   0.1372  
# rank2        0.503294   2.982966   0.169   0.8661  
# rank3        0.450796   3.266665   0.138   0.8903  
# rank4       -1.508472   4.202000  -0.359   0.7198  
# gpa:rank2   -0.342951   0.864575  -0.397   0.6918  
# gpa:rank3   -0.515245   0.935922  -0.551   0.5823  
# gpa:rank4   -0.009246   1.220757  -0.008   0.9940  
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

rankTukey의 HSD 사용 간의 쌍별 비교를 계산하려면 다음과 같이하십시오.

library(multcomp)
summary(glht(my.mod, mcp(rank="Tukey")))
# 
#    Simultaneous Tests for General Linear Hypotheses
# 
# Multiple Comparisons of Means: Tukey Contrasts
# 
# Fit: glm(formula = admit ~ gre + gpa * rank, family = quasibinomial, data = mydata)   
# 
# Linear Hypotheses:
#            Estimate Std. Error z value Pr(>|z|)
# 2 - 1 == 0   0.5033     2.9830   0.169    0.998
# 3 - 1 == 0   0.4508     3.2667   0.138    0.999
# 4 - 1 == 0  -1.5085     4.2020  -0.359    0.984
# 3 - 2 == 0  -0.0525     2.6880  -0.020    1.000
# 4 - 2 == 0  -2.0118     3.7540  -0.536    0.949
# 4 - 3 == 0  -1.9593     3.9972  -0.490    0.960
# (Adjusted p values reported -- single-step method)
# 
# Warning message:
# In mcp2matrix(model, linfct = linfct) :
#   covariate interactions found -- default contrast might be inappropriate

참고 : 주석에서 @gung이 언급했듯이 가능하면 온도를 범주 변수가 아닌 연속으로 포함해야합니다. 교호 작용에 대해 : 교호 작용 항이 모형 적합을 유의하게 개선하는지 여부를 확인하기 위해 우도 비율 검정을 수행 할 수 있습니다. 귀하의 경우 코드는 다음과 같습니다.

# Original model
model <- glm(y ~ Temperature+Sex+Temperature*Sex, data=predator, family=quasibinomial) 

# Model without an interaction
model2 <- glm(y ~ Temperature+Sex data=predator, family=quasibinomial) 

# Likelihood ratio test
anova(model, model2, test="LRT")

이 테스트가 중요하지 않으면 모델에서 상호 작용을 제거 할 수 있습니다. 아마도 효과 glht가 있을까요?


1
세상에, 정말 고마워요 !! 이번에는 명령을 올바르게 쓸 수 있었고 작동했습니다! 다시 감사합니다!
Anne

1
추가 질문 : 상호 작용을 여러 번 비교할 수있는 방법이 있습니까? 나는 상호 작용 (초기 질문에서 온도 * 성)이 중요한 유사한 데이터를 가지고 있으며, 그것들을 함께 비교할 수 있는지 궁금합니다.
Anne

1
상호 작용의 각 수준에 대한 다중 비교를 의미합니까? 그렇다면 이 사이트가 흥미로울 것입니다 (마지막 단락은 가능한 모든 쌍 조합을 테스트하는 방법을 보여줍니다).
COOLSerdash

변수의 교호 작용에 해당하는 변수를 작성하고이 변수를 사용하여 mcp를 수행 할 수 있습니다. 당신은 이것을 이렇게합니다. mydata $ gparank <-interaction (mydata $ gpa, mydata $ rank)
Notquitesure

1
@Nova 어떤 링크를 의미합니까? 의견에 하나? 해당 사이트에 대한 새로운 링크는 다음과 같습니다 .
COOLSerdash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.