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.)