Cara melakukan anova dua arah di r
ANOVA dua arah (“analisis varians”) digunakan untuk menentukan apakah terdapat perbedaan yang signifikan secara statistik antara rata-rata tiga atau lebih kelompok independen yang dibagi menjadi dua faktor.
Tutorial ini menjelaskan cara melakukan ANOVA dua arah di R.
Contoh: ANOVA dua arah di R
Katakanlah kita ingin menentukan apakah intensitas olahraga dan jenis kelamin berdampak pada penurunan berat badan. Dalam hal ini, dua faktor yang kami perhatikan adalah olahraga dan jenis kelamin , dan variabel responsnya adalah penurunan berat badan, yang diukur dalam pon.
Kita dapat melakukan ANOVA dua arah untuk menentukan apakah olahraga dan gender berdampak pada penurunan berat badan dan untuk menentukan apakah terdapat interaksi antara olahraga dan gender terhadap penurunan berat badan.
Kami merekrut 30 pria dan 30 wanita untuk berpartisipasi dalam eksperimen di mana kami secara acak menugaskan 10 orang untuk mengikuti program tanpa olahraga, olahraga ringan, atau olahraga intens selama sebulan.
Kode berikut membuat bingkai data yang akan kita gunakan:
#make this example reproducible set.seed(10) #create data frame data <- data.frame(gender = rep(c("Male", "Female"), each = 30), exercise = rep(c("None", "Light", "Intense"), each = 10, times = 2), weight_loss = c(runif(10, -3, 3), runif(10, 0, 5), runif(10, 5, 9), runif(10, -4, 2), runif(10, 0, 3), runif(10, 3, 8))) #view first six rows of data frame head(data) # gender exercise weight_loss #1 Male None 0.04486922 #2 Male None -1.15938896 #3 Male None -0.43855400 #4 Male None 1.15861249 #5 Male None -2.48918419 #6 Male None -1.64738030 #see how many participants are in each group table(data$gender, data$exercise) # Intense Light None # Female 10 10 10 # Male 10 10 10
Jelajahi datanya
Bahkan sebelum memasang model ANOVA dua arah, kita dapat lebih memahami data dengan mencari mean dan deviasi standar penurunan berat badan untuk masing-masing dari enam kelompok perlakuan menggunakan paket dplyr :
#load dplyr package library(dplyr) #find mean and standard deviation of weight loss for each treatment group data %>% group_by (gender, exercise) %>% summarize (mean = mean(weight_loss), sd = sd(weight_loss)) # A tibble: 6 x 4 # Groups: gender [2] # gender exercise means sd # #1 Female Intense 5.31 1.02 #2 Female Light 0.920 0.835 #3 Female None -0.501 1.77 #4 Male Intense 7.37 0.928 #5 Male Light 2.13 1.22 #6 Male None -0.698 1.12
Kita juga dapat membuat diagram kotak untuk masing-masing dari enam kelompok perlakuan untuk memvisualisasikan distribusi penurunan berat badan untuk setiap kelompok:
#set margins so that axis labels on boxplot don't get cut off by(mar=c(8, 4.1, 4.1, 2.1)) #create boxplots boxplot(weight_loss ~ gender:exercise, data = data, main = "Weight Loss Distribution by Group", xlab = "Group", ylab = "Weight Loss", col = "steelblue", border = "black", las = 2 #make x-axis labels perpendicular )
Kita dapat langsung melihat bahwa kedua kelompok yang melakukan olahraga intens tampaknya memiliki nilai penurunan berat badan yang lebih tinggi. Kita juga dapat melihat bahwa pria cenderung memiliki nilai penurunan berat badan yang lebih tinggi dibandingkan wanita baik pada kelompok olahraga intens maupun ringan .
Selanjutnya, kami akan menyesuaikan model ANOVA dua arah dengan data kami untuk melihat apakah perbedaan visual ini benar-benar signifikan secara statistik.
Pemasangan model ANOVA dua arah
Sintaks umum untuk memasang model ANOVA dua arah di R adalah:
aov(variabel respons ~predictor_variable1 *predictor_variable2, data = kumpulan data)
Perhatikan bahwa tanda * di antara kedua variabel prediktor menunjukkan bahwa kita juga ingin menguji pengaruh interaksi antara kedua variabel prediktor.
Dalam contoh kita, kita dapat menggunakan kode berikut agar sesuai dengan model ANOVA dua arah, menggunakan penurunan berat badan sebagai variabel respons dan gender serta olahraga sebagai dua variabel prediktor.
Kita kemudian dapat menggunakan fungsi ringkasan() untuk menampilkan hasil model kita:
#fit the two-way ANOVA model model <- aov(weight_loss ~ gender * exercise, data = data) #view the model output summary(model) # Df Sum Sq Mean Sq F value Pr(>F) #gender 1 15.8 15.80 11.197 0.0015 ** #exercise 2 505.6 252.78 179.087 <2e-16 *** #gender:exercise 2 13.0 6.51 4.615 0.0141 * #Residuals 54 76.2 1.41 #--- #Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Dari hasil model terlihat bahwa jenis kelamin , olahraga , dan interaksi kedua variabel semuanya signifikan secara statistik pada tingkat signifikansi 0,05.
Memeriksa asumsi model
Sebelum melangkah lebih jauh, kita perlu memverifikasi bahwa asumsi model kita terpenuhi sehingga hasil model kita dapat diandalkan. Secara khusus, ANOVA dua arah mengasumsikan:
1. Independensi – pengamatan masing-masing kelompok harus independen satu sama lain. Karena kita menggunakan rancangan acak , asumsi ini harus dipenuhi, jadi kita tidak perlu terlalu khawatir.
2. Normalitas – variabel terikat harus mempunyai distribusi mendekati normal untuk setiap kombinasi kelompok kedua faktor.
Salah satu cara untuk menguji asumsi ini adalah dengan membuat histogram dari residu model. Jika residunya mendekati terdistribusi normal, asumsi ini harus dipenuhi.
#define model residuals reside <- model$residuals #create histogram of residuals hist(resid, main = "Histogram of Residuals", xlab = "Residuals", col = "steelblue")
Residunya kira-kira terdistribusi normal, sehingga asumsi normalitas dapat dipenuhi.
3. Varians yang sama – varians untuk setiap kelompok sama atau kurang lebih sama.
Salah satu cara untuk memeriksa asumsi ini adalah dengan melakukan uji Levene untuk persamaan varians menggunakan paket mobil :
#load car package library(car) #conduct Levene's Test for equality of variances leveneTest(weight_loss ~ gender * exercise, data = data) #Levene's Test for Homogeneity of Variance (center = median) # Df F value Pr(>F) #group 5 1.8547 0.1177 #54
Karena nilai p dari pengujian ini lebih besar dari tingkat signifikansi kami sebesar 0,05, kami dapat berasumsi bahwa asumsi kami tentang kesetaraan varians antar kelompok terpenuhi.
Analisis perbedaan perlakuan
Setelah kami memverifikasi bahwa asumsi model terpenuhi, kami kemudian dapat melakukan uji post hoc untuk menentukan dengan tepat kelompok perlakuan mana yang berbeda satu sama lain.
Untuk pengujian post hoc, kami akan menggunakan fungsi TukeyHSD() untuk melakukan pengujian Tukey untuk beberapa perbandingan:
#perform Tukey's Test for multiple comparisons
TukeyHSD(model, conf.level=.95)
#Tukey multiple comparisons of means
# 95% family-wise confidence level
#
#Fit: aov(formula = weight_loss ~ gender * exercise, data = data)
#
#$gender
# diff lwr upr p adj
#Male-Female 1.026456 0.4114451 1.641467 0.0014967
#
#$exercise
# diff lwr upr p adj
#Light-Intense -4.813064 -5.718493 -3.907635 0.0e+00
#None-Intense -6.938966 -7.844395 -6.033537 0.0e+00
#None-Light -2.125902 -3.031331 -1.220473 1.8e-06
#
#$`gender:exercise`
# diff lwr upr p adj
#Male:Intense-Female:Intense 2.0628297 0.4930588 3.63260067 0.0036746
#Female:Light-Female:Intense -4.3883563 -5.9581272 -2.81858535 0.0000000
#Male:Light-Female:Intense -3.1749419 -4.7447128 -1.60517092 0.0000027
#Female:None-Female:Intense -5.8091131 -7.3788841 -4.23934219 0.0000000
#Male:None-Female:Intense -6.0059891 -7.5757600 -4.43621813 0.0000000
#Female:Light-Male:Intense -6.4511860 -8.0209570 -4.88141508 0.0000000
#Male:Light-Male:Intense -5.2377716 -6.8075425 -3.66800066 0.0000000
#Female:None-Male:Intense -7.8719429 -9.4417138 -6.30217192 0.0000000
#Male:None-Male:Intense -8.0688188 -9.6385897 -6.49904786 0.0000000
#Male:Light-Female:Light 1.2134144 -0.3563565 2.78318536 0.2185439
#Female:None-Female:Light -1.4207568 -2.9905278 0.14901410 0.0974193
#Male:None-Female:Light -1.6176328 -3.1874037 -0.04786184 0.0398106
#Female:None-Male:Light -2.6341713 -4.2039422 -1.06440032 0.0001050
#Male:None-Male:Light -2.8310472 -4.4008181 -1.26127627 0.0000284
#Male:None-Female:None -0.1968759 -1.7666469 1.37289500 0.9990364
Nilai p menunjukkan ada atau tidaknya perbedaan yang signifikan secara statistik antara masing-masing kelompok.
Misalnya, pada baris terakhir di atas, kita melihat bahwa kelompok laki-laki yang tidak berolahraga tidak mengalami perbedaan penurunan berat badan yang signifikan secara statistik dibandingkan dengan kelompok perempuan yang tidak berolahraga (nilai p: 0,990364).
Kita juga dapat memvisualisasikan interval kepercayaan 95% yang dihasilkan dari pengujian Tukey menggunakan fungsi plot() di R:
#set axis margins so labels don't get cut off by(mar=c(4.1, 13, 4.1, 2.1)) #create confidence interval for each comparison plot(TukeyHSD(model, conf.level=.95), las = 2)
Melaporkan Hasil ANOVA Dua Arah
Terakhir, kami dapat melaporkan hasil ANOVA dua arah dengan cara merangkum hasilnya:
ANOVA dua arah dilakukan untuk menguji pengaruh jenis kelamin ( pria, wanita) dan program olahraga (tidak ada, ringan, intens) terhadap penurunan berat badan (diukur dalam pon). Terdapat interaksi yang signifikan secara statistik antara pengaruh jenis kelamin dan olahraga terhadap penurunan berat badan (F(2, 54) = 4,615, p = 0,0141). Tes HSD Post-hoc Tukey dilakukan.
Bagi pria, program olahraga yang intens menghasilkan penurunan berat badan yang jauh lebih besar dibandingkan program ringan (p <0,0001) atau tanpa program olahraga (p <0,0001). Selain itu, pada pria, diet ringan menghasilkan penurunan berat badan yang jauh lebih besar dibandingkan tanpa olahraga (p <0,0001).
Bagi wanita, program olahraga yang intens menghasilkan penurunan berat badan yang jauh lebih besar dibandingkan program olahraga ringan (p <0,0001) atau tanpa program olahraga (p <0,0001).
Pemeriksaan normalitas dan uji Levene dilakukan untuk memverifikasi bahwa asumsi ANOVA terpenuhi.