R'de ANOVA: Tek Yönlü ve Çift Yönlü Testler ve Örnekler

⚡ Akıllı Özet

R'deki ANOVA, toplam varyasyonu gruplar arası ve grup içi bileşenlere ayırarak üç veya daha fazla grubun ortalamalarını karşılaştırır. Bu kılavuz, zehirler veri kümesi üzerinde tek yönlü ve iki yönlü testler yürütür, varsayımları kontrol eder ve Tukey HSD ile farklı çiftleri ayırır.

  • 📐 Temel İstatistik: F oranı, gruplar arası değişkenliği grup içi değişkenliğe böler; dolayısıyla daha büyük değerler, ortalamaların eşit olduğu görüşüne karşı çıkar.
  • 🧪 Tek Yönlü Sözdizimi: aov(time~poison, data = df) ifadesinin ardından summary() fonksiyonu, serbestlik derecesini, F değerini ve p-değerini döndürür.
  • Varsayım Kontrolleri: P değerine güvenmeden önce, shapiro.test() ile artıkların bağımsızlığını ve normalliğini, leveneTest() ile de eşit varyansı test edin.
  • 🔎 Sonradan Yapılan Analiz: TukeyHSD() fonksiyonu, aile bazında hata oranını belirtilen seviyede tutarak her grup çiftini karşılaştırır.
  • 🧮 İki Yönlü Uzatma: aov(time~poison + treat, data = df) ikinci bir faktör ekler ve poison:treat etkileşim terimini ekler.
  • 📊 Okuma Sonuçları: 0.05'in altındaki bir p değeri, ortalamaların eşit olduğu şeklindeki sıfır hipotezini reddeder, ancak hangi grubun farklı olduğunu asla belirleyemez.

R'de ANOVA Tek Yönlü İki Yönlü

ANOVA nedir?

Varyans Analizi (ANOVA), iki veya daha fazla grubun ortalamalarını karşılaştırmak için kullanılan istatistiksel bir tekniktir. Test, bir ölçümdeki toplam varyasyonu, grup üyeliğiyle açıklanan kısım ve rastgele gürültü olarak kalan kısım olmak üzere ikiye ayırarak çalışır. Bu nedenle, R'deki ANOVA, hangi grubun ortalamasının diğerlerinden farklı olduğunu değil, en az bir grup ortalamasının diğerlerinden farklı olup olmadığını söyler. Bu, ANOVA'nın doğrudan bir uzantısıdır. t-testi Faktör değişkeninin ikiden fazla seviyeye sahip olduğu durumlara.

Bir test çalıştırmadan önce, ANOVA ailesinin hangi üyesinin tasarımınıza uygun olduğunu bilmek faydalı olacaktır.

R'de ANOVA Test Türleri

"ANOVA" tek bir prosedürden ziyade bir test ailesidir. Doğru üyeyi seçmek, kaç faktörünüz olduğuna ve verilerin nasıl toplandığına bağlıdır.

test Ne zaman kullanılmalı R çağrısı
Tek yönlü ANOVA Üç veya daha fazla seviyeye sahip bir faktör aov(y ~ x, data = df)
İki yönlü ANOVA İki bağımsız faktör aov(y ~ x1 + x2, data = df)
İki yönlü etkileşimli Bir faktörün etkisi diğerine bağlıdır. aov(y ~ x1 * x2, data = df)
Tekrarlı ölçümler ANOVA'sı Aynı deneklerin ölçümleri birden fazla kez yapıldı. aov(y ~ x + Hata(konu/x))
ANKOVA Sürekli bir kovaryatın kontrol edilmesi gerekir. aov(y ~ x + kovaryat, veri = df)
MANOVA Aynı anda iki veya daha fazla yanıt değişkeni manova(cbind(y1, y2) ~ x)

Bu eğitim ilk üçünü kapsıyor. Geri kalan varyantlar aynı aov() arayüzünü kullanıyor, bu nedenle bir çıktı tablosunu okuyabildiğinizde hepsini okuyabilirsiniz.

R'de ANOVA ve T-Testi Arasındaki Temel Farklar

Her iki test de ortalamaları karşılaştırır, bu nedenle hangisinin diğerinin yerine geçeceği konusunda kesin olmakta fayda var.

Kriterler T Testi ANOVA
Grup sayısı Tam olarak iki İki veya daha fazla
Test istatistiği t İki grup olduğunda F, t'nin karesine eşittir.
Sonuç Farkın yönünü belirtir. Sadece bir farkın var olduğuna dair raporlar mevcut.
Takip gerekli Hayır Tukey HSD gibi sonradan yapılan testler
R işlevi t.test() aov()

