Tại sao hồi quy tuyến tính và ANOVA cho giá trị


22

Tôi đã cố gắng để phù hợp với một dữ liệu chuỗi thời gian (không có bản sao) bằng mô hình hồi quy. Dữ liệu trông như sau:

> xx.2
          value time treat
    1  8.788269    1     0
    2  7.964719    6     0
    3  8.204051   12     0
    4  9.041368   24     0
    5  8.181555   48     0
    6  8.041419   96     0
    7  7.992336  144     0
    8  7.948658    1     1
    9  8.090211    6     1
    10 8.031459   12     1
    11 8.118308   24     1
    12 7.699051   48     1
    13 7.537120   96     1
    14 7.268570  144     1

Vì thiếu bản sao, tôi coi thời gian là biến liên tục. Cột "xử lý" hiển thị trường hợp và dữ liệu kiểm soát, tương ứng.

Đầu tiên, tôi phù hợp với mô hình "value = time * Treat" với "lm" trong R:

summary(lm(value~time*treat,data=xx.2))

Call:
lm(formula = value ~ time * treat, data = xx.2)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.50627 -0.12345  0.00296  0.04124  0.63785 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  8.493476   0.156345  54.325 1.08e-13 ***
time        -0.003748   0.002277  -1.646   0.1307    
treat       -0.411271   0.221106  -1.860   0.0925 .  
time:treat  -0.001938   0.003220  -0.602   0.5606    

Giá trị của thời gian và điều trị là không đáng kể.

Trong khi với anova, tôi đã nhận được kết quả khác nhau:

 summary(aov(value~time*treat,data=xx.2))
            Df Sum Sq Mean Sq F value Pr(>F)  
time         1 0.7726  0.7726   8.586 0.0150 *
treat        1 0.8852  0.8852   9.837 0.0106 *
time:treat   1 0.0326  0.0326   0.362 0.5606  
Residuals   10 0.8998  0.0900                 

Giá trị cho thời gian và điều trị thay đổi.

Với hồi quy tuyến tính, nếu tôi đúng, điều đó có nghĩa là thời gian và điều trị không có ảnh hưởng đáng kể đến giá trị, nhưng với ANOVA, điều đó có nghĩa là thời gian và điều trị có ảnh hưởng đáng kể đến giá trị.

Ai đó có thể giải thích cho tôi tại sao có sự khác biệt trong hai phương pháp này và sử dụng phương pháp nào không?


3
Bạn có thể muốn tìm kiếm các loại hình vuông khác nhau. Cụ thể, tôi tin rằng hồi quy tuyến tính trả về tổng bình phương loại III, trong khi anova trả về một loại khác.
giả định

3
Nếu bạn lưu kết quả lmaovbạn có thể kiểm tra chúng tạo ra sự phù hợp giống hệt nhau; ví dụ, so sánh phần dư của chúng với residualshàm hoặc kiểm tra hệ số của chúng ( $coefficientsvị trí trong cả hai trường hợp).
whuber

Câu trả lời:


18

Sự phù hợp cho lm () và aov () là giống hệt nhau nhưng báo cáo là khác nhau. Các bài kiểm tra t là tác động biên của các biến trong câu hỏi, với sự có mặt của tất cả các biến khác. Các thử nghiệm F là tuần tự - vì vậy chúng kiểm tra tầm quan trọng của thời gian khi không có gì ngoài sự đánh chặn, đối xử với sự hiện diện của không có gì ngoài sự đánh chặn và thời gian, và sự tương tác với sự hiện diện của tất cả những điều trên.

Giả sử bạn quan tâm đến tầm quan trọng của điều trị, tôi khuyên bạn nên kết hợp hai mô hình, một với và một không có, so sánh hai mô hình bằng cách đặt cả hai mô hình vào anova () và sử dụng thử nghiệm F đó. Điều này sẽ kiểm tra điều trị và sự tương tác đồng thời.

Hãy xem xét những điều sau đây:

