- 0
- 0
- 0
- 0
La distancia de Mahalanobis es la distancia entre dos puntos en un espacio multivariado. A menudo se usa para encontrar valores atípicos en análisis estadísticos que involucran varias variables.
Este tutorial explica cómo calcular la distancia de Mahalanobis en Python.
Ejemplo: Distancia de Mahalanobis en Python
Utilice los siguientes pasos para calcular la distancia de Mahalanobis para cada observación en un conjunto de datos en Python.
Paso 1: crea el conjunto de datos.
Primero, crearemos un conjunto de datos que muestra el puntaje del examen de 20 estudiantes junto con la cantidad de horas que pasaron estudiando, la cantidad de exámenes de preparación que tomaron y su calificación actual en el curso:
importar numpy como np importar pandas como pd importar scipy como estadísticas datos = {'puntuación': [91, 93, 72, 87, 86, 73, 68, 87, 78, 99, 95, 76, 84, 96, 76, 80, 83, 84, 73, 74], 'horas': [16, 6, 3, 1, 2, 3, 2, 5, 2, 5, 2, 3, 4, 3, 3, 3, 4, 3, 4, 4], 'preparación': [3, 4, 0, 3, 4, 0, 1, 2, 1, 2, 3, 3, 3, 2, 2, 2, 3, 3, 2, 2], 'grado': [70, 88, 80, 83, 88, 84, 78, 94, 90, 93, 89, 82, 95, 94, 81, 93, 93, 90, 89, 89] } df = pd.DataFrame (datos, columnas = ['puntuación', 'horas', 'preparación', 'calificación']) df.head () puntaje de horas grado de preparación 0 91 16 3 70 1 93 6 4 88 2 72 3 0 80 3 87 1 3 83 4 86 2 4 88
Paso 2: Calcule la distancia de Mahalanobis para cada observación.
A continuación, escribiremos una función corta para calcular la distancia de Mahalanobis.
#create función para calcular la distancia de Mahalanobis def mahalanobis (x = Ninguno , datos = Ninguno , cov = Ninguno ): x_mu = x - np.mean (datos) si no cov: cov = np.cov (datos.valores.T) inv_covmat = np.linalg.inv (cov) izquierda = np.dot (x_mu, inv_covmat) mahal = np.dot (izquierda, x_mu.T) volver mahal.diagonal () # crear una nueva columna en el marco de datos que contenga la distancia de Mahalanobis para cada fila df ['mahalanobis'] = mahalanobis (x = df, data = df [['score', 'hours', 'prep', 'grade']]) #muestra las primeras cinco filas del marco de datos df.head () puntaje de horas grado de preparación mahalanobis 0 91 16 3 70 16.501963 1 93 6 4 88 2.639286 2 72 3 0 80 4.850797 3 87 1 3 83 5.201261 4 86 2 4 88 3.828734
Paso 3: Calcule el valor p para cada distancia de Mahalanobis.
Podemos ver que algunas de las distancias de Mahalanobis son mucho mayores que otras. Para determinar si alguna de las distancias es estadísticamente significativa, necesitamos calcular sus valores p.
El valor p para cada distancia se calcula como el valor p que corresponde al estadístico Chi-Cuadrado de la distancia de Mahalanobis con k-1 grados de libertad, donde k = número de variables. Entonces, en este caso usaremos grados de libertad de 4-1 = 3.
de scipy.stats importar chi2 #calcular el valor p para cada distancia de Mahalanobis df ['p'] = 1 - chi2.cdf (df ['mahalanobis'], 3) # mostrar valores p para las primeras cinco filas en el marco de datos df.head () puntuación horas grado de preparación mahalanobis p 0 91 16 3 70 16.501963 0.000895 1 93 6 4 88 2.639286 0.450644 2 72 3 0 80 4.850797 0.183054 3 87 1 3 83 5,201261 0,157639 4 86 2 4 88 3.828734 0.280562
Normalmente, un valor p inferior a 0,001 se considera un valor atípico.Podemos ver que la primera observación es un valor atípico en el conjunto de datos porque tiene un valor p menor que .001.
Dependiendo del contexto del problema, puede decidir eliminar esta observación del conjunto de datos, ya que es un valor atípico y podría afectar los resultados del análisis.
- https://r-project.org
- https://www.python.org/
- https://www.stata.com/
¿Te hemos ayudado?
Ayudanos ahora tú, dejanos un comentario de agradecimiento, nos ayuda a motivarnos y si te es viable puedes hacer una donación:La ayuda no cuesta nada
Por otro lado te rogamos que compartas nuestro sitio con tus amigos, compañeros de clase y colegas, la educación de calidad y gratuita debe ser difundida, recuerdalo: