Bir GLM'den sonra R'deki faktör seviyelerinin karşılaştırılması


25

İşte durumumla ilgili küçük bir arka plan: verilerim, avcı tarafından başarılı bir şekilde yenen av sayısını göstermektedir. Her denemede av sayısının sınırlı olması (25), mevcut av sayısını gösteren her bir denemede (yani, her denemede 25 adet) ve "Sayısı" olarak adlandırılan ve "başarı" sayılan "Sayı" olarak adlandırılan bir sütunum vardı. kaç av yemiş). Analizimi, R kitabındaki orantı verilerine dayanarak verdim (sayfa 578). Açıklayıcı değişkenler Sıcaklık (faktör olarak kabul ettiğim 4 seviye) ve avcının cinsiyeti (açıkçası, erkek veya kadın). Bu yüzden bu model ile bitirdim:

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

Sapma Analizi tablosunu aldıktan sonra, Sıcaklık ve Cinsiyet'in (ancak etkileşimin değil) av tüketimi üzerinde önemli bir etkisi olduğu ortaya çıkmıştır. Şimdi sorunum: Hangi sıcaklıkların farklı olduğunu bilmem gerekiyor, yani 4 sıcaklığı birbiriyle karşılaştırmam gerekiyor. Doğrusal bir modelim olsaydı, TukeyHSD işlevini kullanırdım, ancak GLM kullandığım için kullanamam. MASS paketine bakıyorum ve bir kontrast matrisi oluşturmaya çalışıyorum ama bir nedenden dolayı işe yaramıyor. Herhangi bir öneri veya referans?

İşte modelimden aldığım özeti, eğer daha net göstermeye yardımcı olursa ...

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
Merhaba @Anne ve hoş geldiniz. Pakettekiglht işlevi kullanmayı deneyebilirsiniz . TukeyHSD sıcaklık testi yapmak için bu şekilde kullanın . Ve arada: Modeliniz formülü kısaltılmış olabilir: . Yıldız ( ) ile etkileşimler ve ana efektler takılmıştır. multcompglht(my.glm, mcp(Temperature="Tukey"))model<-glm(y ~ Temperature*Sex data=predator, family=quasibinomial)*
COOLSerdash

Merhaba, hızlı cevabınız için teşekkürler! Ancak yanlış bir şey yapmalıyım çünkü sadece bir hata mesajı alıyorum ... ..glm'nin daha önce yaptığım glm olduğunu varsayıyorum (bu nedenle, "model" durumunda). Mcp ne anlama geliyor? Katsayıların ve kovaryans matrisinin boyutlarının eşleşmediğini söyleyen bir hata mesajı alıyorum ...?
Anne,

Sorunuzu düzenlerseniz ve model çıktısını eklerseniz yardımcı olur.
COOLSerdash

3
Neden Temperaturebir faktör olarak modellediniz? Gerçek sayısal değerlere sahip değil misiniz? Onları sürekli bir değişken olarak kullanırdım & sonra tüm bu konu tartışılmaz.
gung - Monica'yı yeniden yerleştir

3
Bunu genel olarak nasıl yapacağınızı bilmek istemek tamamen mantıklı; Sorunuz duruyor. Bununla birlikte, sizin özel durumunuza göre, başlangıçta bir faktör olarak düşünmüş olsanız bile, sıcaklığı sürekli bir değişken olarak kullanırdım. Çoklu karşılaştırmalar olmadan sorunları bir kenara koymak, bir faktör olarak modelleme sıcaklığını sahip olduğunuz bilginin verimsiz bir kullanımıdır.
gung - Monica'yı yeniden yerleştir

Yanıtlar:


15

Anne, genel olarak bu kadar çok karşılaştırmanın nasıl yapıldığını kısaca anlatacağım. Bu sizin durumunuzda neden işe yaramıyor, bilmiyorum; Üzgünüm.

Ancak normalde, multcomppaket ve işlev ile yapabilirsiniz glht. İşte bir örnek:

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

Tukey'nin HSD'sini rankkullanmak arasındaki ikili karşılaştırmaları hesaplamak istiyorsanız, bunu şu şekilde yapabilirsiniz:

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

Tüm ikili karşılaştırmalar değeri ile birlikte verilmiştir . Uyarı: Bu karşılaştırmalar yalnızca ana etkilerle ilgilidir. Etkileşimler yoksayılır. Eğer etkileşimler mevcutsa, bir uyarı verilecektir (yukarıdaki çıktıdaki gibi). Etkileşimler olduğunda nasıl ilerleyeceğiyle ilgili daha kapsamlı bir eğitim için, bu ek çok bilişim örneklerine bakın .p

Not: Yorumlarda @gung un yazdığı gibi, - mümkün olduğunda - kategorik bir değişken yerine sıcaklığı sürekli olarak eklemelisiniz. Etkileşim ile ilgili: Etkileşim teriminin model uyumunu önemli ölçüde iyileştirip iyileştirmediğini kontrol etmek için olasılık oranı testi gerçekleştirebilirsiniz. Senin durumunda, kod şöyle bir şey olurdu:

# 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")

Bu test anlamlı değilse, etkileşimi modelinizden kaldırabilirsiniz. Belki glhto zaman çalışır?


1
Tanrım, çok teşekkür ederim !! Bu sefer komutu doğru yazabildim ve işe yaradı! Tekrar teşekkürler !
Anne,

1
Ek soru: Etkileşimde çoklu karşılaştırmalar yapmanın bir yolu var mı? Ben etkileşimi (Sıcaklık olacağını ilk sorudan, * Seks) anlamlıdır benzer verileri, var ve o ... o buluşmanızı karşılaştırmak mümkündür merak ediyordum
Anne

1
Etkileşimin her seviyesi için çoklu karşılaştırma mı demek istiyorsunuz? Eğer evet ise, bu siteyi ilginç bulabilirsiniz (son paragrafta tüm olası ikili kombinasyonların nasıl test edileceği gösterilmektedir).
COOLSerdash

Bir değişkenin etkileşimlerine karşılık gelen bir değişken oluşturabilir ve bu değişkeni mcp'yi gerçekleştirmek için kullanabilirsiniz. Bunu böyle yapıyorsun. mydata $ gparank <- etkileşim (mydata $ gpa, mydata $ rank)
Notquitesure

1
@ Nova hangi bağlantıyı kastediyorsunuz? Yorumlarda biri? İşte o siteye yeni link.
COOLSerdash
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.