R'de iki yönlü anova nasıl gerçekleştirilir
İki faktöre bölünmüş üç veya daha fazla bağımsız grubun ortalamaları arasında istatistiksel olarak anlamlı bir fark olup olmadığını belirlemek için iki yönlü ANOVA (“varyans analizi”) kullanılır.
Bu eğitimde R’de iki yönlü ANOVA’nın nasıl gerçekleştirileceği açıklanmaktadır.
Örnek: R’de iki yönlü ANOVA
Diyelim ki egzersiz yoğunluğunun ve cinsiyetin kilo kaybını etkileyip etkilemediğini belirlemek istiyoruz. Bu durumda, baktığımız iki faktör egzersiz ve cinsiyettir ve yanıt değişkeni ise kilo cinsinden ölçülen kilo kaybıdır .
Egzersizin ve cinsiyetin kilo kaybını etkileyip etkilemediğini belirlemek ve egzersiz ile cinsiyet arasında kilo kaybında bir etkileşim olup olmadığını belirlemek için iki yönlü bir ANOVA gerçekleştirebiliriz.
Her birinden 10’unu bir ay boyunca egzersizsiz, hafif egzersiz veya yoğun egzersiz programını takip edecek şekilde rastgele atadığımız bir deneye katılmak üzere 30 erkek ve 30 kadın topluyoruz.
Aşağıdaki kod çalışacağımız veri çerçevesini oluşturur:
#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
Verileri keşfedin
İki yönlü ANOVA modelini bile yerleştirmeden önce, dplyr paketini kullanarak altı tedavi grubunun her biri için kilo kaybının ortalamasını ve standart sapmasını bularak verileri daha iyi anlayabiliriz:
#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
Ayrıca her grup için kilo kaybı dağılımını görselleştirmek amacıyla altı tedavi grubunun her biri için bir kutu grafiği oluşturabiliriz:
#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 )
Yoğun egzersiz yapan iki grubun kilo verme değerlerinin daha yüksek olduğunu hemen görebiliyoruz. Ayrıca hem yoğun hem de hafif egzersiz gruplarında erkeklerin kadınlara göre kilo verme değerlerinin daha yüksek olduğunu görebiliyoruz.
Daha sonra, bu görsel farklılıkların gerçekten istatistiksel olarak anlamlı olup olmadığını görmek için iki yönlü ANOVA modelini verilerimize uyarlayacağız.
İki yönlü ANOVA modelinin takılması
R’ye iki yönlü bir ANOVA modeli yerleştirmek için genel sözdizimi şöyledir:
aov(yanıt değişkeni ~predictor_variable1 *predictor_variable2, veri = veri kümesi)
İki yordayıcı değişken arasındaki * işaretinin, iki yordayıcı değişken arasındaki etkileşim etkisini de test etmek istediğimizi gösterdiğini unutmayın.
Örneğimizde, yanıt değişkeni olarak kilo_kaybını ve iki yordayıcı değişken olarak cinsiyet ve egzersizi kullanarak iki yönlü ANOVA modeline uymak için aşağıdaki kodu kullanabiliriz.
Daha sonra modelimizin sonucunu görüntülemek için Summary() fonksiyonunu kullanabiliriz:
#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
Model sonuçlarından cinsiyet , egzersiz ve iki değişken arasındaki etkileşimin istatistiksel olarak 0,05 anlamlılık düzeyinde anlamlı olduğunu görebiliriz.
Model varsayımlarının kontrol edilmesi
Daha ileri gitmeden önce, model sonuçlarımızın güvenilir olması için modelimizin varsayımlarının karşılandığını doğrulamamız gerekir. Özellikle iki yönlü bir ANOVA şunu varsayar:
1. Bağımsızlık – her grubun gözlemleri birbirinden bağımsız olmalıdır. Rastgeleleştirilmiş bir tasarım kullandığımız için bu varsayımın karşılanması gerekir, böylece bu konuda çok fazla endişelenmemize gerek kalmaz.
2. Normallik – bağımlı değişken, iki faktörden oluşan grupların her bir kombinasyonu için yaklaşık olarak normal bir dağılıma sahip olmalıdır.
Bu varsayımı test etmenin bir yolu model artıklarının histogramını oluşturmaktır. Artıklar yaklaşık olarak normal dağılıyorsa, bu varsayım karşılanmalıdır.
#define model residuals reside <- model$residuals #create histogram of residuals hist(resid, main = "Histogram of Residuals", xlab = "Residuals", col = "steelblue")
Artıklar yaklaşık olarak normal dağılıma sahip olduğundan normallik varsayımının karşılandığını varsayabiliriz.
3. Eşit varyans – her grubun varyansları eşit veya yaklaşık olarak eşittir.
Bu varsayımı kontrol etmenin bir yolu, araba paketini kullanarak varyansların eşitliği için Levene testi yapmaktır:
#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
Testin p değeri bizim anlamlılık düzeyimiz olan 0,05’ten büyük olduğundan gruplar arası varyansların eşitliği varsayımımızın karşılandığını varsayabiliriz.
Tedavi farklılıklarını analiz edin
Model varsayımlarının karşılandığını doğruladıktan sonra, hangi tedavi gruplarının birbirinden farklı olduğunu tam olarak belirlemek için bir post hoc testi gerçekleştirebiliriz.
Post hoc testimizde, çoklu karşılaştırmalar için Tukey testini gerçekleştirmek üzere TukeyHSD() işlevini kullanacağız:
#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
P değeri, her grup arasında istatistiksel olarak anlamlı bir fark olup olmadığını gösterir.
Örneğin, yukarıdaki son satırda, egzersiz yapmayan erkek grubunun, egzersiz yapmayan kadın grubuna kıyasla kilo kaybında istatistiksel olarak anlamlı bir fark yaşamadığını görüyoruz (p değeri: 0,990364).
Ayrıca Tukey testinden elde edilen %95 güven aralıklarını R’dekiplot () fonksiyonunu kullanarak görselleştirebiliriz:
#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)
İki Yönlü ANOVA Sonuçlarının Raporlanması
Son olarak iki yönlü ANOVA sonuçlarını özetleyecek şekilde raporlayabiliriz:
Cinsiyetin ( erkek, kadın) ve egzersiz programının (yok, hafif, yoğun) kilo kaybı (kilo cinsinden ölçülür) üzerindeki etkilerini incelemek için iki yönlü bir ANOVA yapıldı. Cinsiyet ve egzersizin kilo kaybına etkisi arasında istatistiksel olarak anlamlı bir etkileşim vardı (F(2, 54) = 4,615, p = 0,0141). Post-hoc Tukey’in HSD testleri yapıldı.
Erkekler için yoğun bir egzersiz programı, hafif bir programa (p < 0,0001) veya egzersiz yapılmayan programa (p < 0,0001) göre önemli ölçüde daha fazla kilo kaybıyla sonuçlandı. Ek olarak erkeklerde hafif bir diyet, egzersiz yapmamaya kıyasla önemli ölçüde daha fazla kilo kaybıyla sonuçlandı (p < 0,0001).
Kadınlar için yoğun bir egzersiz programı, hafif bir programa (p < 0,0001) veya egzersiz yapılmayan programa (p < 0,0001) göre önemli ölçüde daha fazla kilo kaybıyla sonuçlandı.
ANOVA’nın varsayımlarının karşılandığını doğrulamak için normallik kontrolleri ve Levene testi yapıldı.