Розробіть статистичний тест, щоб виділити два продукти


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

Рейтинг різниці між двома продуктами не суттєвий.

Редагувати:

Далі йде результат регресії:

> 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, коли є лише дві групи; то вона просто зводиться до t-тесту.
амеба

Цей регресійний аналіз є неправильним. Ви ставилися до клієнта як до суцільної змінної замість фактора. Якщо ви виправите це, змінивши його на коефіцієнт, ви отримаєте p -значення 0,1316, тобто таке ж, як у парного t -test.
Karl Ove Hufthammer

Я зрозумів, що це повинен бути фактором, але не змінив цього, оскільки акцент робився на тесті Фрідмана. Але оскільки розмір вибірки невеликий, я думаю, що непараметричний тест (а не t-тест) був би доречнішим тут. Я виправив регресійну частину у своїй відповіді.
rnso

9
  1. Однією з можливостей є те, що ви можете використовувати тест на ознаки.

    Це спирається на порівняння в межах клієнтів, щоб дізнатися, чи рейтинг їх від товару1 до продукту2 збільшився, зменшився чи залишився однаковим (під тестом біноміального знаку припущення полягає в тому, що ви отримуєте лише результати "вгору" або "вниз", але є кілька загальних способів наблизитись до внутрішніх парних зв'язків, наприклад клієнт 9 goodпроти good).

    Один загальний підхід полягає в тому, щоб виключити прив’язані рейтинги, такі як клієнт 9 (так що висновок стосується відносної частки різниць різниць у сукупності, припускаючи випадкову вибірку клієнтів).

    У цьому випадку у вас було 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 
    

    Значення р досить високе.

  2. Тепер, якщо ви готові присвоїти бали (або навіть просто оцінити) відносним розмірам змін у рейтингах кожної пари - тобто, чи змінюється "хороший" на "поганий" клієнт 2 більший, менший або те саме, що "дуже добре" клієнта 4 "добре" і так далі, ви можете застосувати підписаний тест на ранг у цих званнях або виконавши парний тест на перестановку на призначених балах (хоча ви також маєте справу з важкими зв'язками, це можна легко зробити, перебравши набори рейтингів чи балів, які ви насправді маєте).

Ви можете розглянути й інші варіанти, але я не думаю, що вибір аналізу змінить результат; Я думаю, що всі вони не зможуть відкинути на типових рівнях значущості цих даних.


1
@alesc "поступається" лише за певних умов, вищий за інших. Чи знаєте ви, що це за умови? Це замовлення, про яке ви згадуєте, - це впорядкування оригінальних категорій, але те, що має значення для тестування підписаного рангу, - це упорядкування відмінностей . Призначаючи числа від 1 до 5 тим оригінальним категоріям, ви фактично припустили інтервальну шкалу, де жодної не існувало. Виключення зв'язаних рангів не є підробкою даних, це фактично обумовлює інформацію, що стосується питання про те, чи є тенденція до підвищення чи зменшення рейтингів.
Glen_b -Встановіть Моніку

4
Ми маємо справу з 5-бальною шкалою Лайкерта з пунктом . (Фактична Лайкерта масштаб є сумою за такими статтями.) Ця шкала деталь порядкове, ви самі так сказали. Але за допомогою оцінки , де відстань між категоріями рівні вам будуть нав'язуванням інтервального шкали - ті рівні інтервали , ви накладеними цілком буквально , що інтервал шкала є . Тож ви сказали, що це порядковий характер, а потім негайно трактували це як інтервал. Той факт, що ви не змогли згадати, що ви зробили, - це те, чому ваша відповідь потребує змін. Як тільки ви застосуєте підписаний ранг-тест до порядкових пар даних, ви розглядаєте оригінал як інтервал.
Glen_b -Встановіть Моніку

1
@rnso Загалом, перетворивши впорядковані категорії на зрівняльні числа, ви наклали б інтервальну шкалу, де була порядкова… (так, знову ж таки, взагалі вам потрібно було б зробити такий вибір явним), але в цьому випадку - адже значення мають лише відносні рейтинги в межах кожної групи, і це лише дві групи, що нічого не шкодить. Фрідман у двох групах еквівалентний тесту на знаки на два хвости. Що сказати, ваша відповідь така ж, як і моя.
Glen_b -Встановіть Моніку

1
@rnso З точки зору "налаштування", в R ви можете зробити свою порядкову категоричну змінну фактором (навіть порядковим фактором), хоча для деяких функцій вам знадобиться мати справу з числами. Щоразу, коли ви робите це (я маю на увазі цифри), ви повинні мати на увазі, що ці числа не мають властивості інтервалу - ви не можете просто приймати різниці (або суми) чисел, які ви використовували. Якщо ви не будете - апріорі - стверджувати, що перехід від very badдо goodповністю ідентичний переміщенню з badна very good, ви не можете стверджувати це, коли ви
кодуєте

1
(ctd) ... (тобто ви не можете просто трактувати зміну трьох категорій з різними початковими точками як "d = 3". Так що, якщо ви зробите код "дуже погано" як 1 до "дуже добре", як 5 ви не можете просто приймати відмінності. Спочатку ви повинні прямо припустити, що у вас є інтервальна шкала, а потім відмінності мають значення.
Glen_b -Встановіть Моніку

3

У вас залежні порядкові дані. Вам слід скористатися тестом підписаного Wilcoxon, щоб перевірити наявність значної різниці між обома продуктами у всіх клієнтів.

Але з огляду на наведені вище дані, тест з підписанням Вілкоксона не дає значних результатів.


3
Я не думаю, що ви можете використовувати підписаний тест на ранг без додаткових припущень. Наприклад, підписаний тест на рангову оцінку покладається на ранжирування абсолютних парних відмінностей, а значить, вам доведеться вирішити, чи буде "хороший" на "поганий" клієнт 2 більшим, меншим або таким же, як клієнт 4 "дуже хорошим "до" гаразд ". Це говорить про те, що ви, швидше за все, наклали інтервал шкали в якийсь момент (важко точно сказати, що ви зробили, хоча ви не дуже пояснили це). Це вибір, з яким може погодитися ОП, але спершу вам потрібно буде запитати.
Glen_b -Встановіть Моніку

4
Для уточнення: я думаю, що це потенційно розумна відповідь, але конкретні її припущення повинні бути більш чіткими. Я думаю, що цю відповідь можна покращити, якби ви пояснили, як ви переходили від пар типу ( good, bad) або ( very good, okay) до набору підписаних рангів, оскільки це зробить припущення, зроблені на цьому шляху, більш очевидними.
Glen_b -Встановіть Моніку

Наведено порядок відповідей, тому присвоєння числових рангів від 1 до 5тривіально. Подивіться на мій інший коментар до вашої відповіді для отримання більш детальної інформації.
алеск

4
Алеск, @Glen_b має рацію (а ви цього не робите): у тесті підписаного ранжу ви не присвоюєте ранги окремим значенням, ви присвоюєте ранги різниці між парами значень . Тож вам потрібно спочатку обчислити різниці. Це неможливо за порядковими даними.
амеба

1

Використовуйте парний t -test

Поки у вас достатньо рейтингів (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 

The p-значення - 0,13, що не настійно говорить про те, що продукти оцінюються по-різному, незважаючи на очевидну різницю в 0,8 (але зауважте, досить інтервал довіри - нам дійсно потрібно більше даних).

Підроблені дані?

Цікаво і несподівано, що непарний t -test дає нижчу р -значення.

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

The p-цінність 0,0834. Зазвичай для збалансованих даних буде майже ідентичний до р -значення від сполученого т -test. Тут вона ближче до p -значення непарного t -test через негативну кореляцію. Зауважте, що дисперсія для ефекту від споживача (випадковий перехоплення) майже дорівнює нулю. Це рідко трапляється з реальними даними.

Підсумок

Підводячи підсумок, використовуйте парний t -test. Потім ви отримуєте оцінки, які легко інтерпретувати (прості числові середні значення).

Якщо не всі клієнти оцінили обидва продукти, замість цього використовуйте модель зі змішаними ефектами. (Це дасть приблизно ті ж результати , як і парні т -test , коли вони мають всі оцінили як продукти, так що ви можете також використовувати його завжди.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.