Desarrollar una prueba estadística para distinguir dos productos.

9

Tengo un conjunto de datos de una encuesta de clientes, quiero implementar una prueba estadística para ver si hay una diferencia significativa entre el producto 1 y el producto 2.

Aquí hay un conjunto de datos de las reseñas de los clientes.

La tasa es de muy mala, mala, buena, buena, muy buena.

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

¿Qué métodos debo usar para ver si hay alguna diferencia entre estos dos productos?

qifengwu
fuente
Tenga en cuenta que la respuesta de @ Glen_b ofrece consejos superiores, en comparación con la respuesta que aceptó. Quizás debería decir que puede cambiar una respuesta aceptada en cualquier momento (no todos lo saben).
ameba

Respuestas:

3

Para clasificar por diferentes jueces, uno puede usar la prueba de Friedman. http://en.wikipedia.org/wiki/Friedman_test

Puede convertir las calificaciones de muy malas a muy buenas a números de -2, -1, 0, 1 y 2. Luego, coloque los datos en forma larga y aplique friedman.test con el cliente como factor de bloqueo:

> 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

La clasificación de la diferencia entre 2 productos no es significativa.

Editar:

A continuación se muestra el resultado de la regresión:

> 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

ingrese la descripción de la imagen aquí

rnso
fuente
1
Usar la prueba de Friedman es una exageración. Es como recomendar el uso de ANOVA cuando solo hay dos grupos; entonces simplemente se reduce a una prueba t.
ameba
Este análisis de regresión es incorrecto. Ha tratado al cliente como una variable continua en lugar de un factor. Si arregla esto, al cambiarlo a un factor, obtendrá un valor p de 0.1316, es decir, el mismo que el de una prueba t emparejada .
Karl Ove Hufthammer
Me di cuenta de que debería ser un factor, pero no lo cambié ya que mi énfasis estaba en la prueba de Friedman. Pero como el tamaño de la muestra es pequeño, creo que una prueba no paramétrica (en lugar de una prueba t) sería más apropiada aquí. He corregido la parte de regresión en mi respuesta.
rnso
9
  1. Una posibilidad es que pueda usar la prueba de signos.

    Esto se basa en las comparaciones dentro de los clientes para ver si su calificación del producto1 al producto2 subió, bajó o permaneció igual (bajo la prueba del signo binomial, se supone que solo se obtienen resultados de "arriba" o "abajo", pero hay varias formas comunes de acercarse a los lazos dentro del par, como el cliente 9 goodvs good).

    Un enfoque común es excluir las clasificaciones vinculadas, como las del cliente 9 (de modo que la conclusión sea sobre la proporción relativa de las diferencias de arriba a abajo en la población, suponiendo un muestreo aleatorio de los clientes).

    En este caso, tuvo 4 clientes que dieron calificaciones más altas al segundo producto, 8 que dieron calificaciones más bajas y tres que dieron lo mismo.

    En ese caso, con sus datos, 4 de un signo y 8 del otro, una prueba de signo de dos colas no se acercaría al rechazo en ningún nivel de significancia típico. Aquí está el análisis en 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 
    

    El valor p es bastante alto.

  2. Ahora, si está preparado para asignar puntajes (o incluso solo para clasificar) a los tamaños relativos de los cambios en las calificaciones dentro de cada par, es decir, si el cambio "bueno" a "malo" del cliente 2 es mayor, menor o lo mismo que el cliente 4 es "muy bueno" para "estar bien", y así sucesivamente, entonces puedes aplicar una prueba de rango firmada en esos rangos o haciendo una prueba de permutación por pares en los puntajes asignados (aunque también debes lidiar con fuertes lazos, esto se puede hacer fácilmente al permutar los conjuntos de rangos o puntajes que realmente tiene).

Hay algunas otras opciones que podría considerar, pero no creo que la elección del análisis cambie el resultado; Creo que todos fracasarán en rechazar los niveles de significancia típicos en estos datos.

Glen_b -Reinstate a Monica
fuente
1
@alesc "inferior" solo bajo ciertas condiciones, superior bajo otras. ¿Eres consciente de cuáles son esas condiciones? Ese orden que mencionas es el orden de las categorías originales , pero lo que importa para la prueba de rango con signo es el orden de las diferencias . Al asignar los números del 1 al 5 a esas categorías originales, en realidad asumió una escala de intervalo donde no existía ninguna. Excluir los rangos vinculados no es alterar los datos, en realidad está condicionando la información relevante a la pregunta de si existe una tendencia de las calificaciones a aumentar o disminuir.
Glen_b -Reinstate Monica
44
Estamos tratando con un elemento de escala Likert de 5 puntos . (Una escala Likert real es una suma sobre dichos elementos). Este elemento de escala es ordinal, usted mismo lo dijo. Sin embargo, mediante el uso de las puntuaciones en las separaciones entre las categorías son iguales que está imponiendo una escala de intervalos iguales - las separaciones que se impone es literalmente lo que una escala de intervalo es . Entonces dijiste que era ordinal, e inmediatamente lo trataste como un intervalo. El hecho de que no hayas mencionado lo que hiciste es por qué tu respuesta debe ser modificada. Tan pronto como aplique una prueba de rango con signo a pares de datos ordinales, trata el original como intervalo.
Glen_b -Reinstalar Monica
1
@rnso En general, al convertir inicialmente las categorías ordenadas a números equiespaciados, habría impuesto una escala de intervalo donde había habido una ordinal ... (así que de nuevo, en general, tendría que hacer explícita esa elección) pero en este caso, porque lo único que importa son las clasificaciones relativas dentro de cada grupo y solo hay dos grupos, eso no hace daño a nada. El Friedman en dos grupos es equivalente a una prueba de signos (de dos colas). Es decir, su respuesta es la misma que la mía.
Glen_b -Reinstalar Monica
1
@rnso En términos de 'configuración', en R puede hacer que su variable categórica ordinal sea un factor (incluso un factor ordinal), aunque para algunas funciones puede que necesite tratar con números. Siempre que haga eso (use números, quiero decir), debe tener en cuenta que esos números no tienen la propiedad de intervalo: no puede simplemente tomar diferencias (o sumas) de los números que usó. Si no, a priori , afirma que un cambio de very bada goodes completamente idéntico a un cambio de bada very good, no puede reclamarlo después de codificarlos como números ... (ctd)
Glen_b -Reinstalar Monica
1
(CTD) ... (es decir, que no sólo puede tratar el turno de las 3 categorías con diferentes puntos de inicio tanto como "d = 3". Así que si haces código 'muy malo' como 1 hasta 'muy buena' como 5 , no puedes simplemente tomar las diferencias. Primero debes asumir explícitamente que tienes una escala de intervalos, y luego las diferencias son significativas.
Glen_b -Reinstala a Monica el
3

Tienes datos ordinales dependientes. Debe usar la prueba de rango con signo de Wilcoxon para comprobar la diferencia significativa entre ambos productos en todos los clientes.

Pero dados los datos anteriores, la prueba de rango con signo de Wilcoxon no arroja resultados significativos.

alesc
fuente
3
No creo que pueda usar la prueba de rango firmada sin hacer suposiciones adicionales. Por ejemplo, la prueba de rango firmada se basa en la clasificación de las diferencias absolutas de pares, lo que significa que tendrá que decidir si el cambio "bueno" a "malo" del cliente 2 es mayor, menor o igual que el muy bueno del cliente 4 "a" está bien ". Lo que sugiere que es probable que haya impuesto una escala de intervalo en algún momento (sin embargo, es difícil decir exactamente lo que hizo, porque realmente no lo explicó). Esa es una opción con la que el OP podría estar de acuerdo, pero primero deberá preguntar.
Glen_b -Reinstalar Monica
44
Para aclarar: creo que esta es una respuesta potencialmente razonable, pero sus supuestos particulares deberían ser más explícitos. Creo que esta respuesta podría mejorarse si explicara cómo procedió de pares como ( good, bad) o ( very good, okay) a un conjunto de rangos firmados, ya que esto haría que las suposiciones hechas en el camino sean más obvias.
Glen_b -Reinstate Monica
Se da el orden de las respuestas, por lo que asignar rangos numéricos del al es trivial. Mira mi otro comentario en tu respuesta para más detalles. 515
alesc
44
Alesc, @Glen_b tiene razón (y usted no): en la prueba de rango con signo no asigna rangos a valores individuales, asigna rangos a diferencias entre pares de valores . Por lo tanto, primero debe poder calcular las diferencias. Esto es imposible con datos ordinales.
ameba
1

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

Karl Ove Hufthammer
fuente