R'de tek yönlü anova nasıl gerçekleştirilir


Üç veya daha fazla bağımsız grubun ortalamaları arasında istatistiksel olarak anlamlı bir fark olup olmadığını belirlemek için tek yönlü ANOVA kullanılır.

Bu tür testlere tek yönlü ANOVA denir çünkü bir yordayıcı değişkenin bir yanıt değişkeni üzerindeki etkisini analiz ederiz.

Not : Bunun yerine, iki öngörücü değişkenin bir yanıt değişkeni üzerindeki etkisiyle ilgilenseydik, iki yönlü bir ANOVA gerçekleştirebilirdik.

R’de tek yönlü ANOVA nasıl gerçekleştirilir

Aşağıdaki örnek, R’de tek yönlü ANOVA’nın nasıl gerçekleştirileceğini göstermektedir.

Arka plan

Üç farklı egzersiz programının kilo kaybı üzerinde farklı etkileri olup olmadığını belirlemek istediğimizi varsayalım. İncelediğimiz belirleyici değişken egzersiz programıdır ve yanıt değişkeni ise pound cinsinden ölçülen kilo kaybıdır .

Üç programdan kaynaklanan kilo kaybı arasında istatistiksel olarak anlamlı bir fark olup olmadığını belirlemek için tek yönlü bir ANOVA gerçekleştirebiliriz.

Bir ay boyunca Program A, Program B veya Program C’yi takip etmek üzere rastgele 30 kişiyi atadığımız bir deneye katılmak üzere 90 kişiyi işe alıyoruz.

Aşağıdaki kod çalışacağımız veri çerçevesini oluşturur:

 #make this example reproducible
set.seed(0)

#create data frame
data <- data.frame(program = rep(c("A", "B", "C"), each = 30),
                   weight_loss = c(runif(30, 0, 3),
                                   runif(30, 0, 5),
                                   runif(30, 1, 7)))

#view first six rows of data frame
head(data)

# program weight_loss
#1 A 2.6900916
#2 A 0.7965260
#3 A 1.1163717
#4 A 1.7185601
#5 A 2.7246234
#6 A 0.6050458

Veri çerçevesinin ilk sütunu kişinin bir ay boyunca katıldığı programı, ikinci sütun ise kişinin program sonunda yaşadığı toplam kilo kaybını kilo cinsinden göstermektedir.

Verileri keşfedin

Tek yönlü ANOVA modelini bile yerleştirmeden önce, dplyr paketini kullanarak üç programın 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 (program) %>%
  summarize (mean = mean(weight_loss),
            sd = sd(weight_loss))

# A tibble: 3 x 3
# program mean sd
#      
#1 A 1.58 0.905
#2 B 2.56 1.24 
#3 C 4.13 1.57  

Ayrıca her program için kilo verme dağılımını görselleştirmek amacıyla üç programın her biri için bir kutu grafiği oluşturabiliriz:

 #create boxplots
boxplot(weight_loss ~ program,
data = data,
main = "Weight Loss Distribution by Program",
xlab = "Program",
ylab = "Weight Loss",
col = "steelblue",
border = "black")

Bu kutu grafiklerinden ortalama kilo kaybının Program C’deki katılımcılar için en yüksek olduğunu ve ortalama kilo kaybının Program A’daki katılımcılar için en düşük olduğunu görebiliriz.

Ayrıca kilo kaybı için standart sapmanın (kutu grafiğinin “uzunluğu”) C programında diğer iki programa göre biraz daha yüksek olduğunu görebiliriz.

Daha sonra, bu görsel farklılıkların gerçekten istatistiksel olarak anlamlı olup olmadığını görmek için tek yönlü ANOVA modelini verilerimize uyarlayacağız.

Tek yönlü ANOVA model uyumu

R’ye tek yönlü bir ANOVA modeli yerleştirmek için genel sözdizimi şöyledir:

aov(yanıt değişkeni ~ tahminci_değişken, veri = veri kümesi)

Örneğimizde, yanıt değişkeni olarak ağırlık_kaybını ve tahmin değişkeni olarak programı kullanarak tek 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 one-way ANOVA model
model <- aov(weight_loss ~ program, data = data)

#view the model output
summary(model)

# Df Sum Sq Mean Sq F value Pr(>F)    
#program 2 98.93 49.46 30.83 7.55e-11 ***
#Residuals 87 139.57 1.60                     
#---
#Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model sonuçlarından yordayıcı değişkenler programının istatistiksel olarak 0,05 anlamlılık düzeyinde anlamlı olduğunu görebiliriz.

Yani üç programdan kaynaklanan ortalama kilo kaybı arasında istatistiksel olarak anlamlı bir fark var.

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 tek yönlü bir ANOVA şunu varsayar:

1. Bağımsızlık – her grubun gözlemleri birbirinden bağımsız olmalıdır. Rastgele bir tasarım kullandığımız için (yani katılımcıları egzersiz programlarına rastgele atadığımız için), bu varsayımın karşılanması gerekir ki bu konuda fazla endişelenmemize gerek kalmasın.

2. Normallik – bağımlı değişken, yordayıcı değişkenin her düzeyi için yaklaşık olarak normal bir dağılıma sahip olmalıdır.

3. Eşit varyans – her grubun varyansları eşit veya yaklaşık olarak eşittir.

