เหตุใดการถดถอยเชิงเส้นและ ANOVA จึงให้ค่า


22

ฉันพยายามใส่ข้อมูลอนุกรมเวลาหนึ่งชุด (โดยไม่ทำซ้ำ) โดยใช้แบบจำลองการถดถอย ข้อมูลมีลักษณะดังนี้:

> 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

เนื่องจากไม่มีการลอกเลียนแบบฉันจึงใช้เวลาเป็นตัวแปรต่อเนื่อง คอลัมน์ "treat" แสดงเคสและข้อมูลการควบคุมตามลำดับ

ก่อนอื่นฉันพอดีกับโมเดล "value = time * treat" กับ "lm" ใน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    

ระยะเวลาและการรักษาไม่สำคัญ

ในขณะที่กับ anova ฉันได้ผลลัพธ์ที่แตกต่าง:

 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                 

ค่า pvalue สำหรับเวลาและการรักษาเปลี่ยนไป

ด้วยการถดถอยเชิงเส้นถ้าฉันพูดถูกมันหมายถึงเวลาและการรักษาไม่มีผลกระทบต่อมูลค่าอย่างมีนัยสำคัญ แต่ด้วย ANOVA นั่นหมายถึงเวลาและการรักษามีอิทธิพลอย่างมีนัยสำคัญต่อมูลค่า

มีใครอธิบายให้ฉันฟังหน่อยได้ไหมว่าทำไมถึงมีความแตกต่างในสองวิธีนี้และวิธีใดที่จะใช้


3
คุณอาจต้องการค้นหาผลรวมของสี่เหลี่ยมสองสามชนิด โดยเฉพาะฉันเชื่อว่าการถดถอยเชิงเส้นจะคืนค่าผลรวมกำลังสองของประเภท III ในขณะที่โนวาส่งคืนชนิดอื่น
สันนิษฐานว่าปกติ

3
หากคุณบันทึกผลลัพธ์ของlmและaovคุณสามารถตรวจสอบว่าพวกเขาผลิตพอดีพอดี; เช่นเปรียบเทียบส่วนที่เหลือของพวกเขากับresidualsฟังก์ชั่นหรือตรวจสอบค่าสัมประสิทธิ์ของพวกเขา ( $coefficientsช่องในทั้งสองกรณี)
whuber

คำตอบ:


18

พอดีสำหรับ lm () และ aov () เหมือนกัน แต่การรายงานนั้นแตกต่างกัน การทดสอบ t คือผลกระทบเล็กน้อยของตัวแปรที่เป็นปัญหาโดยมีการปรากฏตัวของตัวแปรอื่นทั้งหมด การทดสอบ F เป็นลำดับ - ดังนั้นพวกเขาจึงทดสอบความสำคัญของเวลาในการปรากฏตัวของไม่มีอะไรนอกจากการสกัดกั้นของการรักษาในการปรากฏตัวของอะไร แต่การสกัดกั้นและเวลาและการมีปฏิสัมพันธ์ในการปรากฏตัวของทั้งหมด

สมมติว่าคุณมีความสนใจในความสำคัญของการรักษาฉันขอแนะนำให้คุณพอดีสองรุ่นหนึ่งกับและหนึ่งโดยเปรียบเทียบทั้งสองโดยวางทั้งสองรุ่นใน anova () และใช้การทดสอบ F ที่ นี้จะทดสอบการรักษาและการโต้ตอบพร้อมกัน

พิจารณาสิ่งต่อไปนี้:

> 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 

ขอบคุณสำหรับคำอธิบายอย่างละเอียดมันทำให้ฉันนึกถึง ANCOVA (การวิเคราะห์ความแปรปรวนร่วม) ขั้นตอนแรกของ ANCOVA คือการทดสอบการทำงานร่วมกันระหว่างปัจจัยเด็ดขาดกับ covariate เพื่อดูว่าพวกเขามีความชันเท่ากันทั้งสองเงื่อนไขหรือไม่ มันค่อนข้างคล้ายกับสิ่งที่ฉันทำที่นี่ ใน ANCOVA จะช่วยให้ pvalue เดียวกันสำหรับการปฏิสัมพันธ์ใน t-test และ aovF-ทดสอบตั้งแต่ปฏิสัมพันธ์เป็นคำสุดท้ายใน
shao


2

คำตอบสองข้อข้างต้นนั้นยอดเยี่ยม แต่คิดว่าฉันจะเพิ่มอีกเล็กน้อย นักเก็ตของข้อมูลอีกสามารถรวบรวมได้จากที่นี่

เมื่อคุณรายงานlm()ผลลัพธ์ด้วยคำที่ใช้โต้ตอบคุณจะพูดว่า: "treat 1 แตกต่างจาก treat 0 (เบต้า! = 0, p = 0.0925) เมื่อเวลาถูกตั้งค่าเป็นฐาน 1 " ในขณะที่anova()ผลลัพธ์ ( ดังที่ได้กล่าวไปแล้ว ) จะไม่สนใจตัวแปรอื่น ๆ และเกี่ยวข้องกับตัวเองเท่านั้นที่มีความแตกต่างของความแปรปรวน

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

ในกรณีนี้เราจะเห็นว่าค่า p ที่รายงานเหมือนกัน นั่นเป็นเพราะในกรณีของรุ่นที่เรียบง่ายกว่านี้


คำตอบนี้น่าเสียดายที่ดูเหมือนยังไม่เสร็จ ยัง +1 สำหรับลิงค์และกล่าวถึงว่าผลที่ได้คือเนื่องจากรูปแบบการเข้ารหัสที่แตกต่างกัน
อะมีบาพูดว่า Reinstate Monica

2
เราควรเพิ่มสิ่งนั้นsummary(lm)และanova(lm)จะไม่ให้ผลลัพธ์ที่เหมือนกันเสมอไปหากไม่มีคำศัพท์โต้ตอบ มันเกิดขึ้นอย่างนั้นในข้อมูลเหล่านี้timeและtreatเป็นมุมฉากและผลรวมของประเภท I (เรียงลำดับ) และ III (ส่วนเพิ่ม) ของสี่เหลี่ยมจัตุรัสให้ผลลัพธ์ที่เหมือนกัน
อะมีบาพูดว่า Reinstate Monica

2
  • ความแตกต่างนั้นเกี่ยวข้องกับการเปรียบเทียบแบบคู่ในประเภทของแบบจำลองเรียงซ้อน
  • นอกจากนี้ฟังก์ชัน aov () ยังมีปัญหาเกี่ยวกับวิธีเลือกองศาอิสระ ดูเหมือนว่าจะผสมผสานแนวคิดสองอย่าง: 1) ผลรวมของกำลังสองจากการเปรียบเทียบแบบขั้นตอน 2) องศาอิสระจากภาพรวม

ปัญหาการสืบพันธุ์

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

บางรุ่นที่ใช้ในการอธิบาย

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

LM T_TEST ทำงานอย่างไรและสัมพันธ์กับการทดสอบแบบ F

# 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

วิธีการทำงานและเลือก DF ด้วยวิธีการทดสอบ

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

โน๊ตสำคัญ

> # 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.