> xx.2 <- as.data.frame(matrix(c(8.788269, 1, 0,
+ 7.964719, 6, 0,
+ 8.204051, 12, 0,
+ 9.041368, 24, 0,
+ 8.181555, 48, 0,
+ 8.041419, 96, 0,
+ 7.992336, 144, 0,
+ 7.948658, 1, 1,
+ 8.090211, 6, 1,
+ 8.031459, 12, 1,
+ 8.118308, 24, 1,
+ 7.699051, 48, 1,
+ 7.537120, 96, 1,
+ 7.268570, 144, 1), byrow=T, ncol=3))
> names(xx.2) <- c("value", "time", "treat")
> 
> mod1 <- lm(value~time*treat, data=xx.2)
> anova(mod1)
Analysis of Variance Table

Response: value
           Df  Sum Sq Mean Sq F value  Pr(>F)  
time        1 0.77259 0.77259  8.5858 0.01504 *
treat       1 0.88520 0.88520  9.8372 0.01057 *
time:treat  1 0.03260 0.03260  0.3623 0.56064  
Residuals  10 0.89985 0.08998                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 
> mod2 <- aov(value~time*treat, data=xx.2)
> anova(mod2)
Analysis of Variance Table

Response: value
           Df  Sum Sq Mean Sq F value  Pr(>F)  
time        1 0.77259 0.77259  8.5858 0.01504 *
treat       1 0.88520 0.88520  9.8372 0.01057 *
time:treat  1 0.03260 0.03260  0.3623 0.56064  
Residuals  10 0.89985 0.08998                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 
> summary(mod2)
            Df Sum Sq Mean Sq F value Pr(>F)  
time         1 0.7726  0.7726   8.586 0.0150 *
treat        1 0.8852  0.8852   9.837 0.0106 *
time:treat   1 0.0326  0.0326   0.362 0.5606  
Residuals   10 0.8998  0.0900                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 
> summary(mod1)

Call:
lm(formula = value ~ time * treat, data = xx.2)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.50627 -0.12345  0.00296  0.04124  0.63785 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  8.493476   0.156345  54.325 1.08e-13 ***
time        -0.003748   0.002277  -1.646   0.1307    
treat       -0.411271   0.221106  -1.860   0.0925 .  
time:treat  -0.001938   0.003220  -0.602   0.5606    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 0.3 on 10 degrees of freedom
Multiple R-squared: 0.6526,     Adjusted R-squared: 0.5484 
F-statistic: 6.262 on 3 and 10 DF,  p-value: 0.01154 

Cảm ơn đã giải thích cặn kẽ, nó làm tôi nhớ đến ANCOVA (phân tích hiệp phương sai). Bước đầu tiên của ANCOVA là kiểm tra sự tương tác giữa yếu tố phân loại và hiệp phương sai để xem liệu chúng có độ dốc giống hệt nhau cho cả hai điều kiện hay không. Nó khá giống với những gì tôi đã làm ở đây. Trong ANCOVA, nó đưa ra giá trị tương tự cho tương tác trong kiểm tra t và kiểm tra F vì tương tác là thuật ngữ cuối cùng trong aov.
shao


2

Hai câu trả lời trên là tuyệt vời, nhưng tôi nghĩ tôi sẽ thêm một chút nữa. Một mẩu thông tin khác có thể được lượm lặt từ đây .

Khi bạn báo cáo lm()kết quả với thuật ngữ tương tác, bạn sẽ nói điều gì đó như: "điều trị 1 khác với điều trị 0 (beta! = 0, p = 0,0925), khi thời gian được đặt thành giá trị cơ bản là 1 ". Trong khi đó các anova()kết quả ( như đã đề cập trước đó ) bỏ qua bất kỳ biến nào khác và chỉ quan tâm đến sự khác biệt về phương sai.

Bạn có thể chứng minh điều này bằng cách xóa thuật ngữ tương tác của mình và sử dụng một mô hình đơn giản chỉ có hai hiệu ứng chính ( m1 ):

> m1 = lm(value~time+treat,data=dat)
> summary(m1)