Üç grup söz konusu olduğunda, üç ayrı t-testi yapma eğilimi vardır. Buna direnin. Her testin kendi %5 hata oranı vardır, bu nedenle üç karşılaştırma yanlış pozitif olasılığını yaklaşık %14'e çıkarır. ANOVA aynı soruyu tek bir testle yanıtlar ve Tukey HSD daha sonra hata oranı kontrol altında tutularak ikili karşılaştırma detaylarını ele alır. İki grup durumu için bkz. t-testi eğitim kılavuzu.

Tek yönlü ANOVA

Birden fazla grup arasındaki ortalamayı karşılaştırmanız gereken birçok durum vardır. Örneğin pazarlama departmanı üç ekibin aynı satış performansına sahip olup olmadığını bilmek istiyor.

  • Takım: 3 seviye faktörü: A, B ve C
  • Satış: Bir performans ölçüsü

ANOVA testi üç grubun benzer performanslara sahip olup olmadığını söyleyebilir.

Verilerin aynı popülasyondan gelip gelmediğini netleştirmek için tek yönlü varyans analizi (Bundan sonra tek yönlü ANOVA olarak anılacaktır). Diğer tüm istatistiksel testler gibi, H0 hipotezinin reddedilip reddedilemeyeceği konusunda kanıt sunar. H0'ı reddetmemenin, onu doğru olduğunu kanıtlamakla aynı şey olmadığını unutmayın.

Tek yönlü ANOVA testinde hipotez

  • H0: Gruplar arasındaki ortalamalar aynıdır
  • H1: En azından bir grubun ortalaması farklıdır

Başka bir deyişle, H0 hipotezini reddetmemek, herhangi bir grup ortalamasının diğerlerinden farklı olduğu sonucuna varmak için yeterli kanıt olmadığı anlamına gelir.

Bu test t-testine benzer, ancak ikiden fazla grup olduğunda ANOVA doğru seçimdir. Tam olarak iki grup olduğunda, iki test eşdeğerdir ve F-istatistiği t-istatistiğinin karesine eşittir.

varsayımlar

Tek yönlü varyans analizi (ANOVA) üç koşula dayanır: gözlemler rastgele örneklenir ve birbirlerinden bağımsızdır, her gruptaki artıklar yaklaşık olarak normal dağılıma sahiptir ve varyans her grupta aynıdır (varyans homojenliği). Aşağıdaki varsayımları kontrol etme bölümü, her birinin R'de nasıl test edileceğini göstermektedir.

ANOVA testini yorumlayın

F istatistiği, verilerin önemli ölçüde farklı popülasyonlardan, yani farklı örnek ortalamalarından olup olmadığını test etmek için kullanılır.

F istatistiğini hesaplamak için bölmeniz gerekir. gruplar arası değişkenlik üzerinde grup içi değişkenlik.

MKS grup arası Değişkenlik, her bir grup ortalamasının genel ortalamadan ne kadar uzak olduğunu yansıtır. Bu fikri anlamak için aşağıdaki iki grafiği karşılaştırın.

Soldaki grafik, üç grup arasında çok az farklılık olduğunu gösteriyor, bu nedenle üç grubun ortalama değerleri de birbirine yakın konumda yer alıyor. tüm anlamına gelmek.

Sağdaki grafik, birbirleriyle örtüşmeyen ve birbirinden çok uzak üç dağılımı göstermektedir; bu nedenle genel ortalama ile her bir grup ortalaması arasındaki fark büyüktür.

ANOVA testini yorumlayın

MKS grup içi Değişkenlik, bireysel gözlemlerin kendi gruplarının ortalamasından ne kadar uzaklaştığını ölçer. Bazı noktalar grup ortalamasından oldukça uzakta bulunur ve grup içi terim tam olarak bu yayılımı, yani örnekleme hatasını yakalar.

Grup içi değişkenlik kavramını görsel olarak anlamak için aşağıdaki grafiğe bakın.

Soldaki grafik, üç farklı grubun dağılımını göstermektedir. Her bir örneğin yayılımını artırdınız ve bireysel varyansın büyük olduğu açıkça görülmektedir. F-istatistiği düşüyor, bu nedenle sıfır hipotezini reddedemezsiniz.

Sağ kısım, aynı ortalamalara sahip ancak çok daha düşük dağılıma sahip örnekleri göstermektedir. Bu durum F-istatistiğini yükseltir ve alternatif hipotezi destekler.

ANOVA testini yorumlayın

