Entwickeln Sie einen statistischen Test, um zwei Produkte zu unterscheiden

9

Ich habe einen Datensatz aus einer Kundenumfrage und möchte einen statistischen Test durchführen, um festzustellen, ob zwischen Produkt 1 und Produkt 2 ein Signifikanzunterschied besteht.

Hier ist ein Datensatz mit Kundenbewertungen.

Die Rate ist von sehr schlecht, schlecht, okay, gut bis sehr gut.

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

Welche Methoden sollte ich verwenden, um festzustellen, ob zwischen diesen beiden Produkten ein Unterschied besteht?

Qifengwu
quelle
Bitte beachten Sie, dass die Antwort von @ Glen_b im Vergleich zu der von Ihnen akzeptierten Antwort einen überlegenen Rat gibt. Vielleicht sollte ich sagen, dass Sie eine akzeptierte Antwort jederzeit ändern können (das ist nicht jedem bewusst).
Amöbe

Antworten:

3

Für die Rangfolge verschiedener Richter kann der Friedman-Test verwendet werden. http://en.wikipedia.org/wiki/Friedman_test

Sie können Bewertungen von sehr schlecht zu sehr gut in Zahlen von -2, -1, 0, 1 und 2 konvertieren. Geben Sie dann die Daten in Langform ein und wenden Sie friedman.test mit dem Kunden als Blockierungsfaktor an:

> 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

Die Rangfolge des Unterschieds zwischen 2 Produkten ist nicht signifikant.

Bearbeiten:

Das Folgende ist die Ausgabe der Regression:

> 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

Geben Sie hier die Bildbeschreibung ein

rnso
quelle
1
Die Verwendung von Friedmans Test ist ein Overkill. Es ist so, als würde empfohlen, ANOVA zu verwenden, wenn nur zwei Gruppen vorhanden sind. dann reduziert es sich einfach auf einen t-Test.
Amöbe
Diese Regressionsanalyse ist falsch. Sie haben den Kunden als kontinuierliche Variable anstelle eines Faktors behandelt. Wenn Sie dies beheben, indem Sie es in einen Faktor ändern, erhalten Sie einen p- Wert von 0,1316, dh den gleichen wie bei einem gepaarten t- Test.
Karl Ove Hufthammer
Ich hatte erkannt, dass es ein Faktor sein sollte, aber ich habe es nicht geändert, da mein Schwerpunkt auf dem Friedman-Test lag. Da die Stichprobengröße jedoch klein ist, halte ich hier einen nichtparametrischen Test (anstelle eines t-Tests) für angemessener. Ich habe den Regressionsteil in meiner Antwort korrigiert.
rnso
9
  1. Eine Möglichkeit ist, dass Sie den Vorzeichentest verwenden können.

    Dies hängt von den Vergleichen innerhalb der Kunden ab, um festzustellen, ob ihre Bewertung von Produkt1 zu Produkt2 gestiegen, gefallen oder gleich geblieben ist (beim Binomialzeichen-Test wird davon ausgegangen, dass Sie nur "hoch" oder "runter" Ergebnisse erhalten, aber es gibt Verschiedene gängige Methoden, um sich den Bindungen innerhalb eines Paares zu nähern, z. B. Kunden 9 goodvs good).

    Ein gängiger Ansatz besteht darin, die gebundenen Bewertungen wie die von Kunden 9 auszuschließen (so dass die Schlussfolgerung über den relativen Anteil der Unterschiede zwischen Auf und Ab in der Bevölkerung unter der Annahme einer zufälligen Stichprobe von Kunden besteht).

    In diesem Fall hatten Sie 4 Kunden, die dem zweiten Produkt höhere Bewertungen gaben, 8, die niedrigere und drei, die das gleiche gaben.

    In diesem Fall würde mit Ihren Daten, 4 von einem Vorzeichen und 8 von dem anderen, ein zweiseitiger Vorzeichentest bei keinem typischen Signifikanzniveau der Ablehnung nahe kommen. Hier ist die Analyse in 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 
    

    Der p-Wert ist ziemlich hoch.

  2. Nun , wenn Sie zu assign Noten vorbereitet (oder auch nur zu Rang) auf die relativen Größen der Änderungen in Bewertungen innerhalb jeden Paares - das heißt, ob Kunde 2 der „gut“ bis „schlecht“ Änderung ist größer, kleine oder dasselbe wie "sehr gut" von Kunde 4 bis "okay" usw., dann können Sie einen signierten Rangtest auf diese Ränge anwenden oder einen gepaarten Permutationstest für zugewiesene Punktzahlen durchführen (obwohl Sie sich auch mit schweren Bindungen befassen müssen). Dies kann leicht durch Permutieren der Sätze von Rängen oder Punktzahlen erfolgen, die Sie tatsächlich haben.

Es gibt einige andere Möglichkeiten, die Sie in Betracht ziehen könnten - aber ich glaube nicht, dass die Wahl der Analyse das Ergebnis verändern wird. Ich denke, sie werden alle diese typischen Signifikanzniveaus für diese Daten nicht ablehnen.

Glen_b - Monica neu starten
quelle
1
@alesc "minderwertig" nur unter bestimmten Bedingungen, überlegen unter anderen. Kennen Sie diese Bedingungen? Die Reihenfolge, die Sie erwähnen, ist die Reihenfolge der ursprünglichen Kategorien, aber was für den signierten Rangtest wichtig ist, ist die Reihenfolge der Unterschiede . Durch Zuweisen der Nummern 1 bis 5 zu diesen ursprünglichen Kategorien haben Sie tatsächlich eine Intervallskala angenommen, in der keine vorhanden war. Das Ausschließen der gebundenen Ränge manipuliert die Daten nicht, sondern hängt tatsächlich von den Informationen ab, die für die Frage relevant sind, ob die Bewertungen tendenziell steigen oder fallen.
Glen_b -State Monica
4
Wir haben es mit einer 5-Punkte - Likert - Skala Punkt . (Eine tatsächliche Likert- Skala ist eine Summe über solchen Elementen.) Dieses Skalenelement ist ordinal, das haben Sie selbst gesagt. Aber durch Noten mit denen Abstände zwischen den einzelnen Kategorien sind gleich Sie sind eine Intervallskala verhängt werden - jene gleichen Abständen auferlegt ist ganz wörtlich , was ein Intervall Maßstab ist . Sie sagten also, es sei ordinal und behandelten es sofort als Intervall. Die Tatsache, dass Sie nicht erwähnt haben, was Sie getan haben, ist der Grund, warum Ihre Antwort geändert werden muss. Sobald Sie einen signierten Rangtest auf ordinale Datenpaare anwenden, behandeln Sie das Original als Intervall.
Glen_b -State Monica
1
@rnso Im Allgemeinen hätten Sie durch die anfängliche Konvertierung der geordneten Kategorien in Zahlen mit gleichem Abstand eine Intervallskala auferlegt, in der es eine Ordnungszahl gegeben hätte ... (also müssten Sie im Allgemeinen eine solche Auswahl explizit treffen), aber In diesem Fall - weil nur die relativen Ranglisten innerhalb jeder Gruppe von Bedeutung sind und es nur zwei Gruppen gibt, tut das nichts. Der Friedman in zwei Gruppen entspricht einem (zweiseitigen) Vorzeichentest. Das heißt, Ihre Antwort ist dieselbe wie meine.
Glen_b -Rate State Monica
1
@rnso In Bezug auf 'einrichten' können Sie in R Ihre ordinale kategoriale Variable zu einem Faktor (sogar zu einem ordinalen Faktor) machen, obwohl Sie für einige Funktionen möglicherweise mit Zahlen umgehen müssen. Wann immer Sie dies tun (verwenden Sie Zahlen, meine ich), müssen Sie berücksichtigen, dass diese Zahlen nicht die Intervalleigenschaft haben - Sie können nicht einfach Unterschiede (oder Summen) der von Ihnen verwendeten Zahlen berücksichtigen. Wenn Sie nicht - a priori - behaupten würden, dass eine Verschiebung von very badnach goodvollständig mit einer Verschiebung von badnach identisch ist very good, können Sie sie nicht beanspruchen, nachdem Sie sie als Zahlen codiert haben ... (ctd)
Glen_b - Monica am
1
(ctd) ... (dh Sie können die Verschiebung von 3 Kategorien mit unterschiedlichen Startpunkten nicht einfach als "d = 3" behandeln. Wenn Sie also "sehr schlecht" als 1 bis "sehr gut" als 5 codieren Sie können nicht einfach Unterschiede annehmen . Sie müssen zuerst explizit davon ausgehen, dass Sie eine Intervallskala haben, und dann sind Unterschiede von Bedeutung.
Glen_b - Monica am
3

Sie haben abhängige Ordnungsdaten. Sie sollten den Wilcoxon-Signed-Rank-Test verwenden , um den signifikanten Unterschied zwischen beiden Produkten bei allen Kunden festzustellen.

Angesichts der obigen Daten liefert der Wilcoxon-Signed-Rank-Test jedoch keine signifikanten Ergebnisse.

alesc
quelle
3
Ich glaube nicht, dass Sie den signierten Rangtest verwenden können, ohne zusätzliche Annahmen zu treffen. Zum Beispiel basiert der vorzeichenbehaftete Rangtest auf der Einstufung der absoluten Paardifferenzen, was bedeutet, dass Sie entscheiden müssen, ob die Änderung von "gut" zu "schlecht" von Kunde 2 größer, kleiner oder gleich "sehr gut" von Kunde 4 ist "bis" okay ". Was darauf hindeutet, dass Sie wahrscheinlich irgendwann eine Intervallskala eingeführt haben (es ist jedoch schwierig, genau zu sagen, was Sie getan haben, weil Sie es nicht wirklich erklärt haben). Dies ist eine Wahl, mit der das OP einverstanden sein könnte, aber Sie müssten zuerst fragen.
Glen_b -Rate State Monica
4
Zur Verdeutlichung: Ich denke, dies ist möglicherweise eine vernünftige Antwort, aber die besonderen Annahmen sollten expliziter sein. Ich denke, diese Antwort könnte verbessert werden, wenn Sie erklären würden, wie Sie von Paaren wie ( good, bad) oder ( very good, okay) zu einer Reihe von vorzeichenbehafteten Rängen übergegangen sind, da dies die auf diesem Weg getroffenen Annahmen offensichtlicher machen würde.
Glen_b -State Monica
15
4
Alesc, @Glen_b ist richtig (und Sie sind es nicht): Im Test mit vorzeichenbehafteten Rängen weisen Sie einzelnen Werten keine Ränge zu, sondern Differenzen zwischen Wertepaaren Ränge . Sie müssen also zuerst in der Lage sein, die Unterschiede zu berechnen. Dies ist mit Ordnungsdaten nicht möglich.
Amöbe
1

Verwenden Sie den gepaarten t- Test

Solange Sie genügend Bewertungen haben (15 ist ausreichend und ich würde mich auch über weniger freuen) und einige Variationen in den Bewertungsunterschieden, gibt es überhaupt kein Problem mit dem gepaarten t- Test. Dann erhalten Sie Schätzungen, die sehr einfach zu interpretieren sind - die Durchschnittsbewertungen auf einer numerischen Skala von 1 bis 5 + deren Differenz (zwischen Produkten).

R-Code

In R ist das sehr einfach:

> 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

Lassen Sie uns zuerst die durchschnittlichen Bewertungen überprüfen:

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

Und der t- Test gibt uns:

> 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

Gefälschte Daten?

Seltsamerweise und unerwartet ergibt ein ungepaarter t- Test einen niedrigeren p- Wert.

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

Dies deutet darauf hin, dass die Beispieldaten gefälscht sind. Für reale Daten würde man eine (ziemlich hohe) positive Korrelation zwischen Bewertungen desselben Kunden erwarten. Hier ist die Korrelation negativ (wenn auch statistisch nicht signifikant):

> 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

Fehlende Daten

Wenn nicht alle Kunden beide Produkte bewertet haben (dh unausgeglichene Daten), ist ein besserer Ansatz die Verwendung eines Modells mit gemischten Effekten:

Lassen Sie uns zuerst die Daten in eine numerische Form konvertieren:

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

Und konvertieren Sie es in "lange" Form:

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

Und schließlich ein Modell mit gemischten Effekten als zufälligen Effekt an den Kunden anpassen:

> 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

Zusammenfassung

Verwenden Sie zusammenfassend den gepaarten t- Test. Dann erhalten Sie Schätzungen, die leicht zu interpretieren sind (einfache numerische Mittelwerte).

Wenn nicht alle Kunden beide Produkte bewertet haben, verwenden Sie stattdessen ein Modell mit gemischten Effekten. (Dies gibt etwa die gleichen Ergebnisse wie die gepaarten t - Test , wenn sie haben all beiden Produkte bewertet, so könnten Sie auch immer verwenden.)

Karl Ove Hufthammer
quelle