martes, febrero 20, 2007

Test chi-cuadrado

O chi-square test.
Si por lo que sea necesitamos calcularlo en python, con el módulo stats.py podeis.
Y un poco de teoría aquí.

Alguna mas cosilla de mismo autor aquí.
Nota: stats.py depende de pstat.py.

Como casi siempre en la wikipedia hay info:

Ejemplo de uso.
Una explicación de un compi de curro (estadístico él) de como aplicarlo a una porción de texto (resultado de secuenciar un hmtl).

1.- Divide el churro en k partes (cuanto más mejor, pero que sea significativo el número de etiquetas que caen dentro de cada parte). Para el ejemplo que me has dado (60 etiquetas dentro del body) lo dividimos en 9:
parte1: (etiqueta 1) <= x < (etiqueta (60/9)*1) --> 1.00 <= x <> 6.66 <= x <> 13.33 <= x <> 20.00 <= x <> 26.66 <= x <> 33.33 <= x <> 40.00 <= x <> 46.66 <= x <> 53.33 <= x <> 1/9 = 0.11
Número de casos esperados en cada intervalo: N/k --> 13/9 = 1.44

4.- Con todos estos datos podemos generar una tabla como la que sigue:
Intervalo 1 2 3 4 5 6 7 8 9
Límite inferior 1 6.67 13.33 20.00 26.67 33.33 40.00 46.67 53.33
Límite superior 6.67 13.33 20.00 26.67 33.33 40.00 46.67 53.33 60.00
Casos observados (Oi) 2 2 0 0 0 2 4 2 1
Probabilidad esperada 0.11 0.11 0.11 0.11 0.11 0.11 0.11 0.11 0.11
Casos esperados (Ei) 1.44 1.44 1.44 1.44 1.44 1.44 1.44 1.44 1.44

Variabilidad 0.22 0.22 1.44 1.44 1.44 0.22 4.55 0.22 0.13
Vi=((Oi-Ei)^2)/Ei

Variabilidad acumulada 0.22 0.44 1.88 3.32 4.76 4.97 9.52 9.74 9.88
SUM(Vi)

El número que nos interesa es el último de todos: 9.88
Este se compara con el valor de la chi cuadrado para k-1 grados de libertad y alfa (nivel de significación). Vamos a elegir un alfa de 5% que es suficientemente significativo, el resultado es 15.51 (Excel: CHIINV(0,05;8))
Como 9.88 es menor que 15.51 entonces se acepta la hipótesis nula: la etiqueta se distribuye uniformemente por el churro.


Resumiendo...
Si haces los cálculos para cada etiqueta, aquella que menor variabilidad acumulada tenga será la más uniforme y por consiguiente la que te interesa... para lo que tu quieres solo te interesa ese calculo, aunque no está de más comprobar que se distribuye uniformemente comparando el elegido con el valor de la chi-cuadrado.


Para acabar comentar unas notas finales:
  • Chi-cuadrado se usa contra el spam.
  • Código para la chi-inversa. Aunque la he probado y no me da lo mismo que la CHIINV del excel.
  • En scipy está implementada, en el módulo stats.

4 comentarios:

cesarob dijo...

He estado probando la función de stats.py, y lo que te devuelte, el "p-value" es la probabilidad de tener un valor igual o mejor al que tienes si la hipótesis nula es cierta... simplificando: Si el "p-value" es mayor que el nivel de significación (en nuestro ejemplo 5%, es decir 0.05) entonces aceptamos la hipótesis nula (la etiqueta se distribuye de forma uniforme en el churro).

Si queremos realizar comparaciones para todas las etiquetas, aquella que tenga el "p-value" más alto será la que mejor ajuste a una distribución uniforme.

Anónimo dijo...

Ola, fercepar@cde.rieder.net.py era seu ? Estou tentando entrar em contato e nao consigo, favor enviar o novo caso tenha mudado.

Favor enviar para giovansite@gmail.com

Obrigado.

DeCasasyAutos.com dijo...

Utilizamos chi-cuadrado para medir la permenencia de un usuario en nuestro sitio (http://www.decasasyautos.com) de modo tal de detectar el SPAM/SCAM.

Javier
http://www.decasasyautos.com

DeCasasyAutos.com dijo...

Hay una buena explicacion de chi-cuadrado en http://www.decasasyautos.com/anuncio/utilizacion_de_chi_contra_el_spam_1176447995.html en cual como mencioné utilizamos en nuestro sitio http://www.decasasyautos.com para reducir el scam y el spam.

Javier
http://www.decasasyautos.com