Nhiều so sánh trên một mô hình hiệu ứng hỗn hợp


31

Tôi đang cố gắng phân tích một số dữ liệu bằng mô hình hiệu ứng hỗn hợp. Dữ liệu tôi thu thập đại diện cho trọng lượng của một số động vật trẻ có kiểu gen khác nhau theo thời gian.

Tôi đang sử dụng phương pháp được đề xuất ở đây: https://gribblelab.wordpress.com/2009/03/09/repeat-measure-anova-USE-r/

Cụ thể tôi đang sử dụng giải pháp số 2

Vì vậy, tôi có một cái gì đó như

require(nlme)
model <- lme(weight ~ time * Genotype, random = ~1|Animal/time, 
         data=weights)    
av <- anova(model)

Bây giờ, tôi muốn có một số so sánh nhiều. Sử dụng multcomptôi có thể làm:

require(multcomp)
comp.geno <- glht(model, linfct=mcp(Genotype="Tukey"))
print(summary(comp.geno))

Và, tất nhiên, tôi có thể làm tương tự với thời gian.

Tôi có hai câu hỏi:

  1. Làm cách nào để sử dụng mcpđể xem sự tương tác giữa Thời gian và Kiểu gen?
  2. Khi tôi chạy, glhttôi nhận được cảnh báo này:

    covariate interactions found -- default contrast might be inappropriate

    Nó có nghĩa là gì? Tôi có thể yên tâm bỏ qua nó? Hoặc tôi nên làm gì để tránh nó?

EDIT: Tôi tìm thấy bản PDF này có nội dung:

Do không thể tự động xác định các tham số quan tâm trong trường hợp này, mcp () trong multcomp theo mặc định sẽ tạo ra các so sánh chỉ cho các hiệu ứng chính, bỏ qua các biến số và tương tác . Kể từ phiên bản 1.1-2, người ta có thể chỉ định trung bình trên các thuật ngữ tương tác và hiệp biến bằng cách sử dụng đối số tương tác tương ứng = TRUE và covariate_alusive = TRUE, trong khi các phiên bản cũ hơn 1.0-0 tự động tính trung bình theo các điều khoản tương tác. Tuy nhiên, chúng tôi đề xuất với người dùng rằng họ viết ra, bằng tay, tập hợp các tương phản họ muốn.Người ta nên làm điều này bất cứ khi nào có nghi ngờ về những gì độ tương phản mặc định, thường xảy ra trong các mô hình với các điều khoản tương tác bậc cao hơn. Chúng tôi đề cập đến Hsu (1996), Chương ~ 7 và Searle (1971), Chương ~ 7.3, để thảo luận thêm và ví dụ về vấn đề này.

Tôi không có quyền truy cập vào những cuốn sách đó, nhưng có lẽ ai đó ở đây có?


Hãy xem InvivoStat ( invivostat.co.uk ), cần thực hiện loại phân tích mà bạn đang tìm kiếm

Câu trả lời:


29

Nếu timeGenotypecả hai đều là các yếu tố dự đoán phân loại giống như chúng và bạn quan tâm đến việc so sánh tất cả các cặp thời gian / Kiểu gen với nhau, thì bạn chỉ cần tạo một biến tương tác và sử dụng Tukey tương phản với nó:

weights$TimeGeno <- interaction(weigths$Time, weights$Geno)
model <- lme(weight ~ TimeGeno, random = ~1|Animal/time, data=weights) 
comp.timegeno <- glht(model, linfct=mcp(TimeGeno="Tukey")) 

Nếu bạn quan tâm đến các tương phản khác, thì bạn có thể sử dụng thực tế là linfctđối số có thể lấy ma trận các hệ số cho các tương phản - theo cách này bạn có thể thiết lập chính xác các so sánh bạn muốn.

CHỈNH SỬA

Có một số lo ngại trong các ý kiến ​​cho rằng mô hình được trang bị bộ TimeGenodự đoán khác với mô hình ban đầu được trang bị bộ Time * Genotypedự đoán. Đây không phải là trường hợp , các mô hình là tương đương. Sự khác biệt duy nhất là trong việc tối ưu hóa các hiệu ứng cố định, được thiết lập để giúp sử dụng glhtchức năng dễ dàng hơn .

Tôi đã sử dụng một trong các bộ dữ liệu tích hợp (nó có Chế độ ăn thay vì Kiểu gen) để chứng minh rằng hai phương pháp có cùng khả năng, giá trị dự đoán, v.v .:

> # extract a subset of a built-in dataset for the example
> data(BodyWeight)
> ex <- as.data.frame(subset(BodyWeight, Time %in% c(1, 22, 44)))
> ex$Time <- factor(ex$Time)
> 
> #create interaction variable
> ex$TimeDiet <- interaction(ex$Time, ex$Diet)
    > 
    > model1 <- lme(weight ~ Time * Diet, random = ~1|Rat/Time,  data=ex)    
    > model2 <- lme(weight ~ TimeDiet, random = ~1|Rat/Time, data=ex)    
    > 
    > # the degrees of freedom, AIC, BIC, log-likelihood are all the same 
    > anova(model1, model2)
           Model df      AIC      BIC    logLik
    model1     1 12 367.4266 387.3893 -171.7133
    model2     2 12 367.4266 387.3893 -171.7133
    Warning message:
    In anova.lme(model1, model2) :
      fitted objects with different fixed effects. REML comparisons are not meaningful.
    > 
    > # the second model collapses the main and interaction effects of the first model
    > anova(model1)
                numDF denDF   F-value p-value
    (Intercept)     1    26 1719.5059  <.0001
    Time            2    26   28.9986  <.0001
    Diet            2    13   85.3659  <.0001
    Time:Diet       4    26    1.7610  0.1671
    > anova(model2)
                numDF denDF   F-value p-value
    (Intercept)     1    24 1719.5059  <.0001
    TimeDiet        8    24   29.4716  <.0001
    > 
    > # they give the same predicted values
    > newdata <- expand.grid(Time=levels(ex$Time), Diet=levels(ex$Diet))
    > newdata$TimeDiet <- interaction(newdata$Time, newdata$Diet)
> newdata$pred1 <- predict(model1, newdata=newdata, level=0)
    > newdata$pred2 <- predict(model2, newdata=newdata, level=0)
> newdata
  Time Diet TimeDiet   pred1   pred2
1    1    1      1.1 250.625 250.625
2   22    1     22.1 261.875 261.875
3   44    1     44.1 267.250 267.250
4    1    2      1.2 453.750 453.750
5   22    2     22.2 475.000 475.000
6   44    2     44.2 488.750 488.750
7    1    3      1.3 508.750 508.750
8   22    3     22.3 518.250 518.250
9   44    3     44.3 530.000 530.000

Sự khác biệt duy nhất là những gì giả thuyết dễ kiểm tra. Ví dụ, trong mô hình đầu tiên, thật dễ dàng để kiểm tra xem hai yếu tố dự đoán có tương tác hay không, trong mô hình thứ hai không có thử nghiệm rõ ràng nào cho việc này. Mặt khác, hiệu ứng chung của hai yếu tố dự đoán rất dễ kiểm tra trong mô hình thứ hai, nhưng không phải là mô hình thứ nhất. Các giả thuyết khác có thể kiểm chứng được, nó chỉ là công việc nhiều hơn để thiết lập chúng.


3
glhtsử dụng các mức độ tự do được đưa ra trong mô hình lme. Tôi không chắc những mức độ tự do này là phù hợp ...?
Stéphane Laurent

2
Tôi cũng tò mò làm thế nào điều này được thực hiện tốt nhất. Tuy nhiên, cách tiếp cận này đang tạo ra hiệu ứng từ một mô hình khác - về cơ bản chỉ kiểm tra sự tương tác. Mô hình thứ hai không bao gồm hai hiệu ứng chính tiềm năng. Đây dường như không phải là một phương pháp thích hợp để kiểm tra các hiệu ứng trong mô hình đầu tiên.
Marcus Morrisey

@Aniko, tôi đã nghĩ đến việc kết hợp 2 biến phân loại thành một biến như bạn vừa làm, nhưng tôi đã do dự vì chỉ một trong số các biến nằm trong chủ đề, biến còn lại nằm giữa. Bạn có thể xác nhận rằng điều này không mather? Tôi nhận thấy rằng trong ví dụ bạn giữ Animal/timemà bây giờ không phải là một trong những yếu tố. Có phải tôi thực sự understandnày?
toto_tico

@toto_tico, tôi đã chỉnh sửa phản hồi để cho thấy rằng mô hình thứ hai tương đương với mô hình thứ nhất.
Aniko

3
@toto_tico, tôi đã cho bạn một ví dụ tái tạo. Tại sao bạn không thử all.equal(resid(model1), resid(model2))và thấy rằng chúng giống nhau trước khi đoán khác? Chỉ có các hiệu ứng cố định tham số là khác nhau. TimeDietkhông phải là một thuật ngữ tương tác thuần túy, và nó không tương đương với Time:Diet, mà là Time + Diet + Time:Diet.
Aniko
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.