Call:
lm(formula = value ~ time + treat, data = dat)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.54627 -0.10533 -0.04574  0.11975  0.61528 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  8.539293   0.132545  64.426 1.56e-15 ***
time        -0.004717   0.001562  -3.019  0.01168 *  
treat       -0.502906   0.155626  -3.232  0.00799 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.2911 on 11 degrees of freedom
Multiple R-squared:   0.64, Adjusted R-squared:  0.5746 
F-statistic: 9.778 on 2 and 11 DF,  p-value: 0.003627

> anova(m1)
Analysis of Variance Table

Response: value
          Df  Sum Sq Mean Sq F value   Pr(>F)   
time       1 0.77259 0.77259  9.1142 0.011677 * 
treat      1 0.88520 0.88520 10.4426 0.007994 **
Residuals 11 0.93245 0.08477                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Trong trường hợp này, chúng ta thấy rằng các giá trị p được báo cáo là như nhau; đó là bởi vì trong trường hợp của mô hình đơn giản hơn này,


Câu trả lời này không may có vẻ dang dở. Vẫn +1 cho liên kết và đề cập rằng hiệu ứng này là do các sơ đồ mã hóa khác nhau.
amip nói rằng Phục hồi lại

2
Người ta cũng nên thêm điều đó summary(lm)anova(lm)sẽ không luôn luôn cho kết quả giống hệt nhau nếu không có thuật ngữ tương tác. Nó chỉ xảy ra rằng trong các dữ liệu này timetreatlà trực giao và do đó các tổng bình phương loại I (tuần tự) và III (cận biên) cho kết quả giống hệt nhau.
amip nói phục hồi Monica

2
  • Sự khác biệt có liên quan đến kiểu so sánh cặp của các mô hình xếp tầng.
  • Ngoài ra, hàm aov () có vấn đề với cách nó chọn mức độ tự do. Nó dường như trộn lẫn hai khái niệm: 1) tổng bình phương từ các so sánh từng bước, 2) mức độ tự do từ một bức tranh tổng thể.

ĐẠI DIỆN

> data <- list(value = c (8.788269,7.964719,8.204051,9.041368,8.181555,8.0414149,7.992336,7.948658,8.090211,8.031459,8.118308,7.699051,7.537120,7.268570), time = c(1,6,12,24,48,96,144,1,6,12,24,48,96,144), treat = c(0,0,0,0,0,0,0,1,1,1,1,1,1,1) )
> summary( lm(value ~ treat*time, data=data) )
> summary( aov(value ~ 1 + treat + time + I(treat*time),data=data) )

MỘT SỐ MÔ HÌNH SỬ DỤNG TRONG KHAI THÁC

#all linear models used in the explanation below
> model_0                      <- lm(value ~ 1, data)
> model_time                   <- lm(value ~ 1 + time, data)
> model_treat                  <- lm(value ~ 1 + treat, data)
> model_interaction            <- lm(value ~ 1 + I(treat*time), data)
> model_treat_time             <- lm(value ~ 1 + treat + time, data)
> model_treat_interaction      <- lm(value ~ 1 + treat + I(treat*time), data)
> model_time_interaction       <- lm(value ~ 1 + time + I(treat*time), data)
> model_treat_time_interaction <- lm(value ~ 1 + time + treat + I(treat*time), data)

CÁCH LM T_TEST LÀM VIỆC VÀ LIÊN QUAN ĐẾN F-TEST

# the t-test with the estimator and it's variance, mean square error, is
# related to the F test of pairwise comparison of models by dropping 1
# model parameter

> anova(model_treat_time_interaction, model_time_interaction)

Analysis of Variance Table

Model 1: value ~ 1 + time + treat + I(treat * time)
Model 2: value ~ 1 + time + I(treat * time)
  Res.Df     RSS Df Sum of Sq      F  Pr(>F)  
1     10 0.89985                              
2     11 1.21118 -1  -0.31133 3.4598 0.09251 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

> anova(model_treat_time_interaction, model_treat_interaction)

Analysis of Variance Table

Model 1: value ~ 1 + time + treat + I(treat * time)
Model 2: value ~ 1 + treat + I(treat * time)
  Res.Df     RSS Df Sum of Sq      F Pr(>F)
1     10 0.89985                           
2     11 1.14374 -1   -0.2439 2.7104 0.1307

> anova(model_treat_time_interaction, model_treat_time)

Analysis of Variance Table

Model 1: value ~ 1 + time + treat + I(treat * time)
Model 2: value ~ 1 + treat + time
  Res.Df     RSS Df Sum of Sq      F Pr(>F)
1     10 0.89985                           
2     11 0.93245 -1 -0.032599 0.3623 0.5606

> # which is the same as
> drop1(model_treat_time_interaction, scope  = ~time+treat+I(treat*time), test="F")

Single term deletions

Model:
value ~ 1 + time + treat + I(treat * time)
                Df Sum of Sq     RSS     AIC F value  Pr(>F)  
<none>                       0.89985 -30.424                  
time             1  0.243896 1.14374 -29.067  2.7104 0.13072  
treat            1  0.311333 1.21118 -28.264  3.4598 0.09251 .
I(treat * time)  1  0.032599 0.93245 -31.926  0.3623 0.56064  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

LÀM THẾ NÀO AOV LÀM VIỆC VÀ LỰA CHỌN DF TRONG F-TEST

> #the aov function makes stepwise additions/drops
> 
> #first the time, then treat, then the interaction
> anova(model_0, model_time)

Analysis of Variance Table

Model 1: value ~ 1
Model 2: value ~ 1 + time
  Res.Df    RSS Df Sum of Sq      F  Pr(>F)  
1     13 2.5902                              
2     12 1.8176  1    0.7726 5.1006 0.04333 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

> anova(model_time, model_treat_time)

Analysis of Variance Table

Model 1: value ~ 1 + time
Model 2: value ~ 1 + treat + time
  Res.Df     RSS Df Sum of Sq      F   Pr(>F)   
1     12 1.81764                                
2     11 0.93245  1    0.8852 10.443 0.007994 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

> anova(model_treat_time, model_treat_time_interaction)

Analysis of Variance Table

Model 1: value ~ 1 + treat + time
Model 2: value ~ 1 + time + treat + I(treat * time)
  Res.Df     RSS Df Sum of Sq      F Pr(>F)
1     11 0.93245                           
2     10 0.89985  1  0.032599 0.3623 0.5606

> 
> # note that the sum of squares for within model variation is the same
> # but the F values and p-values are not the same because the aov 
> # function somehow chooses to use the degrees of freedom in the 
> # complete model in all stepwise changes
>

LƯU Ý QUAN TRỌNG

> # Although the p and F values do not exactly match, it is this effect
> # of order and selection of cascading or not in model comparisons. 
> # An important note to make is that the comparisons are made by 
> # stepwise additions and changing the order of variables has an 
> # influence on the outcome!
>
> # Additional note changing the order of 'treat' and 'time' has no 
> # effect because they are not correlated

> summary( aov(value ~ 1 + treat + time +I(treat*time), data=data) )

        Df Sum Sq Mean Sq F value Pr(>F)  
treat            1 0.8852  0.8852   9.837 0.0106 *
time             1 0.7726  0.7726   8.586 0.0150 *
I(treat * time)  1 0.0326  0.0326   0.362 0.5606  
Residuals       10 0.8998  0.0900                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

> summary( aov(value ~ 1 + I(treat*time) + treat + time, data=data) )

                Df Sum Sq Mean Sq F value  Pr(>F)   
I(treat * time)  1 1.3144  1.3144  14.606 0.00336 **
treat            1 0.1321  0.1321   1.469 0.25343   
time             1 0.2439  0.2439   2.710 0.13072   
Residuals       10 0.8998  0.0900                   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

> # This is an often forgotten quirck 
> # best is to use manual comparisons such that you know
> # and understand your hypotheses
> # (which is often forgotten in the click and
> #     point anova modelling tools)
> #
> # anova(model1, model2) 
> #     or use 
> # stepAIC from the MASS library
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.