Normallik ve eşit varyans varsayımlarını kontrol etmenin bir yolu, dört model kontrol grafiği üretenplot() fonksiyonunu kullanmaktır. Özellikle aşağıdaki iki konuyla özellikle ilgileniyoruz:

  • Artıklar vs. uygun – bu grafik artıklar ve uydurulmuş değerler arasındaki ilişkiyi gösterir. Bu grafiği, gruplar arasındaki varyansın yaklaşık olarak eşit olup olmadığını kabaca değerlendirmek için kullanabiliriz.
  • QQ grafiği – bu grafik, standartlaştırılmış artıkları teorik niceliklere göre gösterir. Normallik varsayımının karşılanıp karşılanmadığını kabaca değerlendirmek için bu grafiği kullanabiliriz.

Bu model kontrol grafiklerini oluşturmak için aşağıdaki kod kullanılabilir:

 plot(model)

Yukarıdaki QQ grafiği normallik varsayımını doğrulamamızı sağlar. İdeal olarak, standartlaştırılmış artıklar grafiğin düz çapraz çizgisi boyunca uzanacaktır. Ancak yukarıdaki grafikte artıkların çizgiden başlangıca ve sona doğru biraz saptığını görüyoruz. Bu durum normallik varsayımımızın ihlal edilebileceğini göstermektedir.

Kalıntılar vs. Yukarıdaki düzeltilmiş grafik, eşit varyans varsayımımızı doğrulamamızı sağlar. İdeal durumda artıkların, uygun değerlerin her düzeyi için eşit şekilde dağıtılmasını isteriz.

Daha yüksek uyum değerleri için artıkların çok daha fazla yayıldığını görebiliriz, bu da varyansların eşitliği varsayımımızın ihlal edilebileceğini gösterir.

Eşit varyansları resmi olarak test etmek için araba paketini kullanarak Levene testini gerçekleştirebiliriz:

 #load car package
library (car)

#conduct Levene's Test for equality of variances
leveneTest(weight_loss ~ program, data = data)

#Levene's Test for Homogeneity of Variance (center = median)
# Df F value Pr(>F)  
#group 2 4.1716 0.01862 *
#87                  
#---
#Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Testin p değeri 0,01862’dir . Eğer 0,05 anlamlılık düzeyi kullanırsak, varyansların üç program arasında eşit olduğuna ilişkin sıfır hipotezini reddederiz. Ancak 0,01 anlamlılık düzeyini kullanırsak sıfır hipotezini reddetmeyeceğiz.

Normallik ve varyansların eşitliği varsayımlarımızın karşılandığından emin olmak için verileri dönüştürmeye çalışsak da şimdilik bu konuda çok fazla endişelenmeyeceğiz.

Tedavi farklılıklarını analiz edin

Model varsayımlarının karşılandığını (veya makul ölçüde 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 ~ program, data = data)
#
#$program
# diff lwr upr p adj
#BA 0.9777414 0.1979466 1.757536 0.0100545
#CA 2.5454024 1.7656076 3.325197 0.0000000
#CB 1.5676610 0.7878662 2.347456 0.0000199

P değeri, her program arasında istatistiksel olarak anlamlı bir fark olup olmadığını gösterir. Sonuçlar, her programın ortalama kilo kaybı arasında 0,05 anlamlılık düzeyinde istatistiksel olarak anlamlı bir fark olduğunu göstermektedir.

Tukey testinden elde edilen %95 güven aralıklarını R’deki arsa(TukeyHSD()) fonksiyonunu kullanarak da görselleştirebiliriz:

 #create confidence interval for each comparison
plot(TukeyHSD(model, conf.level=.95), las = 2)

Güven aralıklarının sonuçları hipotez testlerinin sonuçlarıyla tutarlıdır.

Özellikle programlar arasındaki ortalama kilo kaybına ilişkin güven aralıklarının hiçbirinin sıfır değerini içermediğini görebiliyoruz, bu da üç program arasında ortalama kilo kaybı açısından istatistiksel olarak anlamlı bir fark olduğunu gösteriyor.

Bu, hipotez testlerimiz için tüm p değerlerinin 0,05’ten küçük olmasıyla tutarlıdır.

Tek Yönlü ANOVA Sonuçlarının Raporlanması

Son olarak tek yönlü ANOVA sonuçlarını özetleyecek şekilde raporlayabiliriz:

Egzersiz programının etkilerini incelemek için tek yönlü ANOVA yapıldı   kilo kaybı (pound olarak ölçülür). Üç programın kilo kaybı üzerindeki etkileri arasında istatistiksel olarak anlamlı bir fark vardı (F(2, 87) = 30,83, p = 7,55e-11). Post-hoc Tukey’in HSD testleri yapıldı.

C programındaki katılımcıların ortalama kilo kaybı, B programındaki katılımcıların ortalama kilo kaybından önemli ölçüde daha yüksektir (p < 0,0001).

C programındaki katılımcıların ortalama kilo kaybı, A programındaki katılımcıların ortalama kilo kaybından önemli ölçüde daha yüksektir (p < 0,0001).

Ek olarak, B programındaki katılımcıların ortalama kilo kaybı, A programındaki katılımcıların ortalama kilo kaybından önemli ölçüde daha fazlaydı (p = 0,01).

Ek kaynaklar

Aşağıdaki eğitimler tek yönlü ANOVA’lar hakkında ek bilgi sağlar:

Tek Yönlü ANOVA’ya Giriş
ANOVA ile Post-Hoc Testini Kullanma Kılavuzu
Tam Kılavuz: ANOVA Sonuçları Nasıl Raporlanır?

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir