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