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.

miércoles, febrero 14, 2007

Interesante lectura: La increíble hisotoria de FAST [vía]
El futuro del XML en el 2007: Todavía no he leido el artículo pero tiene pinta de merecer la pena.
Con respecto a lo que dicen en barrapunto sobre los Web Services, de que han fracasado antes de despegar. Pues no lo se, ya que sólo lo he tocado de refilón. Pero si me parece la arquitectura un poco complicada.

martes, febrero 13, 2007

En una noticia de barrapunto, hay unos comentarios muy interesantes sobre virus y malware.
Como muestra éste. Ah! los comentarios son de runlevel0 (1932).

sábado, febrero 10, 2007

Navegando por ahí he llegado la web de Jorge Villanova, que fijate tu curra en TPI, en Noxtrum.
No he tenido de leer los posts, pero parece que tiene alguna entrada interesante:
  • En este habla sobre 'The Long Tail'
  • Y en este sobre 'The Search'
Un artículo muy bueno: Why Writing Your Own Search Engine is Hard [vía ojobuscador].

miércoles, febrero 07, 2007

Web 2.0

Un video muy bueno que explica que es la web 2.0.

domingo, febrero 04, 2007

Hacer software es dificil

Veo en barrapunto una noticia que me interesa: El software es dificil.
Por supuesto que lo es. Creo que el siguiente post de slasdot lo resume muy bien (la noticia en slasdot está enlazada desde barrapunto:


"Why doesn't anyone complain about how hard brain surgery is? Why doesn't anyone complain about how hard building space exploration vehicles is? Why doesn't anyone complain about how hard creating a successful marketing campaign is? Software engineering is difficult because it's a complex subject that takes a combination of intelligent people and training to produce good results. Just because businesses are too stupid to realize this doesn't make the problem go away. You can't throw complex projects at untrained, stupid, incompetent people and expect them to produce quality software. You can't just invent some magic formula for software development that will work 100% of the time to maximize efficiency. Software engineering is NOT manufacturing. Accept it and move on for fuck's sake. "

Recuerdo los tiempos de la facultad, cuando te hablaban de las herramientas de cuarta generación. Si hay algo que tengo cada vez mas claro es que jamás se podrá sustituir la labor humana en la producción de software. Es utópico.
En un curro como el mio actual, donde continuamente tienes que estar 'inventandote' algoritmos... dime tu como vas a sustituir esa labor humana. Y buscando soluciones... Y descubriendo y evaluando productos o librerias.... ¿Lo puede hacer cualquiera? Desde luego que no. A ver si algúndía se dan cuenta los que mueven el cotarro que hay que dar una vuelta de tuerca al mercado del desarrollo del software. Se den cuenta de que no somos monos que pulsamos teclas.