การเปรียบเทียบระดับของปัจจัยหลังจาก GLM ใน R


25

นี่เป็นพื้นหลังเล็กน้อยเกี่ยวกับสถานการณ์ของฉัน: ข้อมูลของฉันอ้างถึงจำนวนเหยื่อที่กินโดยนักล่า เนื่องจากจำนวนเหยื่อมี จำกัด (มีให้ 25) ในการทดลองแต่ละครั้งฉันจึงมีคอลัมน์ "ตัวอย่าง" แสดงจำนวนเหยื่อที่มี (เช่น 25 ในการทดลองแต่ละครั้ง) และอีกชื่อเรียกว่า "นับ" ซึ่งเป็นจำนวนของความสำเร็จ ( จำนวนเหยื่อที่ถูกกิน) ฉันใช้การวิเคราะห์ตามตัวอย่างจากหนังสือ R เกี่ยวกับข้อมูลสัดส่วน (หน้า 578) ตัวแปรอธิบายคืออุณหภูมิ (4 ระดับซึ่งฉันถือว่าเป็นปัจจัย) และเพศของนักล่า (เห็นได้ชัดว่าเป็นเพศชายหรือเพศหญิง) ดังนั้นฉันจะลงเอยกับโมเดลนี้:

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

หลังจากได้รับตารางการวิเคราะห์ของ Deviance ปรากฎว่าอุณหภูมิและเพศ (แต่ไม่ใช่การมีปฏิสัมพันธ์) มีผลอย่างมากต่อการบริโภคเหยื่อ ตอนนี้ปัญหาของฉัน: ฉันต้องรู้ว่าอุณหภูมิแตกต่างกันคือฉันต้องเปรียบเทียบ 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
สวัสดี @ แอนน์และยินดีต้อนรับ คุณสามารถลองใช้glhtฟังก์ชั่นในmultcompแพ็คเกจได้ เพื่อดำเนินการทดสอบ TukeyHSD glht(my.glm, mcp(Temperature="Tukey"))อุณหภูมิใช้มันเหมือนว่า และ BTW: model<-glm(y ~ Temperature*Sex data=predator, family=quasibinomial)สูตรโมเดลของคุณสามารถย่อ: ด้วยเครื่องหมายดอกจัน ( ) การโต้ตอบและเอฟเฟกต์หลักจะถูกติดตั้ง
COOLSerdash

สวัสดีขอบคุณสำหรับการตอบกลับอย่างรวดเร็วของคุณ! อย่างไรก็ตามฉันต้องทำอะไรผิดพลาดเพราะฉันได้รับข้อความแสดงข้อผิดพลาดเท่านั้น ... ฉันคิดว่า my.glm เป็น glm ที่ฉันทำไปก่อนหน้านี้ (ดังนั้น "model" ในกรณีนี้) mcp หมายถึงอะไร ฉันได้รับข้อความแสดงข้อผิดพลาดว่าขนาดของสัมประสิทธิ์และเมทริกซ์ความแปรปรวนร่วมไม่ตรงกับ ...
แอนน์

มันจะมีประโยชน์ถ้าคุณจะแก้ไขคำถามของคุณและรวมเอารูปแบบเอาท์พุท
COOLSerdash

3
ทำไมคุณทำตัวแบบTemperatureเป็นปัจจัย? คุณไม่มีค่าตัวเลขจริงหรือ ฉันจะใช้พวกเขาเป็นตัวแปรต่อเนื่องแล้วปัญหาทั้งหมดนี้เป็นที่สงสัย
gung - Reinstate Monica

3
มีเหตุผลพอสมควรที่จะต้องการทราบวิธีการทำสิ่งนี้โดยทั่วไป คำถามของคุณยืนอยู่ อย่างไรก็ตามด้วยสถานการณ์ที่เฉพาะเจาะจงของคุณฉันจะใช้ temp เป็นตัวแปรต่อเนื่องแม้ว่าคุณจะเคยคิดว่ามันเป็นปัจจัย การแยกประเด็นที่มีการเปรียบเทียบหลาย ๆ อย่างการสร้างแบบจำลอง temp เป็นปัจจัยคือการใช้ข้อมูลที่ไม่มีประสิทธิภาพ
gung - Reinstate Monica

คำตอบ:


15

ฉันจะอธิบายวิธีการเปรียบเทียบหลาย ๆ อย่างโดยทั่วไป ทำไมมันไม่ทำงานในกรณีเฉพาะของคุณฉันไม่รู้ ฉันขอโทษ.

แต่ตามปกติคุณสามารถทำมันได้กับแพคเกจและฟังก์ชั่น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

หากคุณต้องการคำนวณการเปรียบเทียบแบบจับคู่ระหว่างการrankใช้ HSD ของ Tukey คุณสามารถทำได้ด้วยวิธีนี้:

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

การเปรียบเทียบแบบเป็นคู่ทั้งหมดจะได้รับพร้อมกับค่าคำเตือน: การเปรียบเทียบเหล่านี้เกี่ยวข้องกับผลกระทบหลักเท่านั้น การโต้ตอบจะถูกละเว้น หากมีการโต้ตอบจะมีการแจ้งเตือน (เช่นในเอาต์พุตด้านบน) สำหรับการกวดวิชาอย่างกว้างขวางมากขึ้นเกี่ยวกับวิธีการดำเนินการเมื่อปฏิสัมพันธ์ที่มีอยู่ให้ดูเพิ่มเติมเหล่านี้ตัวอย่าง multcompp

หมายเหตุ: ตามที่ @ 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
โอ้พระเจ้าขอบคุณมาก !! ฉันสามารถเขียนคำสั่งได้อย่างถูกต้องในครั้งนี้และใช้งานได้! ขอบคุณอีกครั้ง !
แอนน์

1
คำถามเพิ่มเติม: มีวิธีใดในการเปรียบเทียบการตอบโต้หลายครั้งกับการโต้ตอบหรือไม่ ฉันมีข้อมูลที่คล้ายกันซึ่งการโต้ตอบ (จากคำถามเริ่มต้นนั่นคืออุณหภูมิ * เพศ) มีความสำคัญและฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะเปรียบเทียบสิ่งเหล่านั้นเข้าด้วยกัน ...
Anne

1
คุณหมายถึงการเปรียบเทียบหลายระดับสำหรับการโต้ตอบแต่ละระดับหรือไม่ ถ้าใช่คุณอาจพบว่าไซต์นี้น่าสนใจ (ย่อหน้าสุดท้ายแสดงวิธีทดสอบชุดค่าผสมที่เป็นไปได้ทั้งหมด)
COOLSerdash

คุณสามารถสร้างตัวแปรที่สอดคล้องกับการโต้ตอบสำหรับตัวแปรและใช้ตัวแปรนี้เพื่อดำเนินการ mcp คุณทำเช่นนี้ mydata $ gparank <- การทำงานร่วมกัน (mydata $ gpa, mydata $ rank)
Notquitesure

1
@Nova คุณหมายถึงลิงค์ใด หนึ่งในความคิดเห็นหรือไม่ นี่คือลิงค์ใหม่ไปยังเว็บไซต์นั้น
COOLSerdash
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.