Ana içeriğe atla

Kruskal-Wallis Testi: Normallik Olmadan Birden Fazla Grubu Karşılaştırma

Kruskal-Wallis testine yönelik pratik bir rehber — ne olduğu, nasıl çalıştığı, ANOVA yerine ne zaman kullanılacağı ve Python ile R’da nasıl çalıştırılıp yorumlanacağı.
Güncel 4 May 2026  · 9 dk. oku

Verileriniz normal dağılıma uyduğunda birden fazla grubu karşılaştırmak kolaydır. Sorun şu ki, gerçek dünyadaki verilerin çoğu buna uymaz.

Varsayılan testiniz ANOVA ise yanlış sonuçlara varabilirsiniz, çünkü ANOVA verilerinizin normal dağıldığını varsayar. Bu sağlanmadığında — örneğin çarpık dağılımlar veya küçük örneklemler — farklı bir yaklaşıma ihtiyacınız vardır.

Kruskal-Wallis testi bu farklı yaklaşımdır. ANOVA’nın parametrik olmayan bir alternatifidir ve ham değerler yerine sıralamalarla çalışır, bu nedenle normal dağılım bir gereklilik değildir.

Bu yazıda kavramı, arkasındaki matematiği, Python ve R’da nasıl çalıştırılacağını ve sonuçların nasıl yorumlanacağını ele alacağım.

Kruskal-Wallis Testi Nedir?

Kruskal-Wallis testi, üç veya daha fazla bağımsız grubu karşılaştırmak için kullanılan parametrik olmayan bir yöntemdir. Tüm gözlemleri sıralamalara dönüştürür ve ham değerlerle çalışmak yerine bu sıralamaları gruplar arasında karşılaştırır.

Bunu, benim de yazdığım Mann-Whitney U testinin bir uzantısı olarak düşünebilirsiniz.

Mann-Whitney U testi aynı sıralamaya dayalı karşılaştırmayı yapar, ancak yalnızca iki grup için. Kruskal-Wallis testi bunu üç veya daha fazlasına ölçeklendirir; dolayısıyla birden fazla grubunuz varsa ve ANOVA kullanamıyorsanız, kullanmanız gereken budur.

Ham değerler yerine sıralamalarla çalıştığından, verilerinizin belirli bir dağılıma uymasını varsaymaz. Bu da onu gerçek dünya verileriyle kullanışlı kılar; zira veriler nadiren tek bir dağılım tipini kusursuzca takip eder.

Kruskal-Wallis Testi Ne Zaman Kullanılır

Kruskal-Wallis testi şu durumlarda çok uygundur:

  • Üç veya daha fazla bağımsız grup karşılaştırmak istediğinizde
  • Sıralı ya da sürekli veriler — örneğin Likert ölçekleri veya ölçüm verileri
  • Normal olmayan dağılımlar — çarpık veriler, aykırı değerler, küçük örneklemler veya ANOVA’nın kaldıramadığı diğer durumlar
  • Küçük örneklemler — normalliği doğrulamanın zor olduğu durumlar

İşte basit bir örnek.

Üç farklı sınıfın sınav puanlarını karşılaştırmak istediğinizi hayal edin. Puanlar çarpık ve örneklemler küçük, bu yüzden ANOVA iyi bir tercih değildir. Kruskal-Wallis testi normalliğe ihtiyaç duymaz, bu yüzden burada çalışır. Hangi sınıfın diğerlerinden farklı puan aldığına dair en azından bir işaret verir; üstelik verilerinizin destekleyemeyeceği varsayımlara dayanmaz.

Kruskal-Wallis Testi ve ANOVA

Her iki test de grupları karşılaştırır, ancak bunu farklı şekillerde yapar.

ANOVA grup ortalamalarını karşılaştırır ve verilerinizin kabaca eşit varyanslarla normal dağıldığını varsayar. Bu varsayımlar doğru olduğunda daha iyi tercihtir — istatistiksel gücü daha yüksektir ve sonuçları yorumlamak daha kolaydır.

