พัฒนาการทดสอบทางสถิติเพื่อแยกความแตกต่างของสองผลิตภัณฑ์


9

ฉันมีชุดข้อมูลจากแบบสำรวจลูกค้าฉันต้องการปรับใช้การทดสอบทางสถิติเพื่อดูว่ามีความแตกต่างอย่างมีนัยสำคัญระหว่างผลิตภัณฑ์ 1 และผลิตภัณฑ์ 2 หรือไม่

นี่คือชุดข้อมูลของความคิดเห็นของลูกค้า

อัตรานี้แย่มากแย่มากโอเคดีถึงดีมาก

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

ฉันควรใช้วิธีการใดเพื่อดูว่ามีความแตกต่างระหว่างผลิตภัณฑ์ทั้งสองนี้หรือไม่


โปรดทราบว่าคำตอบของ @ Glen_b จะให้คำแนะนำที่เหนือกว่าเมื่อเปรียบเทียบกับคำตอบที่คุณยอมรับ บางทีฉันควรพูดว่าคุณสามารถเปลี่ยนคำตอบที่ยอมรับได้ตลอดเวลา (ไม่ใช่ทุกคนที่รู้เรื่องนั้น)
อะมีบา

คำตอบ:


3

สำหรับการจัดอันดับโดยกรรมการที่แตกต่างกันหนึ่งสามารถใช้การทดสอบฟรีดแมน http://en.wikipedia.org/wiki/Friedman_test

คุณสามารถแปลงการให้คะแนนจากแย่มากถึงดีมากเป็นตัวเลขที่ -2, -1, 0, 1 และ 2 จากนั้นใส่ข้อมูลในแบบยาวและใช้ Friedman.test กับลูกค้าเป็นปัจจัยปิดกั้น:

> 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 ผลิตภัณฑ์ไม่สำคัญ

แก้ไข:

ต่อไปนี้เป็นผลลัพธ์ของการถดถอย:

> 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

ป้อนคำอธิบายรูปภาพที่นี่


1
การใช้การทดสอบของฟรีดแมนนั้นเกินความจริง มันก็เหมือนกับการแนะนำให้ใช้ ANOVA เมื่อมีสองกลุ่มเท่านั้น จากนั้นจะลดการทดสอบที
อะมีบา

การวิเคราะห์การถดถอยนี้ไม่ถูกต้อง คุณถือว่าลูกค้าเป็นตัวแปรต่อเนื่องแทนที่จะเป็นปัจจัย หากคุณแก้ไขสิ่งนี้โดยการเปลี่ยนเป็นปัจจัยคุณจะได้รับp-valueเท่ากับ 0.1316 เช่นเดียวกันกับจากt -test ที่จับคู่
Karl Ove Hufthammer

ฉันได้ตระหนักว่ามันควรจะเป็นปัจจัย แต่ฉันไม่ได้เปลี่ยนเพราะความสำคัญของฉันคือการทดสอบฟรีดแมน แต่เนื่องจากขนาดตัวอย่างเล็กฉันจึงคิดว่าการทดสอบที่ไม่ใช่พารามิเตอร์ (แทนที่จะทดสอบที) จะเหมาะสมกว่าที่นี่ ฉันแก้ไขส่วนการถดถอยในคำตอบของฉันแล้ว
rnso