F istatistiklerini oluşturmak için her iki ölçümü de kullanabilirsiniz. F istatistiğini anlamak çok sezgiseldir. Payın artması gruplar arası değişkenliğin yüksek olduğu anlamına gelir ve örneklemdeki grupların tamamen farklı dağılımlardan oluşması muhtemeldir.

Başka bir deyişle, düşük bir F-istatistiği, grup ortalamaları arasında anlamlı bir farkın az veya hiç olmadığını gösterir.

Örnek Tek yönlü ANOVA Testi

Tek yönlü ANOVA testini uygulamak için zehir veri setini kullanacaksınız. Veri seti 48 satır ve 3 değişken içeriyor:

  • Zaman: Hayvanın hayatta kalma süresi
  • zehir: Kullanılan zehir türü: faktör düzeyi: 1,2 ve 3
  • tedavi: Kullanılan tedavi türü: faktör düzeyi: 1,2 ve 3

ANOVA testini hesaplamaya başlamadan önce, verileri aşağıdaki gibi hazırlamanız gerekir:

  • 1. Adım: Verileri içe aktarın
  • 2. Adım: Gereksiz değişkeni kaldırın
  • Adım 3: Zehir değişkenini sıralı seviyeye dönüştürün
library(dplyr)
PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/poisons.csv"
df <- read.csv(PATH) %>%
select(-X) %>% 
mutate(poison = factor(poison, ordered = TRUE))
glimpse(df)

Çıktı:

## Observations: 48
## Variables: 3
## $ time   <dbl> 0.31, 0.45, 0.46, 0.43, 0.36, 0.29, 0.40, 0.23, 0.22, 0...
## $ poison <ord> 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2...
## $ treat  <fctr> A, A, A, A, A, A, A, A, A, A, A, A, B, B, B, B, B, B, ...		

Amacımız aşağıdaki varsayımı test etmektir:

  • H0: Gruplar arasında hayatta kalma süresi ortalamasında fark yok
  • H1: Hayatta kalma süresi ortalaması en az bir grup için farklıdır.

Başka bir deyişle, kobaylara verilen zehir türüne göre hayatta kalma sürelerinin ortalamaları arasında istatistiksel bir fark olup olmadığını öğrenmek istiyorsunuz.

Aşağıdaki gibi ilerleyeceksin:

  • Adım 1: zehir değişkeninin biçimini kontrol edin
  • Adım 2: Özet istatistiği yazdırın: sayım, ortalama ve standart sapma
  • Adım 3: Bir kutu grafiği çizin
  • Adım 4: Tek yönlü ANOVA testini hesaplayın
  • Adım 5: Tukey HSD ile ikili karşılaştırma yapın.

) 1 Adım Aşağıdaki kodla zehir seviyelerini kontrol edin. Üç karakterli değerler görmelisiniz, çünkü `mutate` fiili sütunu sıralı bir faktöre dönüştürdü.

levels(df$poison)

Çıktı:

## [1] "1" "2" "3"

) 2 Adım Ortalamayı ve standart sapmayı hesaplarsınız.

df %>%
	group_by(poison) %>%
	summarise(
		count_poison = n(),
		mean_time = mean(time, na.rm = TRUE),
		sd_time = sd(time, na.rm = TRUE)
	)

Çıktı:

## 
# A tibble: 3 x 4
##   poison count_poison mean_time    sd_time
##    <ord>        <int>     <dbl>      <dbl>
## 1      1           16  0.617500 0.20942779
## 2      2           16  0.544375 0.28936641
## 3      3           16  0.276250 0.06227627

) 3 Adım Üçüncü adımda dağılımlar arasında fark olup olmadığını grafiksel olarak kontrol edebilirsiniz. Titreşen noktayı dahil ettiğinizi unutmayın.

ggplot(df, aes(x = poison, y = time, fill = poison)) +
    geom_boxplot() +
    geom_jitter(shape = 15,
        color = "steelblue",
        position = position_jitter(0.21)) +
    theme_classic()

Çıktı:

Tek yönlü ANOVA Testi Örneği

) 4 Adım Tek yönlü ANOVA testini aov komutuyla çalıştırabilirsiniz. ANOVA testi için temel sözdizimi şudur:

aov(formula, data)
Arguments:			
- formula: The equation you want to estimate
- data: The dataset used	

Formülün sözdizimi şöyledir:

y ~ X1+ X2+...+Xn # X1 +  X2 +... refers to the independent variables
y ~ . # use all the remaining variables as independent variables

Artık şu soruyu yanıtlayabilirsiniz: Verilen zehir türü göz önüne alındığında, kobayların hayatta kalma süreleri arasında herhangi bir fark var mı?