Kruskal-Wallis testi grup dağılımlarını sıralamalar üzerinden karşılaştırır. Normallikle veya eşit varyanslarla ilgilenmez. Bu onu daha esnek kılar, ancak karşılığında bir miktar istatistiksel güç kaybedersiniz.

İşte hızlı bir karşılaştırma tablosu:

ANOVA’nın Kruskal-Wallis testiyle karşılaştırılması

ANOVA’nın Kruskal-Wallis testiyle karşılaştırılması

Verileriniz normal dağılıyorsa ANOVA kullanın. Dağılmıyorsa — ya da öyle olduğunu doğrulayamıyorsanız — Kruskal-Wallis kullanın.

Kruskal-Wallis Testi Formülü

Kruskal-Wallis testi tek bir test istatistiğine, H değerine indirgenir. Formül şöyle:

Kruskal-Wallis formülü

Kruskal-Wallis formülü

Bileşenlerin açıklaması şöyle:

  • N - tüm gruplardaki toplam gözlem sayısı

  • k - grup sayısı

  • n_i - i grubundaki gözlem sayısı

  • R_i - i grubuna atanan sıralamaların toplamı

Formül, her grubun sıra toplamlarının, tüm gruplar özdeş olsaydı bekleyeceğiniz değerden ne kadar saptığını ölçer. Büyük bir H grupların farklı olduğunu, küçük bir H ise pek de farklı olmadıklarını gösterir.

H değerini bulduktan sonra, p-değerini elde etmek için bunu serbestlik derecesi k - 1 olan ki-kare dağılımıyla karşılaştırırsınız.

Kruskal-Wallis Testi Nasıl Çalışır

Kruskal-Wallis testini uygulamak için dört adım gerekir:

  1. Tüm grupları birleştirin: Her gruptaki tüm gözlemleri alın ve tek bir veri kümesinde birleştirin
  2. Tüm gözlemleri sıralayın: Birleştirilmiş verileri küçükten büyüğe doğru sıralayın ve sıralamalar atayın. En küçük değer 1. sırayı, bir sonraki 2. sırayı alır, vb. İki değer eşitse, kaplayacakları sıralamaların ortalamasını paylaşırlar.
  3. Sıra toplamlarını hesaplayın: Sıralamaları özgün gruplarına ayırın. Her grup için sıralamaları toplayın. Bunlar formüldeki sıra toplamlarınızdır — R_i
  4. Test istatistiğini hesaplayın: Sıra toplamlarını H formülüne ekleyin. Gruplar benzerse, sıra toplamları birbirine yakın olur ve H küçük çıkar. Bir grup sürekli olarak daha yüksek veya daha düşük sıralar alıyorsa, H büyür

Ve hepsi bu!

Gördüğünüz gibi test, gerçek değerlere değil, yalnızca bunların diğer her şeye göre konumlarına bakar.

Python’da Kruskal-Wallis Testi

Python’ın scipy kütüphanesinde Kruskal-Wallis testi için yerleşik bir işlev vardır; yani formülü elle uygulamanız gerekmez. Bir örnek üzerinden gidelim.

Diyelim ki üç sınıfın sınav puanlarını karşılaştırıyorsunuz. Testi şöyle çalıştırırsınız:

from scipy import stats

# Exam scores
class_a = [78, 85, 90, 72, 88]
class_b = [65, 70, 68, 74, 60]
class_c = [88, 92, 95, 85, 91]

# Run the test
statistic, p_value = stats.kruskal(class_a, class_b, class_c)

print(f"H statistic: {statistic:.4f}")
print(f"P-value: {p_value:.4f}")

Python çıktısı

Python çıktısı

p-değeri 0,05’in altında; bu da en az bir sınıfın diğerlerinden farklı puan aldığı anlamına gelir. Ancak testin size hangisi olduğunu söylemediğini unutmayın — bunun için bir post hoc teste ihtiyacınız var; bir sonraki bölümde bunu ele alacağım.

