Use la prueba t emparejada
Mientras tenga suficientes calificaciones (15 es suficiente, y estaría contento incluso con menos) y alguna variación en las diferencias de calificación, no hay ningún problema en absoluto usando la prueba t emparejada . Luego obtienes estimaciones que son muy fáciles de interpretar: las calificaciones medias en una escala numérica de 1 a 5 + su diferencia (entre productos).
Código R
Es muy fácil de hacer en 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
Primero revisemos las calificaciones promedio:
> mean(as.numeric(d$product1))
[1] 3.9333
> mean(as.numeric(d$product2))
[1] 3.1333
Y la prueba t nos da:
> 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
El valor es 0.13, lo que no sugiere que los productos tengan una calificación diferente, a pesar de la aparente diferencia de 0.8 (pero tenga en cuenta el intervalo de confianza, realmente necesitamos más datos).p
Datos falsos?
Curiosamente e inesperadamente, una prueba t no emparejada da un valor p más bajo .
> 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
[…]
Esto sugiere que los datos de ejemplo son falsos. Para datos reales, uno esperaría una correlación positiva (bastante alta) entre las calificaciones del mismo cliente. Aquí la correlación es negativa (aunque no estadísticamente significativa):
> 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
Datos perdidos
Cuando no todos los clientes han calificado ambos productos (es decir, datos no balanceados), un mejor enfoque es usar un modelo de efectos mixtos:
Primero vamos a convertir los datos a forma numérica:
> d2 = d
> d2[,-1] = lapply(d2[,-1], as.numeric)
Y conviértalo a forma 'larga':
> library(tidyr)
> d3 = gather(d2, product, value, -customer)
Y finalmente ajuste un modelo de efectos mixtos con el cliente como efecto aleatorio:
> 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
[…]
El valor es 0.0834. Por lo general, para datos balanceados será casi idéntico al valor p de una prueba t emparejada . Aquí está más cerca del valor p de una prueba t no emparejada , debido a la correlación negativa. Tenga en cuenta que la varianza para el efecto del cliente (intercepción aleatoria) es casi cero. Esto rara vez sucedería con datos reales.p
Resumen
En resumen, use la prueba t emparejada . Luego obtienes estimaciones que son fáciles de interpretar (promedios numéricos simples).
Si no todos los clientes han calificado ambos productos, utilice un modelo de efectos mixtos. (Esto dará aproximadamente los mismos resultados que la prueba t emparejada cuando todos hayan calificado ambos productos, por lo que es mejor que siempre la use).