İki ürünü ayırt etmek için istatistiksel bir test geliştirin


9

Bir müşteri anketinden veri kümem var, ürün 1 ile ürün 2 arasında anlam farkı olup olmadığını görmek için istatistiksel bir test uygulamak istiyorum.

İşte müşterilerin incelemelerinden oluşan bir veri kümesi.

Oranı çok kötü, kötü, tamam, iyi, çok iyi.

customer    product1    product2
1           very good   very bad
2           good        bad
3           okay        bad
4           very good   okay
5           bad         very good
6           okay        good
7           bad         okay
8           very good   very bad
9           good        good
10          good        very good
11          okay        okay
12          very good   good
13          good        good
14          very good   okay
15          very good   okay

Bu iki ürün arasında herhangi bir fark olup olmadığını görmek için hangi yöntemleri kullanmalıyım?


@ Glen_b'in cevabının, kabul ettiğiniz cevaba kıyasla üstün tavsiyeler verdiğini lütfen unutmayın. Belki de kabul edilmiş bir cevabı istediğiniz zaman değiştirebileceğinizi söyleyebilirim (herkes bunun farkında değil).
amip

Yanıtlar:


3

Farklı hâkimlerin sıralaması için Friedman testi kullanılabilir. http://en.wikipedia.org/wiki/Friedman_test

Derecelendirmeleri çok kötüden çok iyi olana -2, -1, 0, 1 ve 2 rakamlarına dönüştürebilirsiniz. Sonra verileri uzun formda koyun ve engelleme faktörü olarak müşteri ile friedman.test'i uygulayın:

> mm
   customer variable value
1         1 product1     2
2         2 product1     1
3         3 product1     0
4         4 product1     2
5         5 product1    -1
6         6 product1     0
7         7 product1    -1
8         8 product1     2
9         9 product1     1
10       10 product1     1
11       11 product1     0
12       12 product1     2
13       13 product1     1
14       14 product1     2
15       15 product1     2
16        1 product2    -2
17        2 product2    -1
18        3 product2    -1
19        4 product2     0
20        5 product2     2
21        6 product2     1
22        7 product2     0
23        8 product2    -2
24        9 product2     1
25       10 product2     2
26       11 product2     0
27       12 product2     1
28       13 product2     1
29       14 product2     0
30       15 product2     0
> 
> friedman.test(value~variable|customer, data=mm)

        Friedman rank sum test

data:  value and variable and customer
Friedman chi-squared = 1.3333, df = 1, p-value = 0.2482

2 ürün arasındaki farkın sıralaması önemli değildir.

Düzenle:

Regresyon çıktısı aşağıdadır:

> summary(lm(value~variable+factor(customer), data=mm))

Call:
lm(formula = value ~ variable + factor(customer), data = mm)

Residuals:
   Min     1Q Median     3Q    Max 
  -1.9   -0.6    0.0    0.6    1.9 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)
(Intercept)         4.000e-01  9.990e-01   0.400    0.695
variableproduct2   -8.000e-01  4.995e-01  -1.602    0.132
factor(customer)2   6.248e-16  1.368e+00   0.000    1.000
factor(customer)3  -5.000e-01  1.368e+00  -0.365    0.720
factor(customer)4   1.000e+00  1.368e+00   0.731    0.477
factor(customer)5   5.000e-01  1.368e+00   0.365    0.720
factor(customer)6   5.000e-01  1.368e+00   0.365    0.720
factor(customer)7  -5.000e-01  1.368e+00  -0.365    0.720
factor(customer)8   9.645e-16  1.368e+00   0.000    1.000
factor(customer)9   1.000e+00  1.368e+00   0.731    0.477
factor(customer)10  1.500e+00  1.368e+00   1.096    0.291
factor(customer)11  7.581e-16  1.368e+00   0.000    1.000
factor(customer)12  1.500e+00  1.368e+00   1.096    0.291
factor(customer)13  1.000e+00  1.368e+00   0.731    0.477
factor(customer)14  1.000e+00  1.368e+00   0.731    0.477
factor(customer)15  1.000e+00  1.368e+00   0.731    0.477

Residual standard error: 1.368 on 14 degrees of freedom
Multiple R-squared:  0.3972,    Adjusted R-squared:  -0.2486 
F-statistic: 0.6151 on 15 and 14 DF,  p-value: 0.8194

resim açıklamasını buraya girin


1
Friedman'ın testini kullanmak aşırı bir iştir. Sadece iki grup olduğunda ANOVA kullanılmasını tavsiye etmek gibidir; o zaman sadece bir t-testine düşer.
amip

Bu regresyon analizi yanlıştır. Müşteriye, faktör yerine sürekli değişken olarak davrandınız . Bunu düzeltirseniz, bir faktöre değiştirerek , 0.1316'lık bir p değeri elde edersiniz, yani eşleştirilmiş bir t testinden aynı .
Karl Ove Hufthammer

Bunun bir faktör olması gerektiğini fark etmiştim, ama vurgulamam Friedman testinde olduğundan değiştirmedim. Ancak örneklem büyüklüğü küçük olduğundan, parametrik olmayan bir testin (t testi yerine) burada daha uygun olacağını düşünüyorum. Cevabımdaki regresyon kısmını düzelttim.
rnso

9
  1. Bir olasılık, işaret testini kullanabilmenizdir.

    Bu, ürün1'den ürün2'ye kadar derecelendirmelerinin yükselip alçalmadığını veya aynı olup olmadığını görmek için müşterilerdeki karşılaştırmalara dayanır (binomiyal işaret testi altında sadece "yukarı" veya "aşağı" sonuçlar elde ettiğiniz varsayılır, ancak müşteri good9'lar vs gibi çift içi bağlara yaklaşmanın birkaç yaygın yolu good).

    Yaygın bir yaklaşım, müşteri 9'ları gibi bağlı derecelendirmeleri hariç tutmaktır (böylece sonuç, müşterilerin rastgele örneklenmesi varsayıldığında, popülasyondaki yukarı-aşağı farklarının göreli oranı hakkındadır).

    Bu durumda, ikinci ürüne daha yüksek puan veren 4, daha düşük veren 8 ve aynı ürünü veren üç müşteriniz vardı.

    Bu durumda, verilerinizden biri, diğerinden 8'i diğerinin 8'i ile, iki kuyruklu bir işaret testi, herhangi bir tipik önem düzeyinde reddedilmeye yaklaşmayacaktır. İşte R'deki analiz:

    > binom.test(4,12)
    
            Exact binomial test
    
    data:  4 and 12
    number of successes = 4, number of trials = 12, p-value = 0.3877
    alternative hypothesis: true probability of success is not equal to 0.5
    95 percent confidence interval:
     0.09924609 0.65112449
    sample estimates:
    probability of success 
                 0.3333333 
    

    P değeri oldukça yüksektir.

  2. Şimdi , her bir çiftteki derecelendirmelerdeki göreli değişikliklerin göreli boyutlarına puanlar atamaya (hatta sadece sıralamaya) hazırsanız, yani müşteri 2'nin "iyi" ile "kötü" değişiklik arasında daha büyük, daha küçük olup olmadığı ya da müşteri 4'ün "tamam" a "çok iyi" sine benzer, ve bu durumda, bu derecelere imzalı bir sıralama testi uygulayabilir veya atanan puanlarda eşleştirilmiş bir permütasyon testi uygulayabilirsiniz (yine de ağır bağlarla uğraşmanız gerekir, bu, gerçekte sahip olduğunuz rütbe veya puan kümelerine izin vererek kolayca yapılabilir).

Düşünebileceğiniz başka seçenekler de var - ancak analiz seçiminin sonucu değiştireceğini düşünmüyorum; Sanırım hepsi bu verilerdeki tipik önem düzeylerinde reddetmeyecekler.


1
@alesc "aşağı" sadece belirli koşullar altında, diğerlerinden üstün. Bu koşulların ne olduğunu biliyor musunuz? Bahsettiğiniz sıra, orijinal kategorilerin sıralamasıdır , ancak imzalı sıralama testi için önemli olan farkların sıralanmasıdır . Bu orijinal kategorilere 1 ile 5 arasındaki sayıları atayarak, aslında yok olan bir aralık ölçeği aldınız. Bağlı rütbeleri hariç tutmak verilerle kurcalamıyor , aslında derecelendirmelerin artma veya azalma eğilimi olup olmadığı sorusuyla ilgili bilgileri şartlandırıyor.
Glen_b

4
5'li Likert ölçekli bir ürünle ilgileniyoruz . (Gerçek bir Likert ölçeği , bu tür öğelerin toplamıdır.) Bu ölçek öğesi sıralı, kendiniz söylediniz. Ama kategoriler arasındaki mesafelerin Eğer eşit puanları kullanarak edilir bir aralık ölçeği heybetli - Sen düzenlenmiş olanlar eşit aralıkları tam anlamıyla bir aralık ölçeği ne olduğunu . Yani sıralı olduğunu söyledin ve hemen ara verdiler. Yaptıklarınızdan bahsetmediğiniz gerçeği, cevabınızın neden değiştirilmesi gerektiğidir. Sıralı veri çiftlerine imzalı bir sıralama testi uygular uygulanmaz, orijinali aralık olarak ele alırsınız.
Glen_b

1
@rnso Genel olarak, sipariş edilen kategorileri başlangıçta eşitlenmiş sayılara dönüştürerek sıralı olanın bulunduğu bir aralık ölçeği uygularsınız ... (yani, genel olarak böyle bir seçimi açık yapmanız gerekir) ama Bu durumda - çünkü her grup içindeki önemli olan göreceli sıralamalar ve hiçbir şey incitmeyen sadece iki grup var. İki gruptaki Friedman (iki kuyruklu) işaret testine eşdeğerdir. Yani cevabınız benimkiyle aynı.
Glen_b -Monica

1
@rnso 'Kurulum' açısından, R'de sıralı kategorik değişkeninizi bir faktör (hatta sıralı bir faktör) yapabilirsiniz, ancak bazı işlevler için sayılarla uğraşmanız gerekebilir. Bunu yaptığınızda (demek istediğim sayıları kullan), bu sayıların aralık özelliğine sahip olmadığını aklınızda bulundurmalısınız - sadece kullandığınız sayıların farklarını (veya toplamlarını) alamazsınız. Eğer olmaz - önsel - bir kayma olduğunu iddia very badetmek gooddoğru kayan tamamen aynıdır badiçin very good, senden sonrakilere numaraları olarak bunları kod bunu iddia edemez ... (ctd)
Glen_b -Reinstate Monica

1
(ctd) ... (sadece ikisi olarak farklı başlangıç noktaları ile 3 kategoriden kaymasını tedavi edemeyeceğini yani "d = 3". Yani eğer do 5 gibi 'çok iyi' 1 up olarak 'çok kötü' kod Öncelikle bir aralık ölçeğine sahip olduğunuzu açıkça varsaymalısınız ve sonra farklılıklar anlamlı olmalıdır
Glen_b

3

Bağımlı sıra verileriniz var. Sen kullanmalıdır Wilcoxon signed-rank testi tüm müşteriler arasında her iki ürün arasında önemli fark testine.

Ancak yukarıdaki veriler göz önüne alındığında, Wilcoxon işaretli sıra testi önemli sonuçlar vermiyor.


3
Ek varsayımlar yapmadan imzalı sıralama testini kullanabileceğinizi sanmıyorum. Örneğin, imzalı sıralama testi mutlak çift farklılıklarını sıralamaya dayanır, yani müşteri 2'nin "iyi" ile "kötü" değişiklik arasında daha büyük, daha küçük veya aynı müşteri 4'ün çok iyi olup olmadığına karar vermeniz gerekir. "tamam". Bu, muhtemelen bir noktada bir aralık ölçeği uyguladığınızı gösterir (yine de tam olarak ne yaptığınızı söylemek zordur, çünkü gerçekten açıklamıyorsunuz). Bu, OP'nin hemfikir olabileceği bir seçimdir, ancak önce sormanız gerekir.
Glen_b

4
Açıklığa kavuşturmak için: Bunun potansiyel olarak makul bir cevap olduğunu düşünüyorum, ancak özel varsayımları daha açık olmalıdır. Sanırım ( good, bad) veya ( very good, okay) gibi çiftlerden bir dizi işaretli aşamaya nasıl ilerlediğinizi açıklarsanız bu cevap geliştirilebilir , çünkü bu yol boyunca yapılan varsayımları daha açık hale getirecektir.
Glen_b -Mo Monica

Cevapların sırası verilmiştir, bu nedenle 1 için 5önemsizdir. Daha fazla ayrıntı için cevabınızdaki diğer yorumuma bakın.
alesc

4
Alesc, @Glen_b haklı (ve siz değilsiniz): işaretli sıralama testinde bireysel değerlere sıralama atamazsınız, değer çiftleri arasındaki farklılıklara sıralama atarsınız . Bu yüzden önce farklılıkları hesaplayabilmeniz gerekir. Sıralı verilerle bu mümkün değildir.
amip

1

Eşleştirilmiş t testini kullanın

Yeterli derecelendirmeye sahip olduğunuz sürece (15 yeterlidir ve daha azıyla bile mutlu olurum) ve derecelendirme farklılıklarında bazı farklılıklar varsa, eşleştirilmiş t testini kullanmakta sorun yoktur . Daha sonra yorumlanması çok kolay tahminler elde edersiniz - 1-5 sayısal ölçekte ortalama derecelendirmeler + (ürünler arasındaki) farkı.

R kodu

R'de yapmak çok kolay:

> ratings = c("very bad", "bad", "okay", "good", "very good")
> d = data.frame(
      customer = 1:15,
      product1 = factor(c(5, 4, 3, 5, 2, 3, 2, 5, 4, 4, 3, 5, 4, 5, 5),
                        levels=1:5, labels=ratings),
      product2 = factor(c(1, 2, 2, 3, 5, 4, 3, 1, 4, 5, 3, 4, 4, 3, 3),
                        levels=1:5, labels=ratings))
> head(d)
  customer  product1  product2
1        1 very good  very bad
2        2      good       bad
3        3      okay       bad
4        4 very good      okay
5        5       bad very good
6        6      okay      good

İlk önce ortalama derecelendirmeleri kontrol edelim:

> mean(as.numeric(d$product1))
    [1] 3.9333
    > mean(as.numeric(d$product2))
[1] 3.1333

Ve t testi bize şunları verir:

> t.test(as.numeric(d$product1),
as.numeric(d$product2), paired=TRUE)
    Paired t-test

data:  as.numeric(d$product1) and as.numeric(d$product2)
t = 1.6, df = 14, p-value = 0.13
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.27137  1.87137
sample estimates:
mean of the differences 
                    0.8 

p-değeri yok ki, 0.13 olduğunu değil (- biz gerçekten daha fazla veri gerek ama notunu oldukça güven aralığını yapmak) kuvvetle ürünler 0,8 bariz farklar dışında, farklı derecelendirilir düşündürmektedir.

Sahte veriler mi?

Merakla ve beklenmedik bir şekilde eşleştirilmemiş bir t testi, daha düşük bir p değeri verir .

> t.test(as.numeric(d$product1),
             as.numeric(d$product2), paired=FALSE)
    Welch Two Sample t-test

data:  as.numeric(d$product1) and as.numeric(d$product2)
t = 1.86, df = 27.6, p-value = 0.073
[…]

Bu, örnek verilerin sahte olduğunu gösterir. Gerçek veriler için, aynı müşterinin puanları arasında (oldukça yüksek) pozitif bir korelasyon beklenebilir. Burada korelasyon negatiftir (istatistiksel olarak anlamlı olmasa da):

> cor.test(as.numeric(d$product1), as.numeric(d$product2))

    Pearson's product-moment correlation

data:  as.numeric(d$product1) and as.numeric(d$product2)
t = -1.38, df = 13, p-value = 0.19
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.73537  0.18897
sample estimates:
     cor 
-0.35794

Kayıp veri

Tüm müşteriler her iki ürünü de (yani dengesiz veriler) derecelendirmediğinde, daha iyi bir yaklaşım karma efektler modeli kullanmaktır:

Önce verileri sayısal forma dönüştürelim:

> d2 = d
> d2[,-1] = lapply(d2[,-1], as.numeric)

Ve 'uzun' forma dönüştürün:

> library(tidyr)
> d3 = gather(d2, product, value, -customer)

Ve son olarak, rastgele bir etki olarak müşteri ile karışık efekt modeline uyun:

> l = lme(value~product, random=~1|customer, data=d3)
> summary(l)
Linear mixed-effects model fit by REML
 Data: d3 
     AIC    BIC  logLik
  101.91 107.24 -46.957

Random effects:
 Formula: ~1 | customer
        (Intercept) Residual
StdDev:  3.7259e-05   1.1751

Fixed effects: value ~ product 
                  Value Std.Error DF t-value p-value
(Intercept)      3.9333   0.30342 14 12.9633  0.0000
productproduct2 -0.8000   0.42910 14 -1.8644  0.0834
[…]

pdeğeri 0.0834'tür. Genellikle dengeli veriler için, eşleştirilmiş bir t testinden elde edilen p değeri ile hemen hemen aynı olacaktır . Burada negatif korelasyon nedeniyle eşleştirilmemiş bir t- testinin p- değerine daha yakındır . Müşteri etkisi (rastgele kesme) için varyansın neredeyse sıfır olduğunu unutmayın. Bu nadiren gerçek verilerle olur.

özet

Özet olarak, eşleştirilmiş t testini kullanın . Daha sonra yorumlanması kolay tahminler alırsınız (basit sayısal ortalamalar).

Tüm müşteriler her iki ürünü de derecelendirmediyse, bunun yerine karışık efektler modeli kullanın. (Bu yaklaşık olarak aynı sonuçları verecektir eşleşmiş t -testi onlar ne zaman gelmiş bütün iki ürünü puan, bu nedenle de her zaman kullanabilir.)

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.