¿Cómo calcular la distancia de Mahalanobis en R?

En este artículo, vamos a calcular la distancia de Mahalanobis en el lenguaje de programación R.

La distancia de Mahalanobis se utiliza para calcular la distancia entre dos puntos o vectores en un espacio métrico de distancia multivariado, que es un análisis estadístico que involucra varias variables. Para empezar, necesitamos un marco de datos. 

Ejemplo: Crear marco de datos

R

set.seed(700)
score_1 <− rnorm(20,12,1)
score_2 <− rnorm(20,11,12)
score_3 <− rnorm(20,15,23)
score_4 <− rnorm(20,16,3)
  
df <− data.frame(score_1, score_2, score_3, score_4)
df

Producción:

    score_1     score_2    score_3   score_4
1  11.91218  20.3843568  68.179655 12.864159
2  11.77103  13.5718323 -30.953642 15.241168
3  11.91570  29.9250800  42.570528  7.179686
4  10.25905  10.7594514  17.879960 19.639647
5  13.01343  15.7463448   3.185857 12.776482
6  11.78211  14.9688992  31.368892 16.043620
7  13.51328  10.5017826  58.985715 14.701817
8  11.10565  20.4965614   6.806652 15.876947
9  11.20834  12.7588547  10.461229 16.991393
10 11.10233 -10.3961351  18.082209 15.258644
11 12.34732  -0.8615359  57.411750 13.400421
12 12.08361  15.0248600 -17.853098 13.999682
13 12.86457  -6.1221908  23.184838 20.389762
14 10.58871  17.1000715  20.900155 12.560962
15 10.74134   6.3728076  39.173259 17.865589
16 11.20248   8.8909128  24.696939 14.384012
17 12.89797  34.8522136  10.035498 14.975053
18 11.37993  14.4232355  28.129197 16.395271
19 11.78309  14.9324201  23.584362 14.765245
20 12.77480  30.7969171  -9.635902 10.203178

 La función mahalanobis() se usa para calcular la distancia de Mahalanobis en R. Es un tipo incorporado.

Sintaxis: mahalanobis(Data, centro, cov)

dónde:

  • Datos: array o vector de datos
  • centro: vector medio
  • cov: array de covarianza

Ejemplo: Calcular la distancia de Mahalanobis

R

mahalanobis(df, colMeans(df), cov(df))

Producción:

4.46866714558536 4.61260586529474 7.41513071619846 5.21448589688871

 2.84292222223026 0.673116763926688 6.04984394951585 1.72865361097932

  1.03750690527476 7.21856549018804 4.85579110162481 2.90808365141091 

  7.57223884458172 3.27702692226183 2.68208130355785 0.916110244005359 

  6.79796970070888 0.829693729587342 0.0356208551487593 4.86388508103035

Calcular el Mahalanobis para cada fila

Basándonos en la distancia de Mahalanobis, encontramos que algunas de las distancias son mucho más altas que otras y para identificar que es estadísticamente significativa, necesitamos calcular los valores p.

Ejemplo: calcular la distancia de Mahalanobis para cada fila

R

# create new column for Mahalanobis distances
df$mahalnobis<- mahalanobis(df, colMeans(df), cov(df))
df

Producción:

    score_1     score_2    score_3   score_4
1  11.91218  20.3843568  68.179655 12.864159
2  11.77103  13.5718323 -30.953642 15.241168
3  11.91570  29.9250800  42.570528  7.179686
4  10.25905  10.7594514  17.879960 19.639647
5  13.01343  15.7463448   3.185857 12.776482
6  11.78211  14.9688992  31.368892 16.043620
7  13.51328  10.5017826  58.985715 14.701817
8  11.10565  20.4965614   6.806652 15.876947
9  11.20834  12.7588547  10.461229 16.991393
10 11.10233 -10.3961351  18.082209 15.258644
11 12.34732  -0.8615359  57.411750 13.400421
12 12.08361  15.0248600 -17.853098 13.999682
13 12.86457  -6.1221908  23.184838 20.389762
14 10.58871  17.1000715  20.900155 12.560962
15 10.74134   6.3728076  39.173259 17.865589
16 11.20248   8.8909128  24.696939 14.384012
17 12.89797  34.8522136  10.035498 14.975053
18 11.37993  14.4232355  28.129197 16.395271
19 11.78309  14.9324201  23.584362 14.765245
20 12.77480  30.7969171  -9.635902 10.203178

Calcular el valor p

El valor p para cada distancia se calcula como la estadística Chi-Square de la distancia de Mahalanobis con k-1(k = número de variables) grados.

La función pchisq() se utiliza para calcular la densidad de chi-cuadrado acumulada.

Sintaxis: pchisq(vec, df)

Parámetros:

  • vec: Vector de valores de x
  • df: Grado de libertad

Ejemplo: calcular el valor p

R

# create new column for p-value 
df$pvalue <- pchisq(df$mahalnobis, df=3)
df

Producción:

En general, un valor p inferior a 0,001 se considera un valor atípico. En este caso, todos los valores de p son mayores que 0,001

Publicación traducida automáticamente

Artículo escrito por kumar_satyam y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *