Phát triển một thử nghiệm thống kê để phân biệt hai sản phẩm


9

Tôi có một bộ dữ liệu từ một cuộc khảo sát khách hàng, tôi muốn triển khai một thử nghiệm thống kê để xem liệu có sự khác biệt có ý nghĩa giữa sản phẩm 1 và sản phẩm 2 hay không.

Dưới đây là bộ dữ liệu đánh giá của khách hàng.

Tỷ lệ là từ rất xấu, xấu, ổn, tốt, rất tốt.

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

Tôi nên sử dụng phương pháp nào để xem có sự khác biệt nào giữa hai sản phẩm này không?


Xin lưu ý rằng câu trả lời của @ Glen_b đưa ra lời khuyên vượt trội, so với câu trả lời bạn đã chấp nhận. Có lẽ tôi nên nói rằng bạn có thể thay đổi câu trả lời được chấp nhận bất cứ lúc nào (không phải ai cũng biết điều đó).
amip

Câu trả lời:


3

Để xếp hạng bởi các thẩm phán khác nhau, người ta có thể sử dụng bài kiểm tra Friedman. http://en.wikipedia.org/wiki/Friedman_test

Bạn có thể chuyển đổi xếp hạng từ rất xấu sang rất tốt sang các số -2, -1, 0, 1 và 2. Sau đó đặt dữ liệu ở dạng dài và áp dụng Friedman.test với khách hàng làm yếu tố chặ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

Xếp hạng của sự khác biệt giữa 2 sản phẩm là không đáng kể.

Biên tập:

Sau đây là đầu ra của hồi quy:

> 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

nhập mô tả hình ảnh ở đây


1
Sử dụng thử nghiệm của Friedman là quá mức cần thiết. Giống như khuyến nghị sử dụng ANOVA khi chỉ có hai nhóm; sau đó nó chỉ đơn giản là giảm xuống một thử nghiệm t.
amip

Phân tích hồi quy này là không chính xác. Bạn đã coi khách hàng là một biến liên tục thay vì một yếu tố. Nếu bạn khắc phục điều này, bằng cách thay đổi nó thành một yếu tố, bạn sẽ nhận được giá trị p là 0,1316, tương tự như từ một t- test được ghép nối .
Karl Ove Hufthammer

Tôi đã nhận ra rằng đó là một yếu tố, nhưng tôi đã không thay đổi nó vì tôi nhấn mạnh vào bài kiểm tra Friedman. Nhưng vì cỡ mẫu nhỏ, tôi nghĩ rằng một thử nghiệm không tham số (chứ không phải thử nghiệm t) sẽ phù hợp hơn ở đây. Tôi đã sửa phần hồi quy trong câu trả lời của tôi.
rnso

9
  1. Một khả năng là bạn có thể sử dụng kiểm tra dấu hiệu.

    Điều này dựa trên các so sánh trong khách hàng để xem liệu xếp hạng của họ từ sản phẩm1 đến sản phẩm 2 tăng, giảm hay giữ nguyên (theo kiểm tra dấu hiệu nhị thức, giả định rằng bạn chỉ nhận được kết quả "tăng" hoặc "giảm", nhưng có một số cách phổ biến để tiếp cận các mối quan hệ trong cặp, chẳng hạn như khách hàng 9 goodso với good).

    Một cách tiếp cận phổ biến là loại trừ các xếp hạng bị ràng buộc như của khách hàng 9 (để kết luận về tỷ lệ tương đối chênh lệch tăng so với dân số, giả sử lấy mẫu ngẫu nhiên của khách hàng).

    Trong trường hợp này, bạn có 4 khách hàng xếp hạng cao hơn cho sản phẩm thứ hai, 8 khách hàng cho thấp hơn và ba khách hàng tương tự.

    Trong trường hợp đó, với dữ liệu của bạn, 4 trong số một dấu hiệu và 8 dấu hiệu còn lại, kiểm tra dấu hiệu hai đuôi sẽ không tiến gần đến sự từ chối ở bất kỳ mức ý nghĩa điển hình nào. Đây là phân tích trong R:

    > 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 
    

    Giá trị p khá cao.

  2. Bây giờ nếu bạn chuẩn bị gán điểm (hoặc thậm chí chỉ để xếp hạng) cho kích thước tương đối của các thay đổi về xếp hạng trong mỗi cặp - nghĩa là, liệu thay đổi "tốt" thành "xấu" của khách hàng 2 có lớn hơn, nhỏ hơn không hoặc giống như "rất tốt" của khách hàng 4 thành "được", v.v., sau đó, bạn có thể áp dụng bài kiểm tra xếp hạng đã ký trên các cấp bậc đó hoặc bằng cách thực hiện bài kiểm tra hoán vị được ghép đôi trên điểm số được chỉ định (mặc dù bạn cũng phải xử lý các mối quan hệ nặng nề, điều này có thể dễ dàng được thực hiện bằng cách cho phép các nhóm xếp hạng hoặc điểm số bạn thực sự có).

