Disclaimer: Este artículo se basa en la experiencia personal, y puede contener algún error. No debe ser utilizado en presencia de niños o bases de datos no controladas.
En estadística descriptiva, las medidas de posición no central permiten conocer otros puntos característicos de la distribución que no son los valores centrales. Entre las medidas de posición central más importantes están los cuantiles que son aquellos valores de la variable, que ordenados de menor a mayor, dividen a la distribución en partes, de tal manera que cada una de ellas contiene el mismo número de frecuencias.
Los tipos más importantes de cuantiles son:
* Los cuartiles, que dividen a la distribución en cuatro partes;
* Los quintiles, que dividen a la distribución en cinco partes;
* Los deciles, que dividen a la distribución en diez partes;
* Los percentiles, que dividen a la distribución en cien partes.
Fuente: Wikipedia.
Para los que ( como yo ) no tengan ni la más mínima idea de esto de la estadística, diremos solamente que los cuartiles son una medida que indican el valor por debajo del cual queda la parte indicada de los datos. Así, el valor del primer cuartil nos indica el punto en el que quedan por debajo el 25% de los datos totales analizados.
Por norma general, y salvo que estéis metidos en el negocio de la estadística, de la banca o vaya-usted-a-saber-que, y sobre todo si os dedicáis a la programación informática, tendréis que calcular, para una serie de valores, el primer, segundo y tercer cuartil.
Dado que la mejor forma de almacenar datos es utilizar una base de datos como MySQL, suena raro que este SGBD no incorpore una función para realizar este tipo de calculo ( sobre todo porque Excel si que tiene la función CUARTIL ), aunque basta con una petición un poco elaborada para obtener lo que necesitamos.
Presuponemos una tabla llamada datos, formada por un único campo ( valores ), que contiene tantos registros como necesitemos. Para el calculo de cuartiles de estos datos, podemos utilizar la siguiente petición SQL:
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(f.v ORDER BY f.v SEPARATOR ','),',',25/100*COUNT(*)+1),',',-1) AS cuartil_1,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(f.v ORDER BY f.v SEPARATOR ','),',',50/100*COUNT(*)+1),',',-1) AS cuartil_2,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(f.v ORDER BY f.v SEPARATOR ','),',',75/100*COUNT(*)+1),',',-1) AS cuartil_3
FROM (
SELECT valores as v
FROM datos
) AS f;
En el ejemplo, los valores de la tabla datos se extraen con una petición directa “SELECT valores as v FROM datos“, lo que nos permite utilizar cualquier tipo de petición para obtener los valores necesarios ( en mi caso ese SELECT contiene varios LEFT JOIN y condiciones multiples para ajustarlo a mi base de datos estadísticos ).
NOTAS VARIAS:
- Los resultados entre nuestra búsqueda en una base de datos MySQL y los mismos valores en una hoja Excel pueden variar, debido a las diferentes formas en que estos sistemas llevan a cabo las operaciones.
- Las búsquedas son extremadamente rápidas, aún utilizando un volumen de datos muy alto ( más de 12,000 registros en menos de un segundo ).
- La petición en si seguramente se pueda optimizar bastante. Se aceptan sugerencias
- Este artículo se basa en varias horas perdidas buscando por Internet e intentando comprender la estadística dichosa. Vayan por adelantadas mis disculpas por los posibles errores que puedan aparecer.
Tags: estadística, Informática, mysql