En estadística , el par medio es una estadística sólida que mide la asimetría de una distribución univariante . [1] Se define como una diferencia mediana escalada de la mitad izquierda y derecha de una distribución. Su robustez lo hace adecuado para identificar valores atípicos en diagramas de caja ajustados . [2] [3] Diagramas de caja ordinariosno les va bien con distribuciones sesgadas, ya que etiquetan las colas asimétricas más largas como valores atípicos. Usando el par med, los bigotes de un diagrama de caja se pueden ajustar para distribuciones sesgadas y así tener una identificación más precisa de valores atípicos para distribuciones no simétricas.
Como una especie de estadística de orden , el par medio pertenece a la clase de estadísticas L generalizadas incompletas . [1] Al igual que la mediana o media ordinaria , el par mediano es un estadístico no paramétrico , por lo que se puede calcular para cualquier distribución.
Definición
La siguiente descripción utiliza indexación basada en cero para armonizar con la indexación en muchos lenguajes de programación.
Dejar ser una muestra ordenada de tamaño , y deja ser la mediana de. Definir los conjuntos
- ,
- ,
de tamaños y respectivamente. Para y , definimos la función del kernel
dónde es la función de signo .
El par mediano es entonces la mediana del conjunto [1] : 998
- .
En otras palabras, dividimos la distribución en todos los valores mayores o iguales a la mediana y todos los valores menores o iguales a la mediana. Definimos una función del kernel cuya primera variable está sobre el valores mayores y cuya segunda variable está por encima del valores menores. Para el caso especial de valores ligados a la mediana, definimos el núcleo mediante la función signum . El par medio es entonces la mediana de todos valores de .
Dado que el par medio no es una mediana aplicada a todos parejas, pero solo a aquellas para las que , pertenece a la clase de estadísticos L generalizados incompletos . [1] : 998
Propiedades del medcouple
El par medio tiene varias propiedades deseables. Algunos de ellos se heredan directamente de la función del kernel.
El núcleo de medcouple
Hacemos las siguientes observaciones sobre la función del kernel :
- La función del kernel no varía en función de la ubicación. [1] : 999 Si sumamos o restamos cualquier valor a cada elemento de la muestra, los valores correspondientes de la función del kernel no cambian.
- La función del kernel es invariante en escala. [1] : 999 Escalando igualmente todos los elementos de la muestra no altera los valores de la función del núcleo.
Estas propiedades, a su vez, son heredadas por el par médico. Por tanto, el par medio es independiente de la desviación estándar y media de una distribución, una propiedad deseable para medir la asimetría . Para facilitar el cálculo, estas propiedades nos permiten definir los dos conjuntos
dónde . Esto hace que el conjuntotienen un rango de como máximo 1, mediana 0 y mantienen el mismo par medio que.
Para , el núcleo medcouple se reduce a
Usar el conjunto reescalado y rojo reciente podemos observar lo siguiente.
- La función del kernel está entre -1 y 1, [1] : 998 es decir,. Esto se sigue de la desigualdad del triángulo inverso con y y el hecho de que .
- El núcleo de medcouple no es decreciente en cada variable. [1] : 1005 Esto puede ser verificado por las derivadas parciales. y , ambos no negativos, ya que .
Con las propiedades 1, 2 y 4, podemos definir la siguiente matriz ,
Si ordenamos los conjuntos y en orden decreciente, entonces la matriz tiene filas ordenadas y columnas ordenadas, [1] : 1006
El par medio es entonces la mediana de esta matriz con filas ordenadas y columnas ordenadas. El hecho de que las filas y columnas estén ordenadas permite la implementación de un algoritmo rápido para calcular el par medio.
Robustez
El punto de ruptura es el número de valores que una estadística puede resistir antes de perder sentido, es decir, el número de valores atípicos arbitrariamente grandes que el conjunto de datospuede tener antes de que el valor de la estadística se vea afectado. Para la pareja mediana, el punto de ruptura es del 25%, ya que es una mediana tomada sobre las parejas. tal que . [1] : 1002
Valores
Como todas las medidas de sesgo , el par medio es positivo para distribuciones sesgadas hacia la derecha, negativo para distribuciones sesgadas hacia la izquierda y cero para distribuciones simétricas. Además, los valores del par medio están delimitados por 1 en valor absoluto. [1] : 998
Algoritmos para calcular el par medio
Antes de presentar los algoritmos medcouple, recordamos que existen algoritmos para encontrar la mediana . Dado que el par medio es una mediana, los algoritmos ordinarios para encontrar la mediana son importantes.
Algoritmo ingenuo
El algoritmo ingenuo para calcular el par medio es lento. [1] : 1005 Procede en dos pasos. Primero, construye la matriz de par medque contiene todos los valores posibles del kernel medcouple. En el segundo paso, encuentra la mediana de esta matriz. Puesto que hay entradas en la matriz en el caso en que todos los elementos del conjunto de datos son únicos, la complejidad algorítmica del algoritmo ingenuo es.
Más concretamente, el algoritmo ingenuo procede de la siguiente manera. Recuerde que estamos usando indexación basada en cero .
function naïve_medcouple ( vector X): // X es un vector de tamaño n. // La clasificación en orden decreciente se puede realizar en el lugar en O (n log n) tiempo sort_decreasing (X) xm: = mediana (X) xscale: = 2 * max (abs (X)) // Definir los vectores reescalados y centrados superior e inferior // heredan la ordenación decreciente de X Zplus: = [(x - xm) / xscale | x en X tal que x> = xm] Zminus: = [(x - xm) / xscale | x en X tal que x <= xm] p: = tamaño (Zplus) q: = tamaño (Zminus) // Definir la función del kernel cerrando sobre Zplus y la función Zminus h (i, j): a: = Zplus [i] b: = Zminus [j] if a == b: return signum (p - 1 - i - j) else : return (a + b) / (a - b) endif endfunction // O (n ^ 2) operaciones necesarias para formar este vector H: = [h (i, j) | i en [0, 1, ..., p - 1] y j en [0, 1, ..., q - 1]] retorno función final mediana (H)
La última llamada a la mediana en un vector de tamaño se puede hacer solo en operaciones, por lo tanto, todo el algoritmo ingenuo de par de medios es de la misma complejidad.
Algoritmo rápido
El algoritmo rápido supera al algoritmo ingenuo al explotar la naturaleza ordenada de la matriz de medcouple . En lugar de calcular todas las entradas de la matriz, el algoritmo rápido utiliza el K º algoritmo par de Johnson & Mizoguchi. [4]
La primera etapa del algoritmo rápido procede como el algoritmo ingenuo. Primero calculamos los ingredientes necesarios para la matriz del núcleo,, con filas ordenadas y columnas ordenadas en orden decreciente. En lugar de calcular todos los valores de, en cambio, explotamos la monotonicidad en filas y columnas, a través de las siguientes observaciones.
Comparar un valor con la matriz del núcleo
Primero, observamos que podemos comparar cualquier con todos los valores de en hora. [4] : 150 Por ejemplo, para determinar todos y tal que , tenemos la siguiente función:
function mayor_h ( kernel h , int p , int q , real u ) : // h es la función kernel, h (i, j) da la i-ésima, j-ésima entrada de H // pyq son el número de filas y columnas de la matriz del grano H // vector de tamaño p P : = vector ( p ) // indexando desde cero j : = 0 // comenzando desde abajo, calcula el [[supremum | mínimo límite superior]] para cada fila para i : = p - 1 , p - 2 , ..., 1 , 0 : // buscamos en esta fila hasta encontrar un valor menor que u while j < q y h ( i , j ) > u : j : = j + 1 end while // la entrada que precede a la que acabamos de encontrar es mayor que u P [ i ] : = j - 1 endfor retorno P función final
Esta función mayor_h atraviesa la matriz del núcleo desde la parte inferior izquierda hasta la parte superior derecha y devuelve un vector de índices que indican para cada fila dónde se encuentra el límite entre valores mayores que y aquellos menores o iguales a . Este método funciona debido a la propiedad ordenada fila-columna de. Dado que mayor_h calcula como máximo valores de , su complejidad es . [4] : 150
Conceptualmente, el resultado El vector se puede visualizar como el establecimiento de un límite en la matriz como lo sugiere el siguiente diagrama, donde las entradas rojas son todas más grandes que :
El algoritmo simétrico para calcular los valores de menos que es muy similar. En cambio, procede a lo largo en la dirección opuesta, de arriba a la derecha a abajo a la izquierda:
función less_h ( kernel h , int p , int q , real u ) : // vector de tamaño p Q : = vector ( p ) // último índice de fila posible j : = q - 1 // comenzando desde arriba, calcula el [[infimum | mayor límite inferior]] para cada fila para i : = 0 , 1 , ..., p - 2 , p - 1 : // buscamos en esta fila hasta encontrar un valor mayor que u while j > = 0 y h ( i , j ) < u : j : = j - 1 end while // la entrada que sigue a la que acabamos de encontrar es menor que u Q [ i ] : = j + 1 endfor retorno Q endfunction
Este límite inferior se puede visualizar así, donde las entradas azules son más pequeñas que :
Para cada , tenemos eso , con una desigualdad estricta que ocurre solo para aquellas filas que tienen valores iguales a .
También tenemos que las sumas
dar, respectivamente, el número de elementos de que son mayores que , y el número de elementos que son mayores o iguales a . Por lo tanto, este método también produce el rango de dentro de los elementos de . [4] : 149
Mediana ponderada de las medianas de las filas
La segunda observación es que podemos usar la estructura de la matriz ordenada para comparar instantáneamente cualquier elemento con al menos la mitad de las entradas de la matriz. Por ejemplo, la mediana de las medianas de las filas en toda la matriz es menor que el cuadrante superior izquierdo en rojo, pero mayor que el cuadrante inferior derecho en azul:
De manera más general, utilizando los límites dados por y vectores de la sección anterior, podemos suponer que después de algunas iteraciones, hemos identificado la posición del par medio para que se encuentre entre el límite izquierdo rojo y el límite derecho azul: [4] : 149
Las entradas amarillas indican la mediana de cada fila. Si reorganizamos mentalmente las filas para que las medianas se alineen e ignoremos las entradas descartadas fuera de los límites,
podemos seleccionar una mediana ponderada de estas medianas, cada entrada ponderada por el número de entradas restantes en esta fila. Esto asegura que podemos descartar al menos 1/4 de todos los valores restantes sin importar si tenemos que descartar los valores más grandes en rojo o los valores más pequeños en azul:
La mediana de cada fila se puede calcular en tiempo, ya que las filas están ordenadas, y la mediana ponderada se puede calcular entiempo, usando una búsqueda binaria. [4] : 148
K º algoritmo par
Al juntar estas dos observaciones, el algoritmo de pares medianos rápidos procede en términos generales de la siguiente manera. [4] : 148
- Calcule los ingredientes necesarios para la función de kernel de medcouple con filas ordenadas y columnas ordenadas.
- En cada iteración, calcule el par medio con la mediana ponderada de las medianas de las filas. [4] : 148
- Compare esta suposición tentativa con la matriz completa obteniendo vectores de límite derecho e izquierdo y respectivamente. La suma de estos vectores también nos da el rango de este par medio tentativo.
- Si el rango del par medio tentativo es exactamente , luego se detiene. Hemos encontrado la pareja médica.
- De lo contrario, descarte las entradas mayores o menores que la suposición tentativa seleccionando o como el nuevo límite derecho o izquierdo, dependiendo de qué lado el elemento de rango está en. Este paso siempre descarta al menos 1/4 de todas las entradas restantes.
- Una vez que el número de parejas med candidatas entre los límites derecho e izquierdo sea menor o igual a , realice una selección de rango entre las entradas restantes, de modo que el rango dentro de este conjunto de candidatos más pequeño corresponda al rango del par medio dentro de toda la matriz.
La clasificación inicial para formar el la función toma hora. En cada iteración, la mediana ponderada toma tiempo, así como los cálculos de la nueva tentativa y límites izquierdo y derecho. Dado que cada iteración descarta al menos 1/4 de todas las entradas restantes, habrá como máximoiteraciones. [4] : 150 Por lo tanto, todo el algoritmo rápido tomahora. [4] : 150
Repitamos el algoritmo rápido con más detalle.
function medcouple ( vector X): // X es un vector de tamaño n // Calcule los ingredientes iniciales como para el par médico ingenuo sort_decreasing (X) xm: = mediana (X) xscale: = 2 * max (abs (X)) Zplus: = [(x - xm) / xscale | x en X tal que x> = xm] Zminus: = [(x - xm) / xscale | x en X tal que x <= xm] p: = tamaño (Zplus) q: = tamaño (Zminus) función h (i, j): a: = Zplus [i] b: = Zminus [j] if a == b: return signum (p - 1 - i - j) else : return (a + b) / (a - b) endif endfunction // Comenzar el algoritmo de pares K (Johnson & Mizoguchi) // Los límites iniciales izquierdo y derecho, dos vectores de tamaño p L: = [0, 0, ..., 0] R: = [q - 1, q - 1, ..., q - 1] // número de entradas a la izquierda del límite izquierdo Ltotal: = 0 // número de entradas a la izquierda del límite derecho Rtotal: = p * q // Como estamos indexando desde cero, el índice medcouple es uno // menos que su rango. medcouple_index: = piso (Rtotal / 2) // Itere mientras el número de entradas entre los límites sea // mayor que el número de filas en la matriz. mientras que Rtotal - Ltotal> p: // Calcule las medianas de las filas y sus pesos asociados, pero omita // las filas que ya estén vacías. middle_idx: = [i | i en [0, 1, ..., p - 1] tal que L [i] <= R [i]] row_medians: = [h (i, floor ((L [i] + R [i]) / 2) | i in middle_idx] pesos: = [R [i] - L [i] + 1 | yo en middle_idx] WM: = mediana ponderada (row_medians, weights) // Nuevos límites tentativos derecho e izquierdo P: = mayor_h (h, p, q, WM) Q: = menos_h (h, p, q, WM) Ptotal: = suma (P) + tamaño (P) Qtotal: = suma (Q) // Determine qué entradas descartar, o si hemos encontrado el par med si medcouple_index <= Ptotal - 1: R: = P Rtotal: = Ptotal else : if medcouple_index> Qtotal - 1: L: = Q Ltotal: = Qtotal otra cosa : // Encontrado el par medio, el rango de la mediana ponderada es igual al índice de par medio return WM endif endif terminar mientras // No encontré el par med, pero quedan muy pocas entradas provisionales restante: = [h (i, j) | i en [0, 1, ..., p - 1], j en [L [i], L [i] + 1, ..., R [i]] tal que L [i] <= R [i]] // Seleccione el par medido por rango entre las entradas restantes medcouple: = select_nth (restante, medcouple_index - Ltotal) retorno de la función final del par medio
En el uso en el mundo real, el algoritmo también debe tener en cuenta los errores que surgen de la aritmética de punto flotante de precisión finita . Por ejemplo, las comparaciones para la función del núcleo medcouple deben realizarse dentro de la máquina epsilon , así como las comparaciones de orden en las funciones mayores_h y menos_h .
Software / código fuente
- El algoritmo rápido medcouple se implementa en R 's paquete robustbase.
- El algoritmo fast medcouple se implementa en una extensión C para Python en el paquete Robustats Python .
- Una implementación de C ++ con GPL del algoritmo rápido , derivada de la implementación de R.
- Una implementación de Stata del algoritmo rápido .
- Una implementación del algoritmo ingenuo en Matlab (y por lo tanto GNU Octave ).
- El algoritmo ingenuo también se implementa para los modelos de estadísticas del paquete Python .
Ver también
- Estadística robusta
- Oblicuidad
- Diagramas de caja ajustados
Referencias
- ^ a b c d e f g h i j k l Brys, G .; Hubert, M .; Struyf, A. (noviembre de 2004). "Una medida sólida de asimetría". Revista de Estadística Computacional y Gráfica . 13 (4): 996–1017. doi : 10.1198 / 106186004X12632 . Señor 2425170 .
- ^ Hubert, M .; Vandervieren, E. (2008). "Un diagrama de caja ajustado para distribuciones sesgadas". Estadística Computacional y Análisis de Datos . 52 (12): 5186–5201. doi : 10.1016 / j.csda.2007.11.008 . Señor 2526585 .
- ^ Pearson, Ron (6 de febrero de 2011). "Diagramas de caja y más allá - Parte II: asimetría" . ExploringDataBlog . Consultado el 6 de abril de 2015 .
- ^ a b c d e f g h yo j Johnson, Donald B .; Mizoguchi, Tetsuo (mayo de 1978). "Selección de la K ésimo elemento en X + Y y X 1 + X 2 + ... + X m ". Revista SIAM de Computación . 7 (2): 147-153. doi : 10.1137 / 0207013 . Señor 0502214 .