Modeli bir nesneye kaydedin ve sonuçların okunabilir bir çıktısını almak için bu nesneyi summary() fonksiyonuna iletin.

anova_one_way <- aov(time~poison, data = df)
summary(anova_one_way)

Code açıklama

  • aov(zaman ~ zehir, veri = df): Aşağıdaki formülle ANOVA testini çalıştırın
  • summary(anova_one_way): Testin özetini yazdır

Çıktı:

##             Df Sum Sq Mean Sq F value   Pr(>F)
## poison       2  1.033  0.5165   11.79 7.66e-05 ***
## Residuals   45  1.972  0.0438                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

p değeri 7.66e-05 olup, olağan eşik değeri olan 0.05'in çok altındadır ve üç yıldız en yüksek anlamlılık kodunu göstermektedir. H0 hipotezini reddedebilir ve en az bir zehir grubunun farklı bir ortalama hayatta kalma süresine sahip olduğu sonucuna varabilirsiniz.

R'de ANOVA Varsayımlarını Nasıl Kontrol Edebilirsiniz?

Bir ANOVA p-değeri, ancak daha önce listelenen üç koşul sağlandığında güvenilirdir. Bunların her birinin R'de doğrudan bir kontrolü vardır ve hepsi uyarlanmış model nesnesi üzerinde çalışır.

1. Gözlemlerin bağımsızlığı. Bu, verilerin değil, çalışma tasarımının bir özelliğidir, bu nedenle hiçbir test bunu düzeltemez. Her kobay bir kez ölçülmeli ve rastgele bir gruba atanmalıdır. Aynı denek birkaç satırda görünüyorsa, bunun yerine tekrarlanan ölçümler modeline ihtiyacınız vardır.

2. Kalıntıların normalliği. ANOVA, ham verilerin değil, artıkların yaklaşık olarak normal dağılıma sahip olduğunu varsayar. QQ grafiğini inceleyin ve Shapiro-Wilk testi ile doğrulayın:

par(mfrow = c(2, 2))
plot(anova_one_way)          # four diagnostic plots

shapiro.test(residuals(anova_one_way))

Normal QQ grafiğinin köşegenine yakın noktalar normal artıkları gösterir. 0.05'in üzerindeki Shapiro-Wilk p değeri, normalliği reddedemeyeceğiniz anlamına gelir.

3. Varyans homojenliği. Her grubun benzer bir dağılım göstermesi gerekir. Kalıntılar ve Uygun Değerler grafiği, huni şeklinde değil, düz bir bant şeklinde görünmelidir. Bunu, Bartlett testine göre normallik dışı durumlara karşı daha dayanıklı olan Levene testiyle doğrulayın:

library(car)
leveneTest(time ~ poison, data = df)

bartlett.test(time ~ poison, data = df)

0.05'in üzerindeki bir p değeri, eşit varyansları destekler.

Bir varsayımın yanlış çıkması durumunda ne yapılmalı? Varyanslar eşit değilse, Welch düzeltmesi olan oneway.test(time ~ poison, data = df, var.equal = FALSE) komutunu çalıştırın. Kalıntıların açıkça normal dağılıma uymadığı ve örneklemin küçük olduğu durumlarda, Kruskal-Wallis sıra testine geçin: kruskal.test(time ~ poison, data = df). Büyük ve dengeli örneklemlerde, ANOVA normal dağılımdan orta dereceli sapmalara karşı oldukça dayanıklıdır, bu nedenle sınırda bir Shapiro-Wilk sonucu nadiren ölümcül olur.

Çiftler arası karşılaştırma

Anlamlı bir F testi, grup ortalamalarının hepsinin eşit olmadığını gösterir, ancak hangi çiftin farklı olduğunu göstermez. Tukey Dürüst Anlamlı Fark testi, aile bazında hata oranını kontrol ederken her çifti karşılaştırarak bu soruyu yanıtlar.

TukeyHSD(anova_one_way)

Çıktı:

Çiftler arası karşılaştırma

Çıktıyı her çift için bir satır olarak okuyun. fark Bu sütun, iki grup ortalaması arasındaki farkı gösterir. lwr hem de lisans Bu fark için yüzde 95 güven aralığını sınırlandırır ve p sıfatı p değeri, çoklu karşılaştırmalar için düzeltilmiştir. Bir çift, aralığı sıfırı dışladığında, yani p adj 0.05'in altında olduğunda anlamlı derecede farklıdır. Bu veri setinde, zehir 3'ü içeren karşılaştırmalar anlamlıdır ve bu durum kutu grafiğiyle de örtüşmektedir: Grup 3'ün ortalama hayatta kalma süresi, Grup 1 ve 2'ye göre açıkça daha düşüktür, oysa Grup 1 ve 2 istatistiksel olarak birbirinden ayırt edilemez.

