Sự khác biệt giữa việc sử dụng aov () và lme () trong việc phân tích dữ liệu theo chiều dọc là gì?


13

Bất cứ ai cũng có thể cho tôi biết sự khác biệt giữa việc sử dụng aov()lme()để phân tích dữ liệu theo chiều dọc và cách giải thích kết quả từ hai phương pháp này?

Dưới đây, tôi phân tích các số liệu tương tự sử dụng aov()lme()và có 2 kết quả khác nhau. Với aov(), tôi đã có một kết quả đáng kể trong thời gian bằng tương tác điều trị, nhưng phù hợp với mô hình hỗn hợp tuyến tính, thời gian bằng tương tác điều trị là không đáng kể.

> UOP.kg.aov <- aov(UOP.kg~time*treat+Error(id), raw3.42)
> summary(UOP.kg.aov)

Error: id
          Df  Sum Sq Mean Sq F value Pr(>F)
treat      1   0.142  0.1421  0.0377 0.8471
Residuals 39 147.129  3.7725               

Error: Within
            Df  Sum Sq Mean Sq  F value  Pr(>F)    
time         1 194.087 194.087 534.3542 < 2e-16 ***
time:treat   1   2.077   2.077   5.7197 0.01792 *  
Residuals  162  58.841   0.363                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

> UOP.kg.lme <- lme(UOP.kg~time*treat, random=list(id=pdDiag(~time)), 
                    na.action=na.omit, raw3.42)
> summary(UOP.kg.lme)
Linear mixed-effects model fit by REML
 Data: raw3.42 
       AIC      BIC    logLik
  225.7806 248.9037 -105.8903

Random effects:
 Formula: ~time | id
 Structure: Diagonal
        (Intercept)      time  Residual
StdDev:   0.6817425 0.5121545 0.1780466

Fixed effects: UOP.kg ~ time + treat + time:treat 
                 Value Std.Error  DF   t-value p-value
(Intercept)  0.5901420 0.1480515 162  3.986059  0.0001
time         0.8623864 0.1104533 162  7.807701  0.0000
treat       -0.2144487 0.2174843  39 -0.986042  0.3302
time:treat   0.1979578 0.1622534 162  1.220053  0.2242
 Correlation: 
           (Intr) time   treat 
time       -0.023              
treat      -0.681  0.016       
time:treat  0.016 -0.681 -0.023

Standardized Within-Group Residuals:
         Min           Q1          Med           Q3          Max 
-3.198315285 -0.384858426  0.002705899  0.404637305  2.049705655 

Number of Observations: 205
Number of Groups: 41 

Câu trả lời:


18

Dựa trên mô tả của bạn, có vẻ như bạn có một mô hình đo lặp lại với một yếu tố điều trị duy nhất. Vì tôi không có quyền truy cập vào tập dữ liệu ( raw3.42), tôi sẽ sử dụng dữ liệu Orthodont từ nlmegói để minh họa những gì đang diễn ra ở đây. Cấu trúc dữ liệu là như nhau (các phép đo lặp lại cho hai nhóm khác nhau - trong trường hợp này là nam và nữ).

Nếu bạn chạy đoạn mã sau:

library(nlme)
data(Orthodont)

res <- lme(distance ~ age*Sex, random = ~ 1 | Subject, data = Orthodont)
anova(res)

bạn sẽ nhận được kết quả như sau:

            numDF denDF  F-value p-value
(Intercept)     1    79 4123.156  <.0001
age             1    79  122.450  <.0001
Sex             1    25    9.292  0.0054
age:Sex         1    79    6.303  0.0141

Nếu bạn chạy:

res <- aov(distance ~ age*Sex + Error(Subject), data = Orthodont)
summary(res)

bạn sẽ nhận được:

Error: Subject
          Df Sum Sq Mean Sq F value   Pr(>F)   
Sex        1 140.46 140.465  9.2921 0.005375 **
Residuals 25 377.91  15.117                    

Error: Within
          Df  Sum Sq Mean Sq  F value  Pr(>F)    
age        1 235.356 235.356 122.4502 < 2e-16 ***
age:Sex    1  12.114  12.114   6.3027 0.01410 *  
Residuals 79 151.842   1.922                     

Lưu ý rằng các bài kiểm tra F là giống hệt nhau.

Đối với lme(), bạn đã sử dụng list(id=pdDiag(~time)), không chỉ thêm một giao thoa ngẫu nhiên cho mô hình, mà còn có độ dốc ngẫu nhiên. Hơn nữa, bằng cách sử dụng pdDiag, bạn đang đặt mối tương quan giữa đánh chặn ngẫu nhiên và độ dốc về không. Đây là một mô hình khác với những gì bạn đã chỉ định thông qua aov()và do đó bạn nhận được các kết quả khác nhau.


Cảm ơn @Wolfgang; lời giải thích của bạn giúp rất nhiều. Một câu hỏi tiếp theo mà tôi có sau đó là đây. Tôi thực sự đang phân tích một mô hình đo lường lặp đi lặp lại với một yếu tố điều trị duy nhất. Mỗi đối tượng được phân ngẫu nhiên vào điều trị A hoặc B. Sau đó, chúng được đo ở 0 phút, 15 phút, 30 phút, 60 phút, 120 phút và 180 phút. Theo hiểu biết của tôi, thời gian nên là một yếu tố ngẫu nhiên vì nó chỉ là các mẫu từ thời gian 0 đến 180 phút. Vậy, tôi nên làm gì: lme (UOP.kg ~ time * đãi, ngẫu nhiên = ~ time | id, raw3.42)?
biostat_newbie

Có, nhưng tôi sẽ nghĩ về nó theo cách này: Về cơ bản, bạn cho phép chặn và độ dốc của đường hồi quy (của UOP.kg đúng giờ) khác nhau (ngẫu nhiên) giữa các đối tượng trong cùng một nhóm điều trị. Đây là những gì ngẫu nhiên = ~ thời gian | id sẽ làm. Những gì mô hình sau đó sẽ cho bạn biết là lượng biến thiên ước tính trong các phần chặn và độ dốc. Hơn nữa, thời gian: xử lý thuật ngữ tương tác cho biết độ dốc trung bình có khác nhau đối với A và B.
Wolfgang

Cảm ơn @Wolfgang! Tôi có thể sử dụng Error(Subject/age), vì tôi đã tra cứu một số hướng dẫn, nói rằng điều đó /agecó nghĩa là biện pháp lặp đi lặp lại dọc theo yếu tố đó? Đây có giống như của bạn Error(Subject)? Một câu hỏi khác là: đối với dữ liệu không cân bằng, aovlmecó thể có kết quả khác nhau, phải không?
breezeintopl

1

Tôi chỉ nói thêm rằng bạn có thể muốn cài đặt cargói và sử dụng Anova()gói này cung cấp thay anova()vì vì aov()lm()đối tượng, vanilla anova()sử dụng tổng bình phương tuần tự, dẫn đến kết quả sai cho kích thước mẫu không bằng nhau trong khi lme()nó sử dụng loại -Tôi hoặc tổng bình phương loại III tùy thuộc vào typeđối số, nhưng tổng bình phương loại III vi phạm lề - nghĩa là nó xử lý các tương tác không khác gì các hiệu ứng chính.

Danh sách trợ giúp R ​​không có gì hay để nói về tổng bình phương loại I và loại III, và đây là những lựa chọn duy nhất! Đi hình.

Chỉnh sửa: Trên thực tế, có vẻ như loại II không hợp lệ nếu có một thuật ngữ tương tác quan trọng và có vẻ như điều tốt nhất mà mọi người có thể làm là sử dụng loại III khi có tương tác. Tôi đã nhận được câu trả lời cho nó bằng một câu trả lời cho một trong những câu hỏi của riêng tôi mà lần lượt chỉ cho tôi bài viết này .


0

Dường như với tôi, bạn có nhiều biện pháp cho mỗi id mỗi lần. Bạn cần tổng hợp những thứ này cho aov vì nó không công bằng làm tăng sức mạnh trong phân tích đó. Tôi không nói làm tổng hợp sẽ làm cho kết quả giống nhau nhưng nó sẽ làm cho chúng giống nhau hơn.

dat.agg <- aggregate(UOP.kg ~ time + treat + id, raw3.42, mean)

Sau đó chạy mô hình aov của bạn như trước khi thay thế dữ liệu bằng dat.agg.

Ngoài ra, tôi tin rằng anova (lme) là nhiều hơn những gì bạn muốn làm để so sánh kết quả. Hướng và cường độ của một hiệu ứng không giống như tỷ lệ phương sai của mô hình với sai số.

(BTW, nếu bạn thực hiện phân tích lme trên dữ liệu tổng hợp mà bạn không nên và kiểm tra anova (lme) bạn sẽ nhận được kết quả gần như tương tự như aov)

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.