A / B testi için hangi istatistiksel test kullanılır?


12

Her biri 1000 numuneden oluşan iki grup var. Her grupta 2 miktar ölçüyoruz. Birincisi ikili bir değişkendir. İkincisi, ağır kuyruk dağılımını takip eden gerçek bir sayıdır. Her bir metrik için hangi grubun en iyi performansı gösterdiğini değerlendirmek istiyoruz. Aralarından seçim yapabileceğiniz birçok istatistiksel test vardır: insanlar z-testi önerir, diğerleri t-testi kullanır ve diğerleri Mann – Whitney U.

  • Olgumuz için her metrik için hangi testi veya testleri seçmeliyiz?
  • Bir test, kohortlar arasında önemli bir fark önerir ve diğer bazı testler de anlamlı olmayan bir fark önerirse ne olur?

Yanıtlar:


12

İki metriğinizin 1) ikili ve 2) ağır kuyruklu olduğu göz önüne alındığında, normal dağılımları kabul eden t testinden kaçınmalısınız.

Bence Mann-Whitney U en iyi seçimdir ve dağıtımlarınız normale yakın olsa bile yeterince verimli olmalıdır.

İkinci sorunuzla ilgili olarak:

Bir test, kohortlar arasında önemli bir fark önerir ve diğer bazı testler de anlamlı olmayan bir fark önerirse ne olur?

İstatistiksel fark sınırda ise ve verilerin "dağınık" örnek dağılımları varsa bu nadir değildir. Bu durum, analistin her bir istatistiksel testin tüm varsayımlarını ve sınırlamalarını dikkatle değerlendirmesini ve en az sayıda varsayım ihlaline sahip istatistiksel teste en fazla ağırlık vermesini gerektirir.

Normal dağılım varsayımını üstlenin. Normallik için çeşitli testler var, ancak bu hikayenin sonu değil. Bazı testler , normallikten biraz sapma olsa bile simetrik dağılımlarda oldukça iyi çalışır , ancak çarpıklık dağılımlarında iyi çalışmaz.

Genel bir kural olarak, varsayımlarından herhangi birinin açıkça ihlal edildiği herhangi bir test yapmamanızı öneririm.

DÜZENLEME: İkinci değişken için, dönüşüm siparişi koruduğu sürece değişkeni normal olarak dağıtılan (veya en azından yakın) bir değişkene dönüştürmek mümkün olabilir. Dönüşümün her iki grup için normal bir dağılım sağladığı konusunda güven duymanız gerekir. Eğer ikinci değişkeni log-normal dağılıma uyduysanız, log fonksiyonu normal dağılıma dönüştürür. Fakat eğer dağıtım Pareto (güç yasası) ise, o zaman normal bir dağılıma dönüşüm olmaz.

DÜZENLEME: Bu yorumda önerildiği gibi , Bayes Tahminini kesinlikle t-testi ve diğer Sıfır Hipotez Anlamlılık Testine (NHST) alternatif olarak düşünmelisiniz.


Bilgi için teşekkürler. Yeterince net değildim, biri ikili diğeri ağır kuyruk dağılımından sonra gerçek bir sayı olan iki miktarım var. Bunu açıklığa kavuşturmak için soruyu düzenledim.
iliasfl

Evet, sanırım anlıyorum. Testi bir kez ikili değişken üzerinde ve bir kez de gerçek değişken üzerinde (ağır kuyruklu dağıtım) iki kez çalıştırmak istiyorsunuz. Her ikisi için de Mann-Whitney U çalışmasını öneriyorum.

Mann-Whitney neden ikili veriler için uygun olur?
Glen_b-Monica

Mann-Whitney U, iki değerli (örn. İkili) ayrık dağılımlar dahil olmak üzere normal olmayan dağılımlar için etkilidir. Eğer tüm veriler ikili vardı, o zaman belki başka bir test daha iyi çalışacak.
MrMeritology

Birisi bunun doğru olup olmadığını onaylayabilir mi? ...

7