R’da Kruskal-Wallis Testi

Tıpkı Python gibi, R’da da bu test için yerleşik bir işlev vardır. Aynı sınav puanı senaryosunu kullanalım.

# Exam scores
class_a <- c(78, 85, 90, 72, 88)
class_b <- c(65, 70, 68, 74, 60)
class_c <- c(88, 92, 95, 85, 91)

# Combine
scores <- c(class_a, class_b, class_c)
groups <- factor(rep(c("A", "B", "C"), each = 5))

# Run the test
kruskal.test(scores ~ groups)

R çıktısı

R çıktısı

Çıktı, Python’da elde ettiğimle aynıdır — aynı H istatistiği, aynı p-değeri. p < 0,05 ile sıfır hipotezini reddeder ve en az bir grubun farklı olduğu sonucuna varırsınız.

Kruskal-Wallis Sonuçları Nasıl Yorumlanır

Kruskal-Wallis testinin sıfır hipotezi, tüm grupların aynı dağılıma sahip olduğudur. p-değeri bunu reddedip reddetmeyeceğinizi söyler. Yorum şöyle yapılır:

  • p < 0,05: En az bir grup diğerlerinden farklıdır; sıfır hipotezini reddedin
  • p >= 0,05: Grupların farklı olduğuna dair güçlü bir kanıt yoktur; sıfır hipotezini reddetmeyin

0,05 eşiği bir uzlaşıdır. Alanınıza veya analizin risklerine bağlı olarak 0,01 gibi daha katı ya da 0,10 gibi daha gevşek bir eşik kullanabilirsiniz.

Unutmayın, bu test hangi grubun farklı olduğunu söylemez. Anlamlı bir sonuç, grupların hepsinin aynı olmadığını belirtir. Bir şeylerin olduğunu bilirsiniz ama nerede olduğunu bilmezsiniz. Hangi ikililerin farkı yarattığını bulmak için bir post hoc teste ihtiyacınız var.

Kruskal-Wallis Sonrasında Post Hoc Testler

Test size en az bir grubun farklı olduğunu söyler, ancak hangisinin gerçekten farklı olduğunu söylemez. Üç grubunuz var ve p < 0,05 ise, A ile B, A ile C, B ile C veya bunların bir kombinasyonu olabilir. Bu ikili karşılaştırmaları elde etmek için bir post hoc test yapmanız gerekir.

Dunn testi en yaygın tercihtir. Tüm gruplar arasında ikili karşılaştırmalar yapar ve çoklu karşılaştırmaları hesaba katmak için p-değerlerini düzeltir — bu düzeltme olmadan, yalancı pozitif bulma olasılığınızı artırırsınız. Ne kadar çok karşılaştırma yaparsanız, yalnızca şans eseri "anlamlı" bir sonuç bulma riski o kadar artar.

Python’da Dunn testi

Bunun için scikit_posthocs kütüphanesine ihtiyacınız olacak. Yüklü değilse pip install scikit-posthocs komutuyla kurun.

Bundan sonra hesaplama basittir:

import scikit_posthocs as sp
import pandas as pd

# Same exam scores as before
class_a = [78, 85, 90, 72, 88]
class_b = [65, 70, 68, 74, 60]
class_c = [88, 92, 95, 85, 91]

# Combine
scores = class_a + class_b + class_c
groups = ["A"] * 5 + ["B"] * 5 + ["C"] * 5

df = pd.DataFrame({"score": scores, "group": groups})

# Run the test
result = sp.posthoc_dunn(df, val_col="score", group_col="group", p_adjust="bonferroni")
print(result)

Python’da Dunn testi

Python’da Dunn testi

Her hücre o ikili karşılaştırma için düzeltilmiş p-değerini gösterir. Burada yalnızca B ile C (p = 0,004) 0,05 eşiğini aşıyor; dolayısıyla bu iki grup farklıdır. A ile B (p = 0,167) ve A ile C (p = 0,607) için fark yok; bu da A sınıfının diğer iki sınıftan istatistiksel olarak farklı olmadığı anlamına gelir.

