Чому лінійна регресія та 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

Через брак реплік я вважаю час безперервним змінним. У колонці "обробляти" відображаються дані випадку та контрольних даних відповідно.

По-перше, я вписую модель "value = час * лікування" з "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                 

Пвалів часу та частування змінився.

Якщо лінійна регресія, якщо я правий, це означає, що час і лікування не мають істотного впливу на цінність, але з ANOVA це означає, що час і лікування мають значний вплив на цінність.

Чи може хтось мені пояснити, чому є різниця в цих двох методах, і який із них використовувати?


3
Можливо, ви захочете знайти різні види площ. Зокрема, я вважаю, що лінійна регресія повертає суму квадратів III типу, тоді як anova повертає інший вид.
припускаєтьсянормальне

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 - перевірити взаємодію між категоріальним фактором і коваріатом, щоб перевірити, чи мають вони однаковий нахил для обох умов. Це досить схоже на те, що я тут робив. У ANCOVA він дає однакове значення для взаємодії в t-тесті та F-тесті, оскільки взаємодія є останнім терміном у aov.
шао

17

Відповідь Пітера Елліса - відмінна, але слід сказати ще один момент. -test статистика (і його -значення) є випробуванням чи . -test на роздруківці , чи є значно знижує доданий змінна залишкову суму квадратів.p β = 0 Ftpβ=0Fanova()

-test замовити незалежний, в той час як -test немає. Звідси пропозиція Петра спробувати змінні в різних порядках. Можливо також, що змінні, важливі в одному тесті, не можуть бути значущими в іншому (і навпаки).FtF

Моє відчуття (і інші учасники, які бажають мене виправити), полягає в тому, що, коли ви намагаєтеся передбачити явища (як у системному застосуванні), вам найбільше цікаво зменшити дисперсію з найменшими прогнозами, і тому хочете отримати anova()результати. Якщо ви намагаєтесь встановити граничний вплив на , то вас найбільше хвилює важливість вашої конкретної цікавості, а всі інші змінні просто контролюватимуть альтернативні пояснення, які намагатимуться знайти ваші рецензенти.y βXyβ


2

Наведені вище відповіді чудові, але я подумав би додати трохи більше. Ще один інформаційний елемент можна отримати тут .

Коли ви повідомляєте про lm()результати з терміном взаємодії, ви говорите щось на кшталт: "обробка 1 відрізняється, ніж лікувати 0 (бета! = 0, р = 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

У цьому випадку ми бачимо, що повідомлені р-значення однакові; це тому, що у випадку цієї простішої моделі,


Ця відповідь, на жаль, виглядає незавершеною. Ще +1 для посилання та згадування, що ефект обумовлений різними схемами кодування.
амеба каже: Відновити Моніку

2
Слід також додати , що summary(lm)і anova(lm)не завжди дає однаковий результат , якщо немає терміна взаємодії. Просто так вийшло , що в цих даних timeі treatортогональні і тому типу I (послідовний) і III (граничні) суми квадратів дають однакові результати.
амеба каже, що поверніть Моніку

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

ЯК РОБОТИ І ВИБОРИ DF в F-ТЕСТАХ

> #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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.