Gerçek değerli veriler için, verilerinizin bir önyüklemesine dayalı olarak kendi test istatistiklerinizi oluşturmayı da düşünebilirsiniz. Bu yaklaşım, normal olmayan nüfus dağılımlarıyla uğraşırken veya uygun bir analitik çözümü olmayan bir parametre etrafında bir güven aralığı geliştirmeye çalışırken doğru sonuçlar üretme eğilimindedir. (İlki sizin durumunuz için doğrudur. Ben sadece ikincisi bağlam için bahsediyorum.)

Gerçek değerli verileriniz için aşağıdakileri yaparsınız:

  1. İki grubunuzu havuzlayın.
  2. Havuzdan, yedekli 1000 elemandan oluşan iki grup örnekleyin.
  3. İki grup arasındaki örnek ortalaması farkını hesaplayın.
  4. Bu farklılıkların bir dağılımını geliştirmek için 2. ve 3. adımları birkaç bin kez tekrarlayın.

Bu dağılımı elde ettikten sonra, gerçek örnekleriniz için ortalamadaki farkı ve bir p-değerini hesaplayın.


Teşekkürler, böylece bir ortalama ve standart sapma ile normal olması gereken bir dağılımla sonuçlanırsınız. Kazanana karar vermek için (eğer varsa) p değerini ve belki de güven aralıklarını nasıl hesaplarsınız?
iliasfl

Dağılımın normal olması gerekmez. Kabaca örneklendiği her şeyin dağıtımı olurdu. Bir bootstrap kullanmanın güzelliği budur. Her durumda, test istatistiklerinizi gerçek sonuçlarınızdan hesaplayarak bir p değeri alırsınız. Yani her bir grubun ortalamalarının farkı. Sonra bu sayıyı dağılımla karşılaştırın. Alacağınız yüzdelik, ortalamadaki fark için tek taraflı bir test için p değerinizdir.
Nathan Gould

4
Nathan'ın tanımladığı şey, Bayesci anlamlılık testi yöntemlerinin de temelidir. Bayes Kestirimi T-Testi (BEST) yaklaşımının yerine geçti (ve şu anda kullanıyorum) . Bir havuzlama yaklaşımı uygulamak istiyorsanız bu çerçeveye bakmalısınız.
cwharland

0

MrMeritology'nin cevabını ikinci olarak verdim. Aslında öğrendiğim ve öğretmek için kullandığım ders kitapları MWU'nun sadece sıra (veya aralık / oran) verilere uygulanabileceğini söylediğinden, MWU testinin bağımsız oranların testinden daha az güçlü olup olmayacağını merak ediyordum.

Ancak, aşağıda çizilen simülasyon sonuçlarım, tip I hatasını iyi kontrol ederken (grup 1 = 0.50 popülasyon oranında) MWU testinin aslında oran testinden biraz daha güçlü olduğunu göstermektedir.

resim açıklamasını buraya girin

Grup 2'nin nüfus oranı 0.50'da tutulmuştur. Yineleme sayısı her noktada 10.000'dir. Simülasyonu Yate'in düzeltmesi olmadan tekrarladım, ancak sonuçlar aynıydı.

library(reshape)

MakeBinaryData <- function(n1, n2, p1){
  y <- c(rbinom(n1, 1, p1), 
        rbinom(n2, 1, 0.5))
  g_f <- factor(c(rep("g1", n1), rep("g2", n2)))
  d <- data.frame(y, g_f)
  return(d)
}

GetPower <- function(n_iter, n1, n2, p1, alpha=0.05, type="proportion", ...){
  if(type=="proportion") {
    p_v <- replicate(n_iter, prop.test(table(MakeBinaryData(n1, n1, p1)), ...)$p.value)
  }

  if(type=="MWU") {
    p_v <- replicate(n_iter, wilcox.test(y~g_f, data=MakeBinaryData(n1, n1, p1))$p.value)
  }

  empirical_power <- sum(p_v<alpha)/n_iter
  return(empirical_power)
}

p1_v <- seq(0.5, 0.6, 0.01)
set.seed(1)
power_proptest <- sapply(p1_v, function(x) GetPower(10000, 1000, 1000, x))
power_mwu <- sapply(p1_v, function(x) GetPower(10000, 1000, 1000, x, type="MWU"))

sonuç resminiz siyah
Ooker
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.