So sánh mức độ của các yếu tố sau GLM trong R


25

Đây là một nền tảng nhỏ về tình huống của tôi: dữ liệu của tôi đề cập đến số lượng con mồi bị ăn thịt thành công. Vì số lượng con mồi bị giới hạn (25 con có sẵn) trong mỗi thử nghiệm, tôi có một cột "Mẫu" đại diện cho số lượng con mồi có sẵn (vì vậy, 25 con trong mỗi thử nghiệm) và một con khác gọi là "Đếm" là số lần thành công ( có bao nhiêu con mồi đã ăn). Tôi dựa trên phân tích của tôi dựa trên ví dụ từ sách R về dữ liệu tỷ lệ (trang 578). Các biến giải thích là Nhiệt độ (4 cấp độ, mà tôi coi là yếu tố) và Giới tính của kẻ săn mồi (rõ ràng là nam hay nữ). Vì vậy, tôi kết thúc với mô hình này:

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

Sau khi nhận được bảng Phân tích lệch lạc, hóa ra Nhiệt độ và Giới tính (nhưng không phải là sự tương tác) có ảnh hưởng đáng kể đến việc tiêu thụ con mồi. Bây giờ, vấn đề của tôi: Tôi cần biết nhiệt độ nào khác nhau, tức là tôi phải so sánh 4 nhiệt độ với nhau. Nếu tôi có một mô hình tuyến tính, tôi sẽ sử dụng chức năng TukeyHSD, nhưng vì tôi đang sử dụng GLM nên tôi không thể. Tôi đã xem qua gói MASS và cố gắng thiết lập ma trận tương phản nhưng vì một số lý do, nó không hoạt động. Bất kỳ đề xuất hoặc tài liệu tham khảo?

Đây là tóm tắt tôi nhận được từ mô hình của mình, nếu điều đó giúp làm cho nó rõ ràng hơn ...

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
Xin chào @Anne và chào mừng. Bạn có thể thử sử dụng glhtchức năng trong multcompgói . Để thực hiện các bài kiểm tra TukeyHSD về nhiệt độ, hãy sử dụng nó như thế glht(my.glm, mcp(Temperature="Tukey")). Và btw: Công thức mô hình của bạn có thể được viết tắt là : model<-glm(y ~ Temperature*Sex data=predator, family=quasibinomial). Với dấu hoa thị ( ), các tương tác hiệu ứng chính được trang bị. *
COOLSerdash

Xin chào, cảm ơn bạn đã trả lời nhanh chóng! Tuy nhiên tôi phải làm gì đó sai vì tôi chỉ nhận được thông báo lỗi ... Tôi cho rằng my.glm là glm tôi đã thực hiện trước đó (do đó, "mô hình" trong trường hợp). Mcp đề cập đến điều gì? Tôi nhận được thông báo lỗi nói rằng kích thước của hệ số và ma trận hiệp phương sai không khớp ...?
Anne

Sẽ rất hữu ích nếu bạn chỉnh sửa câu hỏi của mình và bao gồm đầu ra mô hình.
COOLSerdash

3
Tại sao bạn làm người mẫu Temperaturenhư một nhân tố? Bạn không có các giá trị số thực tế? Tôi sẽ sử dụng chúng như một biến liên tục và sau đó toàn bộ vấn đề này là tranh luận.
gung - Phục hồi Monica

3
Hoàn toàn hợp lý khi muốn biết cách làm điều này nói chung; câu hỏi của bạn đứng Tuy nhiên, liên quan đến tình huống cụ thể của bạn, tôi sẽ sử dụng temp như một biến liên tục ngay cả khi ban đầu bạn nghĩ nó là một yếu tố. Đặt các vấn đề sang một bên với nhiều so sánh, mô hình hóa tạm thời như một yếu tố là việc sử dụng không hiệu quả các thông tin bạn có.
gung - Phục hồi Monica

Câu trả lời:


15

Anne, tôi sẽ giải thích ngắn gọn về cách làm nhiều so sánh như vậy nói chung. Tại sao điều này không hoạt động trong trường hợp cụ thể của bạn, tôi không biết; Tôi xin lôi.

Nhưng thông thường, bạn có thể làm điều đó với multcompgói và chức năng glht. Đây là một ví dụ:

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

Nếu bạn muốn tính toán các so sánh theo cặp giữa rankviệc sử dụng HSD của Tukey, bạn có thể làm điều đó theo cách này:

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ất cả các so sánh cặp được đưa ra cùng với một giá trị . Cảnh báo: Những so sánh này chỉ liên quan đến các tác dụng chính. Các tương tác được bỏ qua. Nếu có tương tác, một cảnh báo sẽ được đưa ra (như trong đầu ra ở trên). Để có hướng dẫn mở rộng hơn về cách tiến hành khi có tương tác, hãy xem các ví dụ đa thành phần bổ sung này .p

Lưu ý: Như @gung đã lưu ý trong các nhận xét, bạn nên - bất cứ khi nào có thể - bao gồm nhiệt độ dưới dạng liên tục thay vì biến phân loại. Liên quan đến tương tác: bạn có thể thực hiện kiểm tra tỷ lệ khả năng để kiểm tra xem thuật ngữ tương tác có cải thiện đáng kể mức độ phù hợp của mô hình hay không. Trong trường hợp của bạn, mã sẽ trông giống như thế:

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

Nếu thử nghiệm này không đáng kể, bạn có thể xóa tương tác khỏi mô hình của mình. Có lẽ glhtsẽ làm việc sau đó?


1
Trời ơi, cảm ơn bạn rất nhiều !! Tôi đã có thể viết lệnh chính xác lần này và nó đã hoạt động! Cảm ơn một lần nữa!
Anne

1
Câu hỏi bổ sung: có cách nào để có được nhiều so sánh về sự tương tác không? Tôi đã có dữ liệu tương tự, trong đó sự tương tác (từ câu hỏi ban đầu, đó là Nhiệt độ * Giới tính) là đáng kể và tôi tự hỏi liệu có thể so sánh chúng với nhau không ...
Anne

1
Bạn có nghĩa là nhiều so sánh cho mỗi cấp độ tương tác? Nếu có, bạn có thể thấy trang web này thú vị (đoạn cuối cho biết cách kiểm tra tất cả các kết hợp theo cặp có thể).
COOLSerdash

bạn có thể tạo một biến tương ứng với các tương tác cho một biến và sử dụng biến này để thực hiện mcp. Bạn làm nó như thế này. mydata $ gparank <- tương tác (mydata $ gpa, mydata $ rank)
Thông báo

1
@Nova có nghĩa là liên kết nào? Một trong những ý kiến? Đây là liên kết mới đến trang web đó.
COOLSerdash
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.