İki yönlü ANOVA

İki yönlü ANOVA, formüle ikinci bir faktör ekler. Tek yönlü testle tamamen aynı şekilde çalışır, sadece formül değişir:

y ~ x1 + x2

Burada y nicel yanıt değişkeni, x1 ve x2 ise kategorik faktörlerdir.

İki yönlü ANOVA testinde hipotez

  • H0: Her iki faktör değişkeni için grup ortalamaları eşittir.
  • H1: En az iki faktörden biri için, en az bir grup ortalaması farklıdır.

Modele "tedavi" değişkenini ekliyorsunuz. Bu değişken, kobaya verilen tedaviyi kaydeder. Aşağıdaki toplamsal formül, her bir faktörün diğerlerini hesaba kattıktan sonra hayatta kalma süresini kendi başına etkileyip etkilemediğini test eder.

Kodu, ilk bağımsız değişkenin yanına "treat" ifadesini ekleyerek düzenleyin.

anova_two_way <- aov(time~poison + treat, data = df)
summary(anova_two_way)

Çıktı:

##             Df Sum Sq Mean Sq F value  Pr(>F)    
## poison       2 1.0330  0.5165   20.64 5.7e-07 ***
## treat        3 0.9212  0.3071   12.27 6.7e-06 ***
## Residuals   42 1.0509  0.0250                    
## ---

Her iki p değeri de (zehir için 5.7e-07 ve tedavi için 6.7e-06) 0.05'in çok altında olduğundan, her iki faktör için de H0 hipotezini reddeder ve zehir veya tedavinin değiştirilmesinin hayatta kalma süresini etkilediği sonucuna varırsınız.

Etkileşim terimi ekleme

Yukarıdaki toplamsal model, zehrin etkisinin tedaviden bağımsız olarak aynı olduğunu varsayar. Bu varsayımı test etmek için artı işaretini, hem ana etkileri hem de bunların etkileşimini gösteren bir yıldız işaretiyle değiştirin:

anova_interaction <- aov(time~poison * treat, data = df)
summary(anova_interaction)

Eğer zehir:tedavi satırı anlamlı değilse, toplamsal model daha az serbestlik derecesi kullandığı için daha iyi bir seçimdir.

R'de ANOVA: Hızlı Test Referansı

Aşağıdaki tabloda yukarıda kullanılan her test, onu çalıştıran R çağrısı ve değerlendirdiği hipotez listelenmiştir:

test Code Hipotez P-değeri
Tek yönlü ANOVA
aov(y ~ X, data = df)
H1: Ortalama en az bir grup için farklıdır 0.05
ikili
TukeyHSD(ANOVA summary)
0.05
İki yönlü ANOVA
aov(y ~ X1 + X2, data = df)
H1: En az bir grup ortalaması, faktörlerden herhangi biri için farklılık gösterir. 0.05

SSS

F değeri, gruplar arası varyansın grup içi varyansa oranıdır. 1'e yakın değerler, grup ortalamalarının benzer olduğunu gösterir. Büyük değerler ise grupların farklı ortalamalara sahip popülasyonlardan alındığını gösterir.

Varyanslar eşit değilse `oneway.test()` fonksiyonunu `var.equal = FALSE` ile, artıklar açıkça normal dağılıma uymuyorsa `kruskal.test()` fonksiyonunu kullanın. Çarpık bir yanıtı `log()` ile dönüştürmek genellikle hem normalliği hem de eşit varyansı geri kazandırır.

Her t-testi kendi %5'lik yanlış pozitif riskini taşır. Üç ikili test, aile bazında hata oranını yaklaşık %14'e çıkarır. ANOVA, genel testi %5'te tutarken, Tukey HSD ikili karşılaştırmaları düzeltir.

ANOVA, standart bir özellik seçme filtresidir: kategorik tahmincileri, sayısal bir hedefi ne kadar güçlü bir şekilde ayırdıklarına göre sıralar. Yapay zeka ekipleri ayrıca, çapraz doğrulama katmanları arasında model varyantlarını karşılaştırmak için de kullanır.

Evet. Yapay zekâ asistanları serbestlik derecelerini açıklayabilir, p-değerlerini anlaşılır bir dile çevirebilir ve tanısal grafiklerdeki varsayım ihlallerini işaretleyebilir. Okuduğunuz değeri her zaman kendi leveneTest() ve shapiro.test() sonuçlarınızla karşılaştırarak doğrulayın.

Bu yazıyı şu şekilde özetleyin: