Anova 3-czynnikowa

Wprowadzenie

Trójczynnikowa ANOVA jest rozszerzeniem dwukierunkowej ANOVA do oceny, czy istnieje efekt interakcji pomiędzy trzema niezależnymi zmiennymi kategorycznymi (jakościowymi) na ciągłą zmienną wynikową (ilościową).

Wykorzystamy zbiór danych headache [z pakietu datarium], który zawiera ankietę dot. miary bólu w epizodzie migrenowego bólu głowy u 72 uczestników leczonych trzema różnymi metodami. Wśród uczestników jest 36 mężczyzn i 36 kobiet. Mężczyźni i kobiety zostali dalej podzieleni na grupy o niskim lub wysokim ryzyku migreny.

Chcemy zrozumieć, jak każda niezależna zmienna (rodzaj leczenia, ryzyko migreny i płeć) współdziałają w przewidywaniu wyniku bólu.

Statystyki opisowe

summary(headache)
##        id          gender     risk    treatment   pain_score   
##  Min.   : 1.0   male  :36   high:36   X:24      Min.   : 63.7  
##  1st Qu.:18.8   female:36   low :36   Y:24      1st Qu.: 72.9  
##  Median :36.5                         Z:24      Median : 77.9  
##  Mean   :36.5                                   Mean   : 77.6  
##  3rd Qu.:54.2                                   3rd Qu.: 81.5  
##  Max.   :72.0                                   Max.   :100.0

Założenia

Obserwacje odstające

ggplot(headache, aes(x = gender, y = pain_score)) +
  geom_boxplot()

ggplot(headache, aes(x = gender, y = pain_score)) +
  geom_boxplot() +
  facet_wrap(treatment ~ risk, scales = 'free')

Normalność

headache = headache %>%
  mutate(grupa = paste(gender, risk, treatment, sep = '_'))

grupy = unique(headache$grupa)

sapply(grupy, function(x){
  headache %>% filter(grupa == x) %>% pull(pain_score) %>% shapiro.test()
})
##           male_low_X                    male_low_Y                   
## statistic 0.982                         0.92                         
## p.value   0.962                         0.507                        
## method    "Shapiro-Wilk normality test" "Shapiro-Wilk normality test"
## data.name "."                           "."                          
##           male_low_Z                    male_high_X                  
## statistic 0.924                         0.958                        
## p.value   0.535                         0.808                        
## method    "Shapiro-Wilk normality test" "Shapiro-Wilk normality test"
## data.name "."                           "."                          
##           male_high_Y                   male_high_Z                  
## statistic 0.902                         0.955                        
## p.value   0.384                         0.784                        
## method    "Shapiro-Wilk normality test" "Shapiro-Wilk normality test"
## data.name "."                           "."                          
##           female_low_X                  female_low_Y                 
## statistic 0.933                         0.927                        
## p.value   0.6                           0.555                        
## method    "Shapiro-Wilk normality test" "Shapiro-Wilk normality test"
## data.name "."                           "."                          
##           female_low_Z                  female_high_X                
## statistic 0.958                         0.714                        
## p.value   0.801                         0.00869                      
## method    "Shapiro-Wilk normality test" "Shapiro-Wilk normality test"
## data.name "."                           "."                          
##           female_high_Y                 female_high_Z                
## statistic 0.939                         0.971                        
## p.value   0.654                         0.901                        
## method    "Shapiro-Wilk normality test" "Shapiro-Wilk normality test"
## data.name "."                           "."

Jednorodność wariancji

Anova

anova = aov(pain_score ~ risk * gender * treatment, data = headache)
summary(anova)
##                       Df Sum Sq Mean Sq F value            Pr(>F)    
## risk                   1   1794    1794   92.70 0.000000000000088 ***
## gender                 1    313     313   16.20           0.00016 ***
## treatment              2    283     142    7.32           0.00143 ** 
## risk:gender            1      3       3    0.14           0.70849    
## risk:treatment         2     28      14    0.71           0.49422    
## gender:treatment       2    129      65    3.34           0.04220 *  
## risk:gender:treatment  2    287     143    7.41           0.00133 ** 
## Residuals             60   1161      19                              
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Testy post-hoc

Jeśli istnieje znaczący trójstronny efekt interakcji, można go rozłożyć na:

  • Prostą interakcję dwukierunkową: uruchomić interakcję dwukierunkową na każdym poziomie zmiennej trzeciej,
  • Prosty efekt główny: uruchom model jednokierunkowy na każdym poziomie drugiej zmiennej,
  • proste porównania parami: przeprowadź porównania parami lub inne porównania post-hoc, jeśli to konieczne.