9
  1. ความเป็นไปได้อย่างหนึ่งคือคุณสามารถใช้การทดสอบเครื่องหมาย

    สิ่งนี้ขึ้นอยู่กับการเปรียบเทียบภายในลูกค้าเพื่อดูว่าการจัดอันดับของพวกเขาจาก product1 กับ product2 เพิ่มขึ้นลงหรืออยู่ในระดับเดียวกัน (ภายใต้เครื่องหมายทวินามการทดสอบสมมติว่าคุณได้ผลลัพธ์ "up" หรือ "down" เท่านั้น แต่มี วิธีการทั่วไปหลายที่จะเข้าใกล้ความสัมพันธ์ภายในคู่เช่นลูกค้า 9 goodVS good)

    วิธีการหนึ่งที่พบบ่อยคือการแยกการจัดอันดับที่ถูกผูกไว้เช่นเดียวกับลูกค้าของ 9 (เพื่อให้ข้อสรุปเกี่ยวกับสัดส่วนสัมพัทธ์ของความแตกต่างแบบ up-vs-down ในประชากรโดยสุ่มตัวอย่างลูกค้า)

    ในกรณีนี้คุณมีลูกค้า 4 รายที่ให้คะแนนสูงกว่าสำหรับผลิตภัณฑ์ที่สอง 8 ผู้ให้คะแนนต่ำกว่าและอีกสามรายที่ให้เหมือนกัน

    ในกรณีดังกล่าวด้วยข้อมูลของคุณเครื่องหมาย 4 อันและอีก 8 ข้อการทดสอบเครื่องหมายสองด้านจะไม่เข้าใกล้การปฏิเสธในระดับนัยสำคัญใด ๆ นี่คือการวิเคราะห์ใน 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 
    

    ค่า p ค่อนข้างสูง

  2. ตอนนี้ถ้าคุณพร้อมที่จะกำหนดคะแนน (หรือเพียงแค่จัดอันดับ) ให้กับขนาดสัมพัทธ์ของการเปลี่ยนแปลงในการจัดอันดับภายในแต่ละคู่กล่าวคือการเปลี่ยนแปลงที่ "ดี" กับ "ไม่ดี" ของลูกค้า 2 นั้นใหญ่กว่าหรือเล็กกว่า หรือเช่นเดียวกับลูกค้าของ 4 "ดีมาก" ถึง "โอเค" และจากนั้นคุณสามารถใช้การจัดอันดับการทดสอบที่ได้รับการรับรองบนอันดับเหล่านั้นหรือโดยทำการทดสอบการเปลี่ยนรูปแบบจับคู่กับคะแนนที่กำหนด (แม้ว่าคุณจะต้องจัดการกับ สิ่งนี้สามารถทำได้โดยอนุญาตให้มีการจัดอันดับหรือคะแนนที่คุณมีจริง)

มีตัวเลือกอื่น ๆ ที่คุณอาจพิจารณา - แต่ฉันไม่คิดว่าตัวเลือกการวิเคราะห์จะเปลี่ยนผลลัพธ์ ฉันคิดว่าพวกเขาทุกคนจะไม่ปฏิเสธในระดับความสำคัญปกติของข้อมูลนี้


1
@alesc "ด้อยกว่า" ภายใต้เงื่อนไขบางอย่างเท่านั้น คุณรู้หรือไม่ว่าเงื่อนไขเหล่านั้นคืออะไร? ที่สั่งซื้อคุณพูดถึงคือการสั่งซื้อของเดิมประเภท แต่สิ่งที่สำคัญสำหรับการทดสอบยศลงนามสั่งซื้อของความแตกต่าง ด้วยการกำหนดหมายเลข 1 ถึง 5 ให้กับหมวดหมู่ดั้งเดิมเหล่านั้นคุณจะถือว่าสเกลช่วงเวลาเป็นที่ไม่มีอยู่จริง การยกเว้นอันดับที่ผูกไว้จะไม่เป็นการแทรกแซงข้อมูล แต่จริงๆแล้วเป็นการ จำกัด ข้อมูลที่เกี่ยวข้องกับคำถามว่ามีแนวโน้มที่จะเพิ่มหรือลดอันดับเครดิตหรือไม่
Glen_b -Reinstate Monica

4
เรากำลังติดต่อกับ 5 จุด Likert ขนาดรายการ ( สเกล Likert จริงคือผลรวมของรายการดังกล่าว) รายการสเกลนี้เป็นลำดับคุณพูดด้วยตัวคุณเอง แต่ด้วยการใช้คะแนนที่การเว้นระยะระหว่างหมวดหมู่เท่ากันคุณกำลังกำหนดขอบเขตช่วงเวลา - ช่องว่างที่เท่ากันที่คุณกำหนดนั้นค่อนข้างแท้จริงว่าสเกลช่วงเวลาคืออะไร คุณบอกว่ามันเป็นอันดับแล้วก็ถือว่าเป็นช่วงเวลาทันที ความจริงที่ว่าคุณไม่ได้พูดถึงสิ่งที่คุณทำคือเหตุผลที่ต้องแก้ไขคำตอบของคุณ ทันทีที่คุณใช้การทดสอบการจัดอันดับที่มีลายเซ็นกับคู่ลำดับของข้อมูลคุณถือว่าเป็นต้นฉบับเป็นช่วงเวลา
Glen_b -Reinstate Monica

1
@rnso โดยทั่วไปแล้วการแปลงหมวดหมู่ที่สั่งให้เป็นตัวเลขที่เท่ากันในตอนแรกคุณจะต้องกำหนดช่วงเวลาที่มีเลขลำดับ ... ในกรณีนี้ - เพราะมันเป็นเพียงการจัดอันดับสัมพัทธ์ภายในแต่ละกลุ่มที่สำคัญและมีเพียงสองกลุ่มเท่านั้นที่ไม่ได้ทำร้ายอะไรเลย ฟรีดแมนในสองกลุ่มนั้นเทียบเท่ากับการทดสอบเครื่องหมาย (แบบสองด้าน) ซึ่งก็คือการพูดคำตอบของคุณเหมือนกับฉัน
Glen_b -Reinstate Monica

1
@rnso ในแง่ของ 'ตั้งค่า' ใน R คุณสามารถทำให้ตัวแปรการจัดหมวดหมู่ลำดับของคุณเป็นปัจจัย (แม้แต่ปัจจัยอันดับ) แม้ว่าสำหรับบางฟังก์ชั่นคุณอาจต้องจัดการกับตัวเลข เมื่อใดก็ตามที่คุณทำเช่นนั้น (ใช้ตัวเลขที่ฉันหมายถึง) คุณต้องจำไว้ว่าตัวเลขเหล่านั้นไม่มีคุณสมบัติช่วงเวลา - คุณไม่สามารถรับความแตกต่าง (หรือจำนวนเงิน) ของตัวเลขที่คุณใช้ ถ้าคุณจะไม่ - เบื้องต้น - อ้างว่าเปลี่ยนจากvery badการgoodเป็นสมบูรณ์เหมือนการเปลี่ยนแปลงจากbadไปvery goodคุณจะไม่สามารถเรียกร้องได้หลังจากที่คุณรหัสพวกเขาเป็นหมายเลข ... (CTD)
Glen_b -Reinstate โมนิกา

1
(ctd) ... (เช่นคุณไม่สามารถจัดการกะ 3 หมวดหมู่ด้วยจุดเริ่มต้นที่แตกต่างกันทั้ง "d = 3" ดังนั้นถ้าคุณทำโค้ด 'แย่มาก' เป็น 1 ถึง 'ดีมาก' เป็น 5 คุณไม่สามารถรับความแตกต่างได้ก่อนอื่นคุณต้องสมมติว่าคุณมีสเกลช่วงเวลาอย่างชัดเจนจากนั้นความแตกต่างก็มีความหมาย
Glen_b

3

คุณมีข้อมูลลำดับขึ้นอยู่กับ คุณควรใช้แบบทดสอบที่มีลายเซ็นของ Wilcoxonเพื่อทดสอบความแตกต่างที่สำคัญระหว่างผลิตภัณฑ์ทั้งสองในลูกค้าทั้งหมด

แต่จากข้อมูลข้างต้นการทดสอบ Wilcoxon ที่ได้รับการจัดอันดับไม่ได้ให้ผลที่สำคัญ


3
ฉันไม่คิดว่าคุณสามารถใช้การจัดอันดับแบบทดสอบที่มีลายเซ็นได้โดยไม่ต้องตั้งสมมติฐานเพิ่มเติม ตัวอย่างเช่นการทดสอบอันดับที่เซ็นชื่อนั้นขึ้นอยู่กับการจัดอันดับความแตกต่างของคู่ที่แน่นอนซึ่งหมายความว่าคุณจะต้องตัดสินใจว่าการเปลี่ยนแปลง "ดี" เป็น "ไม่ดี" ของลูกค้า 2 นั้นใหญ่กว่าเล็กลงหรือเหมือนกับลูกค้า 4 คน "ดีมาก "ถึง" โอเค " ซึ่งแสดงให้เห็นว่าคุณมีแนวโน้มที่จะกำหนดช่วงเวลาในบางจุด (เป็นการยากที่จะบอกอย่างชัดเจนว่าคุณทำอะไร แต่เพราะคุณไม่ได้อธิบายจริงๆ) เป็นทางเลือกที่ OP เห็นด้วย แต่คุณต้องถามก่อน
Glen_b -Reinstate Monica

4
เพื่อชี้แจง: ฉันคิดว่านี่อาจเป็นคำตอบที่สมเหตุสมผล แต่สมมติฐานเฉพาะควรชัดเจนมากขึ้น ฉันคิดว่าคำตอบนี้อาจจะดีขึ้นถ้าคุณอธิบายว่าคุณดำเนินการอย่างไรจากคู่อย่าง ( good, bad) หรือ ( very good, okay) ไปยังกลุ่มของลายเซ็นต์เนื่องจากสิ่งนี้จะทำให้สมมติฐานมีความชัดเจนมากขึ้น
Glen_b -Reinstate Monica

ลำดับของคำตอบจะได้รับดังนั้นการกำหนดอันดับตัวเลขจาก 1 ถึง 5ไม่สำคัญ ดูความคิดเห็นอื่นของฉันที่คำตอบของคุณสำหรับรายละเอียดเพิ่มเติม
alesc

4
Alesc, @Glen_b เป็นสิทธิ (และคุณไม่ได้): ในการทดสอบลงนามยศคุณทำไม่ได้จัดอันดับให้เป็นค่าที่กำหนดแต่ละท่านกำหนดตำแหน่งเพื่อความแตกต่างระหว่างคู่ของค่า ดังนั้นคุณต้องสามารถคำนวณความแตกต่างก่อนได้ สิ่งนี้เป็นไปไม่ได้กับข้อมูลลำดับ
อะมีบา

1

ใช้แบบทดสอบt - paired

ตราบใดที่คุณมีอันดับที่เพียงพอ (15 ก็เพียงพอแล้วและผมก็จะยิ่งมีความสุขที่มีน้อย) และการเปลี่ยนแปลงบางอย่างในความแตกต่างของคะแนนที่มีปัญหาที่ทุกคนใช้คู่T -test จากนั้นคุณจะได้รับการประมาณการที่ง่ายต่อการตีความ - การจัดอันดับเฉลี่ยในระดับตัวเลข 1-5 + ความแตกต่าง (ระหว่างผลิตภัณฑ์)

รหัส R

มันง่ายมากที่จะทำใน 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

อันดับแรกให้ตรวจสอบคะแนนเฉลี่ย:

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

และT -test จะช่วยให้เรา:

> 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- ค่าเท่ากับ 0.13 ซึ่งไม่แนะนำอย่างยิ่งว่าผลิตภัณฑ์จะได้รับการจัดอันดับแตกต่างกันแม้ว่าจะมีความแตกต่างที่ชัดเจนที่ 0.8 (แต่โปรดสังเกตช่วงความมั่นใจค่อนข้างมาก - เราต้องการข้อมูลเพิ่มเติม)

ข้อมูลปลอม?

อยากรู้อยากเห็นและt-ทดสอบunpaired โดยไม่คาดคิดให้ค่าp-value ที่ต่ำกว่า

> 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
[…]

สิ่งนี้แนะนำว่าข้อมูลตัวอย่างเป็นของปลอม สำหรับข้อมูลจริงเราคาดว่าจะมีความสัมพันธ์เชิงบวก (ค่อนข้างสูง) ระหว่างการให้คะแนนจากลูกค้ารายเดียวกัน นี่คือความสัมพันธ์เชิงลบ (แม้ว่าจะไม่มีนัยสำคัญทางสถิติดังนั้น):

> 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

ไม่มีข้อมูล

เมื่อลูกค้าไม่ได้ให้คะแนนทั้งสองผลิตภัณฑ์ (เช่นข้อมูลที่ไม่สมดุล) วิธีที่ดีกว่าคือการใช้โมเดลเอฟเฟกต์ผสม:

ก่อนอื่นให้แปลงข้อมูลเป็นรูปแบบตัวเลข:

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

และแปลงเป็นรูปแบบ 'ยาว':

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

และในที่สุดก็พอดีกับโมเดลเอฟเฟ็กต์ผสมกับลูกค้าเป็นเอฟเฟกต์แบบสุ่ม:

> 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- ค่าคือ 0.0834 มักจะเป็นข้อมูลที่มีความสมดุลก็จะเป็นเกือบจะเหมือนกันกับพี -value จากคู่T -test ที่นี่อยู่ใกล้กับp-valueของการทดสอบt - unpaired เนื่องจากความสัมพันธ์เชิงลบ โปรดทราบว่าความแปรปรวนสำหรับผลกระทบลูกค้า (การสกัดกั้นแบบสุ่ม) เกือบเป็นศูนย์ สิ่งนี้จะไม่ค่อยเกิดขึ้นกับข้อมูลจริง

สรุป

โดยสรุปใช้t -test ที่จับคู่ จากนั้นคุณจะได้รับการประมาณที่ง่ายต่อการตีความ (ค่าเฉลี่ยเชิงตัวเลขอย่างง่าย)

หากไม่ใช่ลูกค้าทุกคนที่ให้คะแนนผลิตภัณฑ์ทั้งสองให้ใช้โมเดลเอฟเฟกต์ผสมแทน (นี้จะให้ประมาณผลเช่นเดียวกับคู่T -test เมื่อพวกเขาได้ทั้งหมดจัดอันดับผลิตภัณฑ์ทั้งสองเพื่อให้คุณได้เป็นอย่างดีเสมออาจใช้มัน.)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.