R’da Dunn testi

Öncelikle gerekirse install.packages("dunn.test") komutuyla kütüphaneyi yükleyin:

library(dunn.test)

# Same exam scores as before
class_a <- c(78, 85, 90, 72, 88)
class_b <- c(65, 70, 68, 74, 60)
class_c <- c(88, 92, 95, 85, 91)

scores <- c(class_a, class_b, class_c)
groups <- factor(rep(c("A", "B", "C"), each = 5))

# Run the test
dunn.test(scores, groups, method = "bonferroni")

R’da Dunn testi

R’da Dunn testi

Beklendiği gibi sonuçlar Python ile eşleşiyor. Yalnızca B ile C anlamlı; A ile B ve A ile C değil. Kruskal-Wallis testinin saptadığı farkın arkasında B ve C sınıfları var.

Kruskal-Wallis Testinin Varsayımları

Kruskal-Wallis testi ANOVA’dan daha esnektir, ancak çalıştırmadan önce kontrol etmeniz gereken üç varsayımı vardır:

  • Bağımsız örneklemler: Bir gruptaki gözlemler diğer gruplardakileri etkilememelidir. Verileriniz eşleştirilmiş ya da tekrarlı ölçümler ise bu test uygun değildir
  • Sıralı ya da sürekli veriler: Testin sıralayabileceğiniz verilere ihtiyacı vardır. Nominal kategoriler (renkler veya etiketler gibi) sıralanamaz, bu yüzden burada işe yaramaz
  • Benzer dağılım şekilleri: Sonuçları yalnızca dağılımlar yerine medyanların karşılaştırması olarak yorumlamak istiyorsanız, grupların kabaca aynı şekle sahip olması gerekir. Şekiller çok farklıysa yine dağılımları karşılaştırabilirsiniz, ancak medyan yorumu geçerli olmaz

İlk iki varsayımı ihlal ederseniz test sonuçları geçerli olmaz. Üçüncü varsayım ise daha yumuşaktır; testi çalıştırıp çalıştıramayacağınızı değil, sonuçları nasıl yorumlayacağınızı etkiler.

Kruskal-Wallis Testini Ne Zaman Kullanmamalısınız

Aşağıdaki üç durumda farklı bir test daha uygun olacaktır:

  • Verileriniz eşleştirilmiş ya da tekrarlı ölçümler ise: Aynı denekler gruplar arasında yer alıyorsa bunun yerine Friedman testini kullanın. Bu, bağımlı örneklemler için tasarlanmış parametrik olmayan denk testtir. Eşleştirilmiş verilerde Kruskal-Wallis kullanmak, gözlemler arasındaki ilişkiyi göz ardı eder ve yanlış sonuçlara yol açabilir
  • Verileriniz ANOVA’nın varsayımlarını sağlıyorsa: Verileriniz normal dağılıma sahip ve varyanslar kabaca eşitse ANOVA daha iyi tercihtir. İstatistiksel gücü daha yüksektir; yani gerçek farklar olduğunda bunları saptamada daha iyidir
  • Örneklem büyüklükleriniz büyükse: Büyük örneklemlerde, veriler mükemmel şekilde normal olmasa bile parametrik yöntemler genellikle iyi çalışır. Merkezi limit teoremi devreye girer ve ANOVA, sıralamaya dayalı yaklaşımdan daha güvenilir sonuçlar verir. Grup başına yüzlerce veya binlerce gözlemle çalışıyorsanız Kruskal-Wallis sizin için uygun test değildir

Sonuç

Kruskal-Wallis testi, ANOVA gibi testlerin gerektirdiği normal dağılım sağlanmadığında üç veya daha fazla bağımsız grubu karşılaştırır. Bunu, ham değerler yerine sıralamalarla çalışarak başarır.