TukeyHSD(anova)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = pain_score ~ risk * gender * treatment, data = headache)
## 
## $risk
##           diff   lwr   upr p adj
## low-high -9.98 -12.1 -7.91     0
## 
## $gender
##              diff   lwr  upr p adj
## female-male -4.17 -6.25 -2.1     0
## 
## $treatment
##        diff   lwr   upr p adj
## Y-X -4.1986 -7.25 -1.15 0.004
## Z-X -4.2152 -7.27 -1.16 0.004
## Z-Y -0.0166 -3.07  3.04 1.000
## 
## $`risk:gender`
##                          diff    lwr      upr p adj
## low:male-high:male     -10.37 -14.25  -6.4971 0.000
## high:female-high:male   -4.56  -8.44  -0.6874 0.015
## low:female-high:male   -14.15 -18.03 -10.2800 0.000
## high:female-low:male     5.81   1.94   9.6842 0.001
## low:female-low:male     -3.78  -7.66   0.0916 0.058
## low:female-high:female  -9.59 -13.47  -5.7181 0.000
## 
## $`risk:treatment`
##                 diff      lwr    upr p adj
## low:X-high:X  -10.70 -15.9843 -5.412 0.000
## high:Y-high:X  -4.04  -9.3298  1.243 0.230
## low:Y-high:X  -15.05 -20.3379 -9.765 0.000
## high:Z-high:X  -5.44 -10.7303 -0.158 0.040
## low:Z-high:X  -13.68 -18.9706 -8.398 0.000
## high:Y-low:X    6.65   1.3681 11.941 0.006
## low:Y-low:X    -4.35  -9.6400  0.933 0.164
## high:Z-low:X    5.25  -0.0324 10.540 0.052
## low:Z-low:X    -2.99  -8.2726  2.300 0.561
## low:Y-high:Y  -11.01 -16.2944 -5.722 0.000
## high:Z-high:Y  -1.40  -6.6868  3.886 0.970
## low:Z-high:Y   -9.64 -14.9270 -4.354 0.000
## high:Z-low:Y    9.61   4.3213 14.894 0.000
## low:Z-low:Y     1.37  -3.9190  6.654 0.973
## low:Z-high:Z   -8.24 -13.5265 -2.954 0.000
## 
## $`gender:treatment`
##                     diff    lwr   upr p adj
## female:X-male:X   -7.885 -13.17 -2.60 0.001
## male:Y-male:X     -6.655 -11.94 -1.37 0.006
## female:Y-male:X   -9.627 -14.91 -4.34 0.000
## male:Z-male:X     -7.327 -12.61 -2.04 0.002
## female:Z-male:X   -8.988 -14.27 -3.70 0.000
## male:Y-female:X    1.230  -4.06  6.52 0.983
## female:Y-female:X -1.742  -7.03  3.54 0.926
## male:Z-female:X    0.558  -4.73  5.84 1.000
## female:Z-female:X -1.103  -6.39  4.18 0.990
## female:Y-male:Y   -2.972  -8.26  2.31 0.566
## male:Z-male:Y     -0.672  -5.96  4.61 0.999
## female:Z-male:Y   -2.333  -7.62  2.95 0.784
## male:Z-female:Y    2.300  -2.99  7.59 0.794
## female:Z-female:Y  0.639  -4.65  5.93 0.999
## female:Z-male:Z   -1.661  -6.95  3.63 0.939
## 
## $`risk:gender:treatment`
##                                diff     lwr     upr p adj
## low:male:X-high:male:X      -16.687 -25.322  -8.052 0.000
## high:female:X-high:male:X   -13.874 -22.509  -5.239 0.000
## low:female:X-high:male:X    -18.583 -27.217  -9.948 0.000
## high:male:Y-high:male:X     -10.397 -19.032  -1.763 0.007
## low:male:Y-high:male:X      -19.600 -28.235 -10.965 0.000
## high:female:Y-high:male:X   -11.564 -20.198  -2.929 0.001
## low:female:Y-high:male:X    -24.377 -33.012 -15.742 0.000
## high:male:Z-high:male:X     -13.058 -21.693  -4.423 0.000
## low:male:Z-high:male:X      -18.283 -26.918  -9.648 0.000
## high:female:Z-high:male:X   -11.704 -20.339  -3.069 0.001
## low:female:Z-high:male:X    -22.959 -31.594 -14.324 0.000
## high:female:X-low:male:X      2.813  -5.822  11.448 0.993
## low:female:X-low:male:X      -1.896 -10.530   6.739 1.000
## high:male:Y-low:male:X        6.290  -2.345  14.925 0.374
## low:male:Y-low:male:X        -2.913 -11.548   5.722 0.991
## high:female:Y-low:male:X      5.124  -3.511  13.758 0.680
## low:female:Y-low:male:X      -7.690 -16.325   0.945 0.126
## high:male:Z-low:male:X        3.629  -5.006  12.264 0.953
## low:male:Z-low:male:X        -1.596 -10.231   7.039 1.000
## high:female:Z-low:male:X      4.983  -3.651  13.618 0.716
## low:female:Z-low:male:X      -6.272 -14.907   2.363 0.378
## low:female:X-high:female:X   -4.709 -13.344   3.926 0.781
## high:male:Y-high:female:X     3.476  -5.158  12.111 0.965
## low:male:Y-high:female:X     -5.726 -14.361   2.909 0.519
## high:female:Y-high:female:X   2.310  -6.325  10.945 0.999
## low:female:Y-high:female:X  -10.503 -19.138  -1.868 0.006
## high:male:Z-high:female:X     0.816  -7.819   9.450 1.000
## low:male:Z-high:female:X     -4.409 -13.044   4.226 0.844
## high:female:Z-high:female:X   2.170  -6.465  10.805 0.999
## low:female:Z-high:female:X   -9.086 -17.720  -0.451 0.031
## high:male:Y-low:female:X      8.185  -0.449  16.820 0.079
## low:male:Y-low:female:X      -1.017  -9.652   7.617 1.000
## high:female:Y-low:female:X    7.019  -1.616  15.654 0.222
## low:female:Y-low:female:X    -5.794 -14.429   2.840 0.500
## high:male:Z-low:female:X      5.525  -3.110  14.159 0.573
## low:male:Z-low:female:X       0.300  -8.335   8.934 1.000
## high:female:Z-low:female:X    6.879  -1.756  15.514 0.247
## low:female:Z-low:female:X    -4.377 -13.011   4.258 0.850
## low:male:Y-high:male:Y       -9.203 -17.838  -0.568 0.027
## high:female:Y-high:male:Y    -1.166  -9.801   7.469 1.000
## low:female:Y-high:male:Y    -13.980 -22.614  -5.345 0.000
## high:male:Z-high:male:Y      -2.661 -11.296   5.974 0.996
## low:male:Z-high:male:Y       -7.886 -16.520   0.749 0.105
## high:female:Z-high:male:Y    -1.306  -9.941   7.328 1.000
## low:female:Z-high:male:Y    -12.562 -21.197  -3.927 0.000
## high:female:Y-low:male:Y      8.037  -0.598  16.671 0.091
## low:female:Y-low:male:Y      -4.777 -13.412   3.858 0.766
## high:male:Z-low:male:Y        6.542  -2.093  15.177 0.316
## low:male:Z-low:male:Y         1.317  -7.318   9.952 1.000
## high:female:Z-low:male:Y      7.896  -0.738  16.531 0.104
## low:female:Z-low:male:Y      -3.359 -11.994   5.276 0.973
## low:female:Y-high:female:Y  -12.813 -21.448  -4.179 0.000
## high:male:Z-high:female:Y    -1.495 -10.129   7.140 1.000
## low:male:Z-high:female:Y     -6.719 -15.354   1.915 0.279
## high:female:Z-high:female:Y  -0.140  -8.775   8.495 1.000
## low:female:Z-high:female:Y  -11.396 -20.031  -2.761 0.002
## high:male:Z-low:female:Y     11.319   2.684  19.954 0.002
## low:male:Z-low:female:Y       6.094  -2.541  14.729 0.422
## high:female:Z-low:female:Y   12.673   4.038  21.308 0.000
## low:female:Z-low:female:Y     1.418  -7.217  10.052 1.000
## low:male:Z-high:male:Z       -5.225 -13.860   3.410 0.653
## high:female:Z-high:male:Z     1.354  -7.280   9.989 1.000
## low:female:Z-high:male:Z     -9.901 -18.536  -1.266 0.012
## high:female:Z-low:male:Z      6.579  -2.056  15.214 0.308
## low:female:Z-low:male:Z      -4.676 -13.311   3.958 0.789
## low:female:Z-high:female:Z  -11.256 -19.890  -2.621 0.002

Jeśli nie masz statystycznie istotnej interakcji trójdrożnej, musisz określić, czy masz statystycznie istotną interakcję dwukierunkową z danych wyjściowych ANOVA. Możesz śledzić znaczącą interakcję dwukierunkową za pomocą prostych analiz efektów głównych i porównań parami między grupami, jeśli to konieczne.