Sử dụng t- test cặp
Miễn là bạn có đủ xếp hạng (15 là đủ, và tôi sẽ rất vui ngay cả khi có ít hơn) và một số thay đổi về chênh lệch xếp hạng, không có vấn đề gì khi sử dụng t- test được ghép nối . Sau đó, bạn nhận được các ước tính rất dễ diễn giải - xếp hạng trung bình trên thang số 1 15 + sự khác biệt của nó (giữa các sản phẩm).
Mã R
Rất dễ thực hiện trong R:
> 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
Trước tiên, hãy kiểm tra xếp hạng trung bình:
> mean(as.numeric(d$product1))
[1] 3.9333
> mean(as.numeric(d$product2))
[1] 3.1333
Và t- test cho chúng ta:
> 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
Giá trị là 0,13, điều này không cho thấy mạnh mẽ rằng các sản phẩm được xếp hạng khác nhau, mặc dù có sự khác biệt rõ ràng là 0,8 (nhưng lưu ý khoảng tin cậy khá - chúng tôi thực sự cần nhiều dữ liệu hơn).p
Dữ liệu giả?
Thật kỳ lạ, và thật bất ngờ, một t- test không ghép đôi cho giá trị p thấp hơn .
> 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
[…]
Điều này không cho thấy rằng dữ liệu ví dụ là giả mạo. Đối với dữ liệu thực, người ta sẽ mong đợi một mối tương quan tích cực (khá cao) giữa các xếp hạng từ cùng một khách hàng. Ở đây mối tương quan là âm (mặc dù không có ý nghĩa thống kê như vậy):
> 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
Dữ liệu bị mất
Khi không phải tất cả khách hàng đã xếp hạng cả hai sản phẩm (nghĩa là dữ liệu không cân bằng), cách tiếp cận tốt hơn là sử dụng mô hình hiệu ứng hỗn hợp:
Trước tiên chúng ta hãy chuyển đổi dữ liệu sang dạng số:
> d2 = d
> d2[,-1] = lapply(d2[,-1], as.numeric)
Và chuyển đổi nó thành dạng 'dài':
> library(tidyr)
> d3 = gather(d2, product, value, -customer)
Và cuối cùng phù hợp với một mô hình hiệu ứng hỗn hợp với khách hàng như một hiệu ứng ngẫu nhiên:
> 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
[…]
p
Tóm lược
Tóm lại, sử dụng t- test ghép nối . Sau đó, bạn nhận được các ước tính dễ hiểu (trung bình số đơn giản).
Nếu không phải tất cả khách hàng đã đánh giá cả hai sản phẩm, hãy sử dụng mô hình hiệu ứng hỗn hợp thay thế. (Điều này sẽ cung cấp cho khoảng kết quả tương tự như ghép nối t -test khi họ đã tất cả các đánh giá cả hai sản phẩm, vì vậy bạn cũng có thể luôn luôn sử dụng nó.)