Mengapa regresi linier dan ANOVA memberikan nilai

22

Saya mencoba memasukkan satu data deret waktu (tanpa ulangan) menggunakan model regresi. Data terlihat seperti berikut:

> 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

Karena kurangnya ulangan, saya memperlakukan waktu sebagai variabel kontinu. Kolom "perlakukan" menunjukkan masing-masing kasing dan data kontrol.

Pertama, saya cocok dengan model "value = time * treat" dengan "lm" di 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    

Nilai waktu dan perawatan tidak signifikan.

Sementara dengan anova, saya mendapat hasil berbeda:

 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                 

Nilai waktu dan perawatan berubah.

Dengan regresi linier, jika saya benar, itu berarti waktu dan perlakuan tidak memiliki pengaruh signifikan terhadap nilai, tetapi dengan ANOVA, itu berarti waktu dan perlakuan memiliki pengaruh signifikan terhadap nilai.

Bisakah seseorang menjelaskan kepada saya mengapa ada perbedaan dalam dua metode ini, dan mana yang harus digunakan?

shao
sumber
3
Anda mungkin ingin mencari berbagai jenis jumlah kotak. Secara khusus, saya percaya regresi linier mengembalikan tipe III jumlah kuadrat, sedangkan anova mengembalikan jenis yang berbeda.
Diasumsikan normal
3
Jika Anda menyimpan hasil lmdan aovAnda dapat memeriksa mereka menghasilkan cocok identik; misalnya, membandingkan residu mereka dengan residualsfungsi atau memeriksa koefisien mereka ( $coefficientsslot dalam kedua kasus).
Whuber

Jawaban:

18

Kesesuaian untuk lm () dan aov () identik tetapi pelaporannya berbeda. Tes t adalah dampak marginal dari variabel yang bersangkutan, mengingat keberadaan semua variabel lainnya. Tes F berurutan - sehingga mereka menguji pentingnya waktu di hadapan apa pun kecuali intersepsi, perawatan di hadapan apa pun kecuali intersepsi dan waktu, dan interaksi di hadapan semua hal di atas.

Dengan asumsi Anda tertarik pada pentingnya perawatan, saya sarankan Anda memasukkan dua model, satu dengan, dan satu tanpa, membandingkan keduanya dengan meletakkan kedua model dalam anova (), dan menggunakan uji F itu. Ini akan menguji suguhan dan interaksi secara bersamaan.

Pertimbangkan yang berikut ini:

> 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 
Peter Ellis
sumber
Terima kasih atas penjelasannya, ini mengingatkan saya pada ANCOVA (analisis kovarians). Langkah pertama ANCOVA adalah untuk menguji interaksi antara faktor kategori dan kovariat untuk melihat apakah mereka memiliki kemiringan yang identik untuk kedua kondisi tersebut. Ini sangat mirip dengan apa yang saya lakukan di sini. Dalam ANCOVA, memberikan nilai yang sama untuk interaksi dalam uji-t dan uji-F karena interaksi adalah istilah terakhir di aov.
shao
17

Jawaban Peter Ellis luar biasa, tetapi ada hal lain yang harus dikemukakan. The statistik-test (dan yang -nilai) adalah tes apakah . Uji pada cetakan adalah apakah variabel yang ditambahkan secara signifikan mengurangi jumlah sisa kuadrat.p β = 0 Fthalβ=0Fanova()

Uji - adalah urutan-independen, sedangkan uji- tidak. Oleh karena itu saran Peter agar Anda mencoba variabel dalam urutan yang berbeda. Mungkin juga bahwa variabel yang signifikan dalam satu tes mungkin tidak signifikan dalam yang lain (dan sebaliknya).FtF

Perasaan saya (dan kontributor lainnya dipersilakan untuk mengoreksi saya) adalah bahwa ketika Anda mencoba untuk memprediksi fenomena (seperti dalam aplikasi sistem), Anda paling tertarik untuk mengurangi varians dengan prediktor paling sedikit, dan karenanya menginginkan anova()hasilnya. Namun, jika Anda mencoba menetapkan efek marginal pada , Anda akan sangat peduli dengan signifikansi minat Anda, dan semua variabel lain hanya akan mengontrol penjelasan alternatif yang akan dicari oleh pengulas sejawat Anda.y βXyβ

gregmacfarlane
sumber
2

Dua jawaban di atas sangat bagus, tetapi saya pikir saya akan menambahkan sedikit lebih banyak. Nugget informasi lain dapat diperoleh dari sini .

Saat Anda melaporkan lm()hasil dengan istilah interaksi, Anda mengatakan sesuatu seperti: "memperlakukan 1 berbeda dari memperlakukan 0 (beta! = 0, p = 0,0925), ketika waktu diatur ke nilai dasar 1 ". Sedangkan anova()hasil ( seperti yang disebutkan sebelumnya ) mengabaikan variabel lain dan hanya menyangkut perbedaan varians.

Anda dapat membuktikan ini dengan menghapus istilah interaksi Anda dan menggunakan model sederhana dengan hanya dua efek utama ( 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

Dalam hal ini kita melihat bahwa nilai-p yang dilaporkan adalah sama; itu karena dalam kasus model yang lebih sederhana ini,

Constantino
sumber
Sayangnya jawaban ini sepertinya belum selesai. Masih memberi +1 untuk tautan dan untuk menyebutkan bahwa efeknya disebabkan oleh skema pengkodean yang berbeda.
Amuba mengatakan Reinstate Monica
2
Orang juga harus menambahkan itu summary(lm)dan anova(lm)tidak akan selalu memberikan hasil yang identik jika tidak ada istilah interaksi. Kebetulan dalam data ini timedan jumlah treatortogonal dan tipe I (berurutan) dan III (marginal) kuadrat menghasilkan hasil yang identik.
Amuba mengatakan Reinstate Monica
2
  • Perbedaannya ada hubungannya dengan jenis perbandingan model cascading berpasangan.
  • Juga, fungsi aov () memiliki masalah dengan bagaimana ia memilih derajat kebebasan. Tampaknya untuk mencampur dua konsep: 1) jumlah kuadrat dari perbandingan bertahap, 2) derajat kebebasan dari gambaran keseluruhan.

REPRODUKSI MASALAH

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

BEBERAPA MODEL YANG DIGUNAKAN DALAM PENJELASAN

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

BAGAIMANA LM T_TEST BEKERJA DAN TERKAIT DENGAN 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

BAGAIMANA AOV BEKERJA DAN MEMILIH DF DALAM F-TES

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

CATATAN PENTING

> # 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
Sextus Empiricus
sumber