Có một số lựa chọn khác bạn có thể cân nhắc - nhưng tôi không nghĩ rằng lựa chọn phân tích sẽ thay đổi kết quả; Tôi nghĩ rằng tất cả họ sẽ không từ chối ở mức ý nghĩa điển hình trên dữ liệu này.


1
@alesc "thấp kém" chỉ trong những điều kiện nhất định, vượt trội hơn những người khác. Bạn có biết những điều kiện đó là gì không? Thứ tự mà bạn đề cập là thứ tự của các danh mục ban đầu , nhưng điều quan trọng đối với bài kiểm tra xếp hạng đã ký là thứ tự của sự khác biệt . Bằng cách chỉ định các số từ 1 đến 5 cho các danh mục ban đầu, bạn thực sự đã giả định một thang đo khoảng không tồn tại. Không bao gồm các thứ hạng bị ràng buộc không làm xáo trộn dữ liệu, nó thực sự dựa trên thông tin liên quan đến câu hỏi liệu có xu hướng xếp hạng tăng hay giảm.
Glen_b -Reinstate Monica

4
Chúng tôi đang xử lý một mục quy mô Likert 5 điểm . (Một thang đo Likert thực tế là một tổng số trên các mặt hàng như vậy.) Mục quy mô này là thứ tự, bạn đã tự nói như vậy. Nhưng bằng cách sử dụng điểm số nơi spacings giữa các chủng loại đều bình đẳng bạn đang áp đặt một quy mô khoảng - những spacings bằng bạn áp đặt là theo đúng nghĩa đen những gì một quy mô khoảng . Vì vậy, bạn nói nó là thứ tự, và sau đó ngay lập tức coi nó là khoảng. Việc bạn không đề cập đến những gì bạn đã làm là lý do tại sao câu trả lời của bạn cần được sửa đổi. Ngay khi bạn áp dụng bài kiểm tra xếp hạng đã ký cho các cặp dữ liệu thứ tự, bạn coi bản gốc là khoảng thời gian.
Glen_b -Reinstate Monica

1
@rnso Nói chung, ban đầu bằng cách chuyển đổi các danh mục được sắp xếp thành các số không thể thay đổi, bạn sẽ áp đặt một thang đo khoảng cách trong đó đã có một quy tắc thứ tự ... (vì vậy, nói chung, bạn cần phải đưa ra lựa chọn rõ ràng như vậy) nhưng trong trường hợp này - bởi vì đó chỉ là thứ hạng tương đối trong mỗi nhóm quan trọng và chỉ có hai nhóm, điều đó không ảnh hưởng gì. Friedman trong hai nhóm tương đương với một thử nghiệm dấu hiệu (hai đuôi). Có nghĩa là, câu trả lời của bạn giống như của tôi.
Glen_b -Reinstate Monica

