Use o emparelhado t -teste
Contanto que você tenha classificações suficientes (15 é suficiente e eu ficaria feliz mesmo com menos) e alguma variação nas diferenças de classificação, não há nenhum problema ao usar o teste t emparelhado . Em seguida, você obtém estimativas muito fáceis de interpretar - as classificações médias em uma escala numérica de 1 a 5 + sua diferença (entre produtos).
Código R
É muito fácil fazer no 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
Primeiro vamos verificar as classificações médias:
> mean(as.numeric(d$product1))
[1] 3.9333
> mean(as.numeric(d$product2))
[1] 3.1333
E o teste t nos dá:
> 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
O valor é 0,13, o que não sugere fortemente que os produtos sejam classificados de forma diferente, apesar da aparente diferença de 0,8 (mas observe o intervalo de confiança bastante - precisamos realmente de mais dados).p
Dados falsos?
Curiosa e inesperadamente, um teste t não pareado fornece um valor p mais baixo .
> 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
[…]
Isso sugere que os dados de exemplo são falsos. Para dados reais, seria de esperar uma correlação positiva (bastante alta) entre as classificações do mesmo cliente. Aqui a correlação é negativa (embora não seja estatisticamente 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
Dados ausentes
Quando nem todos os clientes classificaram os dois produtos (ou seja, dados desequilibrados), uma abordagem melhor é usar um modelo de efeitos mistos:
Vamos primeiro converter os dados para o formato numérico:
> d2 = d
> d2[,-1] = lapply(d2[,-1], as.numeric)
E converta-o para o formato 'longo':
> library(tidyr)
> d3 = gather(d2, product, value, -customer)
E, finalmente, ajuste um modelo de efeitos mistos com o cliente como um efeito aleatório:
> 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
[…]
O valor é 0,0834. Normalmente, para dados balanceados, será quase idêntico ao valor p de um teste t emparelhado . Aqui está mais próximo do valor- p de um teste t não pareado , devido à correlação negativa. Observe que a variação para o efeito do cliente (interceptação aleatória) é quase zero. Isso raramente aconteceria com dados reais.p
Sumário
Em resumo, use o teste t emparelhado . Em seguida, você obtém estimativas fáceis de interpretar (médias numéricas simples).
Se nem todos os clientes classificaram os dois produtos, use um modelo de efeitos mistos. (Isso fornecerá aproximadamente os mesmos resultados que o teste t emparelhado quando todos tiverem classificado os dois produtos, para que você sempre o use.)