Bununla birlikte bu, ANOVAnın yerine geçmez. Verileriniz normalse ANOVA daha iyi testtir, çünkü istatistiksel gücü daha yüksektir. Öte yandan verileriniz eşleştirilmişse Friedman testini kullanın. Her zaman olduğu gibi, doğru test verilerinize bağlıdır.

Koşullar uygun olduğunda Kruskal-Wallis testi güvenilir ve doğrudan bir seçenektir. Testi çalıştırmanız, p-değerini kontrol etmeniz ve farkın hangi gruplardan kaynaklandığını bilmeniz gerekirse Dunn testiyle devam etmeniz yeterlidir.

İstatistik bilginiz biraz paslandı mı? Introduction to Statistics kursumuzu alın ve tek bir öğleden sonra içinde tekrar ritminizi bulun.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Hırvatistan merkezli Kıdemli Veri Bilimci. 700’ün üzerinde yayımlanmış makaleyle 10 M+ görüntüleme elde eden, önde gelen bir teknoloji yazarı. TPOT ile Makine Öğrenimi Otomasyonu kitabının yazarı.

Kruskal-Wallis Testi Hakkında SSS

Kruskal-Wallis testi ne için kullanılır?

Kruskal-Wallis testi, verilerinizin normal dağılıma uyduğunu varsayamayacağınız durumlarda üç veya daha fazla bağımsız grubu karşılaştırmak için kullanılır. Ham değerler yerine sıralamalarda çalışan ANOVA’nın parametrik olmayan bir alternatifidir. Dağılımların çarpık olduğu veya verilerin sıralı olduğu durumlarda kullanışlıdır.

Anlamlı bir Kruskal-Wallis sonucu ne anlama gelir?

Anlamlı bir sonuç — tipik olarak p < 0,05 — en az bir grubun diğerlerinden farklı olduğu anlamına gelir. Hangi grupların farklı olduğunu söylemez, yalnızca hepsinin aynı olmadığını belirtir. Farkın hangi çiftlerden kaynaklandığını bulmak için Dunn testi gibi bir post hoc testle devam etmeniz gerekir.

Kruskal-Wallis testinin varsayımları nelerdir?

Test, bağımsız örneklemler gerektirir; yani bir gruptaki gözlemler diğerini etkilememelidir. Verileriniz sıralı ya da sürekli olmalıdır — sıralayabileceğiniz türden veriler. Sonuçları medyanların karşılaştırması olarak yorumlamak isterseniz, grupların dağılım şekilleri de benzer olmalıdır.

Kruskal-Wallis testi ile Mann-Whitney U testi arasındaki fark nedir?

Mann-Whitney U testi iki bağımsız grubu karşılaştırırken, Kruskal-Wallis testi bu yaklaşımı üç veya daha fazla gruba genişletir. Her ikisi de sıralamalarda çalışır ve normalliği varsaymaz. Yalnızca iki grubunuz varsa doğru seçim Mann-Whitney U’dur — Kruskal-Wallis çok gruplu denkidir.

Kruskal-Wallis&rsquo;ten sonra Dunn testini ne zaman kullanmalısınız?

Kruskal-Wallis sonucunuz anlamlı olduğunda ve hangi grup çiftlerinin farklı olduğunu öğrenmek istediğinizde Dunn testini çalıştırın. Tüm gruplar arasında ikili karşılaştırmalar yapar ve çoklu karşılaştırmalar nedeniyle oluşabilecek yalancı pozitifleri azaltmak için p-değerlerini düzeltir. Python’da scikit_posthocs.posthoc_dunn() bunu yapar, R’da ise dunn.test paketi aynı işlevi sunar.

Konular

DataCamp ile öğrenin

Kurs

R ile İstatistiğe Giriş

4 sa
128.6K
İstatistik becerilerinizi geliştirin ve verileri toplama, analiz etme ve doğru sonuçlar çıkarma yöntemlerini öğrenin.
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow