5 votos

¿prueba de rango con signo de wilcoxon para probar datos emparejados?

Quiero comprobar si la diferencia entre las puntuaciones de los pares de estudiantes sigue una distribución simétrica en torno a cero.

Students    Before  After   difference
   1          **     **        10
   2          **     **        -9
   3          **     **        8
   4          **     **        5
   5          **     **       -6
   6          **     **        0
   7          **     **        2

Dado que los datos no se distribuyen normalmente, asumo que puedo utilizar la prueba de rango con signo de Wilcoxon aquí, pero en este caso sólo sabemos la diferencia de los pares, por lo que si realizar la prueba de rango con signo de Wilcoxon en r aquí, normalmente el código debe ser:

wilcox.test(before,after,paired=T, exact=T)

pero el problema es que no tengo los datos de "antes" y "después", sino que sólo conozco la diferencia entre ellos, por lo que parece que la prueba de rango con signo de Wilcoxon no se puede aplicar aquí. ¿Hay algún otro método alternativo para este caso?

3 votos

Esto se explica en la ayuda de esta función, en Details : $\:$ Si sólo se da "x", o si se dan tanto "x" como "y" y "emparejado" es "VERDADERO", se realiza una prueba de rango con signo de Wilcoxon de la nulidad de que la distribución de "x" (en el caso de una muestra) o de "x - y" (en el caso de dos muestras emparejadas) es simétrica respecto a "mu".

0 votos

@Glen_b wilcox.test.default(x, mu = 0, exact = T) : cannot compute exact p-value with ties Dado que mi conjunto de datos tiene empates, ¿significa esto que los empates no serán procesados, entonces el valor P no es exacto? He consultado la página de ayuda de wilcox.test Parece que no puede lidiar con los lazos.

1 votos

Algunas personas condicionan su inferencia a los valores no vinculados. Personalmente, me inclinaría por mantener todos los empates (que siempre contribuirán con 0) y simplemente hacer una prueba de permutación directa.

3voto

AdamSane Puntos 1825

Esto se desprende en gran medida de la respuesta de Antoni.

Esto es lo que pretendía con una prueba de permutación Primero excluyamos el empate como hizo Antoni:

  d   s  r 
 10   1  6
 -9  -1  5
  8   1  4
  5   1  2
 -6  -1  3
  0  NA NA
  2   1  1

Nuestra estadística de prueba es entonces 1+2+4+6 = 13

Por lo tanto, podríamos calcular la distribución de permutación desde cero de la siguiente manera:

 pm <- c(-1,1)
 sign <- expand.grid(s1=pm,s2=pm,s3=pm,s4=pm,s5=pm,s6=pm)
 table(rowSums((sign>0)%*%cbind(1:6)))/64

que da los mismos valores que dsignrank(0:21,6) (¡yay!). Así que, claramente, cuando no hay empates (que es el caso, ya que los excluimos) esto es sólo la prueba de rango con signo, como debe ser

Consideremos si podemos hacer algo con el empate. El modo en que lo tratemos depende de cómo se haya producido.

Si, por ejemplo, imaginamos una escala continua subyacente que se ha discretizado en categorías, entonces nuestro empate se debe simplemente a dos valores diferentes que nuestras categorías impuestas posteriormente no son lo suficientemente finas para distinguir.

Podría decirse entonces que los dos valores son "realmente" diferentes, pero no tenemos ninguna base para concluir qué signo debemos tener y, por lo tanto, permitir ambas posibilidades, la mitad de las veces dándole un +1 y la otra mitad dándole un -1 y luego promediando los dos (o tal vez para ser conservadores, algunos argumentarían que deberíamos tomar el mayor de los dos posibles recuentos ... pero voy a seguir mirando el promedio de los dos casos posibles aquí). [Por el contrario, si los valores fueran intrínsecamente discretos sin una escala continua subyacente pero no observada, entonces diríamos que el 0 es inherente y lo trataríamos de otra manera - creo que la exclusión probablemente tiene más sentido en ese caso].

La corbata de la nota siempre tienen el rango más pequeño.

Así que tenemos una tabla como la anterior pero la penúltima fila es

   d  s r 
   :  : :
   0 -1 1

o

   d  s r 
   :  : :
   0  1 1

y todas las demás filas tendrían r uno más alto que antes.

  d   s  r 
 10   1  7
 -9  -1  6
  8   1  5
  5   1  3
 -6  -1  4
  0  ±1  1
  2   1  2

Así que las posibles estadísticas de la prueba son 2+3+5+7 y 1+2+3+5+7 (17 y 18)

[Un enfoque alternativo, si somos conservadores, sería tratarlo como un n=7 completo y tomar el mayor de los dos valores p posibles, lo que da 0,6875].

Si hacemos todas las permutaciones pero siempre promediando los dos signos para el rango más pequeño, contribuirán 1/2, y cada uno de los otros rangos positivos será 1 más alto.

En efecto, estaríamos haciendo esto:

 table(0.5+rowSums((sign>0)%*%cbind(2:7)))/64

Y comparando una estadística de prueba de 17,5 con eso. Esto da p = 0,625.

De todos modos, todos los enfoques son un poco diferentes, pero cuentan más o menos la misma historia general aquí.

0 votos

Gracias, así que si el conjunto de datos tiene varios vínculos. ¿El resultado obtenido de la prueba de rango de signos de Wilcoxon debe comprobarse mediante la prueba de permutación? Pero parece que la prueba de permutación se aplica normalmente en una prueba de dos muestras, y la prueba de permutación requiere la suposición de que dos distribuciones tienen la misma forma? ¿Es eso cierto?

0 votos

La prueba de rango con signo habitual es una prueba de permutación aplicada a los rangos con signo (como he demostrado). En ese caso, las permutaciones nocionales en una prueba por pares serían permutaciones de las etiquetas de los grupos de las observaciones por pares, pero como eso equivale simplemente a cambiar el signo de la diferencia, puede aplicarse a una sola muestra sin problemas. Las pruebas de permutación no son "normalmente" de una muestra o de dos muestras, sino que son cualquier cosa que se permute bajo la nula. Por ejemplo, puede tener una prueba de permutación para un ANOVA de una vía si lo desea. Una prueba de permutación asume la intercambiabilidad bajo la nula...ctd

0 votos

Ctd... lo que implicaría que al intercambiar las etiquetas de dos muestras las distribuciones de las que fueron extraídas tendrían la misma forma si el nulo fuera verdadero . Esta misma suposición se hace para la prueba de rango con signo. Obsérvese que las muestras no tienen que parecer tener la misma forma para que la prueba sea válida, ya que el nulo puede no ser cierto, y no se requiere que esa suposición se mantenga cuando no lo es. Así que es un importante hipotético cuestión: si la nula fuera cierta, ¿las distribuciones de las variables que quieres intercambiar habrían tenido la misma forma?

2voto

Antoni Parellada Puntos 2762

He estado jugando con esta pregunta, y esto es lo que he obtenido hasta ahora...

  1. Mirando bajo el capó de R wilcox.test() :

Intenté seguir por el lado lo que R estaba haciendo por detrás. Aquí hay algo de código:

d = data.frame(difference = c(10,-9,8,5,-6,0,2))   # Differences in OP
d$sgn = sign(d$difference)                         # The sign function of these diff's
d$abs = abs(d$difference)                          # The absolute value of these diff's
d$abs = replace(d$abs, d$abs==0, NA)               # Getting the zeros out of the way
d$rank = rank(d$abs, na='keep')                    # Ranking the abs values
n = length(d$rank) - length(d$rank[is.na(d$rank)]) # Rows without zero differences (6)
d$multi = d$sgn * d$rank                           # Multiplying sign times rank.

dando como resultado el siguiente data.frame:

  difference sgn abs rank multi
1         10   1  10    6     6
2         -9  -1   9    5    -5
3          8   1   8    4     4
4          5   1   5    2     2
5         -6  -1   6    3    -3
6          0   0  NA   NA    NA
7          2   1   2    1     1

Ahora podemos obtener la estadística de prueba ( V ) sumando todos los valores positivos en multi : sum(d[d$multi > 0, ]$multi, na.rm=T) y la salida es $13$ .

Ahora imaginemos que estamos en 1985, y vamos a la parte de atrás del libro a las tablas para recuperar el $p$ -valor... Bien, hagámoslo con R: psignrank(q = 13, n = n, lower.tail = T) . El resultado: $0.71875$ .

¿Esto concuerda con los resultados de la wilcox.test función... No... y sí. Al principio, podemos estar decepcionados:

 wilcox.test(difference, correct = F, alternative = 'less', exact = T)

    Wilcoxon signed rank test

data:  difference
V = 13, p-value = 0.6999
alternative hypothesis: true location is less than 0

Warning message:
In wilcox.test.default(difference, correct = F, alternative = "less",  :
  cannot compute exact p-value with zeroes

pero no es que no estemos avisados... Ahora, vamos a deshacernos de la molesta fila con el empate, y a recalcular:

wilcox.test(difference[-6], correct = F, alternative = 'less', exact = T)

    Wilcoxon signed rank test

data:  difference[-6]
V = 13, p-value = 0.7187
alternative hypothesis: true location is less than 0

¡Bingo! Aquí está el codiciado $0.7187$ de nuevo.


  1. Pero, ¿podemos hacerlo más elegante y correr un Montecarlo?
set.seed(11)                              # Today's date in the US - no cherry-picking!
r = 1:6                                   # The possible ranks of our non-zero differences
nsim = 1e5 
V = 0 
for (i in 1:nsim){ 
  rank = sample(r)                        # Sampling the ranks...
  sign = sample(c(1, -1), 6, replace = T) #... and the signs for each rank.
  V[i] = sum(rank[sign > 0])              # Doing the sum to get the V.
} 
(p_value <- sum(V <= 13) / nsim)          # Fraction with a sum equal or lower than 13.

[1] 0.72204

¡Realmente genial! $0.72204$ ...tan cerca...

0 votos

@Glen_b ¿Puede este MC pasar la prueba de permutación que sugieres en tu comentario?

0 votos

De hecho, eso estaría bien; es una prueba de aleatoriedad, pero sólo hay un pequeño número de permutaciones, así que lo mostraré... pero veré si puedo hacerlo manteniendo el empate.

0 votos

Ahora he publicado una respuesta que habla de las formas de ver la distribución de las permutaciones

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X