1
@rnso Về mặt 'thiết lập', trong R, bạn có thể biến biến phân loại thứ tự của mình thành một yếu tố (thậm chí là một yếu tố thứ tự), mặc dù đối với một số chức năng bạn có thể cần phải xử lý các số. Bất cứ khi nào bạn làm điều đó (sử dụng số tôi có nghĩa là), bạn phải nhớ rằng những số đó không có thuộc tính khoảng - bạn không thể lấy sự khác biệt (hoặc tổng) của các số bạn đã sử dụng. Nếu bạn sẽ không - một tiên nghiệm - tuyên bố rằng một sự thay đổi từ very badtới goodlà hoàn toàn giống với một sự thay đổi từ badtới very good, bạn không thể khẳng định nó sau khi bạn mã chúng như số ... (tiếp)
Glen_b -Reinstate Monica

1
(ctd) ... (nghĩa là bạn không thể coi sự thay đổi của 3 danh mục với các điểm bắt đầu khác nhau là "d = 3". Vì vậy, nếu bạn làm mã 'rất tệ' là 1 lên đến 'rất tốt' là 5 , bạn không thể chỉ nhận sự khác biệt. Trước tiên, bạn phải giả định rõ ràng rằng bạn có thang đo khoảng, và sau đó sự khác biệt là có ý nghĩa.
Glen_b -Reinstate Monica

3

Bạn có dữ liệu thứ tự phụ thuộc. Bạn nên sử dụng bài kiểm tra xếp hạng có chữ ký của Wilcoxon để kiểm tra sự khác biệt đáng kể giữa cả hai sản phẩm trên tất cả các khách hàng.

Nhưng với các dữ liệu trên, bài kiểm tra xếp hạng có chữ ký của Wilcoxon không mang lại kết quả đáng kể.


3
Tôi không nghĩ rằng bạn có thể sử dụng bài kiểm tra xếp hạng đã ký mà không cần đưa ra các giả định bổ sung. Ví dụ: bài kiểm tra xếp hạng đã ký dựa vào xếp hạng chênh lệch cặp tuyệt đối, điều đó có nghĩa là bạn sẽ phải quyết định xem thay đổi "tốt" thành "xấu" của khách hàng 2 lớn hơn, nhỏ hơn hay giống với "4" của khách hàng "Đến" được ". Điều đó cho thấy rằng bạn có thể áp đặt thang đo khoảng thời gian tại một số điểm (thật khó để nói chính xác những gì bạn đã làm, bởi vì bạn không thực sự giải thích nó). Đó là một lựa chọn mà OP có thể đồng ý nhưng trước tiên bạn cần phải hỏi.
Glen_b -Reinstate Monica

4
Để làm rõ: Tôi nghĩ rằng đây có khả năng là một câu trả lời hợp lý, nhưng các giả định cụ thể của nó nên rõ ràng hơn. Tôi nghĩ rằng câu trả lời này có thể được cải thiện nếu bạn giải thích cách bạn tiến hành từ các cặp như ( good, bad) hoặc ( very good, okay) đến một tập hợp các cấp bậc đã ký, vì điều này sẽ làm cho các giả định được đưa ra rõ ràng hơn.
Glen_b -Reinstate Monica

Thứ tự của các câu trả lời được đưa ra, vì vậy việc gán các cấp số từ đến là không đáng kể. Nhìn vào bình luận khác của tôi tại câu trả lời của bạn để biết thêm chi tiết. 515
alesc

4
Alesc, @Glen_b là đúng (và bạn thì không): trong bài kiểm tra xếp hạng có chữ ký, bạn không gán thứ hạng cho các giá trị riêng lẻ, bạn gán thứ hạng cho sự khác biệt giữa các cặp giá trị . Vì vậy, bạn cần có thể tính toán sự khác biệt đầu tiên. Điều này là không thể với dữ liệu thứ tự.
amip

1

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

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.