extremo.multivariado.fnc

Objetivo

Estima el estadístico D2 (Distancia de Mahalanobis) de distancia multivariada al centroide de la distribución para cada registro de la base de datos.

El usuario puede excluir en análisis multivariados posteriores aquellos casos que resulten con una distancia significativa según el criterio definido por el usuario: criterio de significación estadística de la distancia (criterio.p) o criterio de valor de la distancia criterio.d2. Puede además segmentarse la búsqueda de casos extremos a partir de la segmentanción de un máximo de dos factores incluyendo el argumento que.factor.

Extremos multivariados

La función extremo.multivariado.fnc lleva a cabo la estimación del estadístico D2 (Distancia de Mahalanobis) en una matriz de datos de variable cuantitativas, para cada caso o registro de la base de datos especificada como argumento.

El usuario podrá posteriormente eliminar del análisis aquellos casos que resulten etiquetados como extremos multivariados por tener una distancia D al centroide de la distribución multivariada con probabilidad menor o igual a a un criterio p (criterio.p p < 0.001 por defecto) o a un criterio de distancia definido previamente por el usuario (criterio.d2).

Utilizaremos como ejemplo el cuestionario Synthetic Aperture Personality Assessment (SAPA) que se encuentra en la base de datos bfi. Consta de 25 items que miden 5 constructos de personalidad. Escribe en consola ?bfi si deseas obtener información sobre los items que lo componen.

extremos= extremo.multivariado.fnc(bfi, variables=1:25)

En el objeto extremos guardamos la data.frame de resultado con los valores de distancia ordenadas de forma decreciente, probabilidad asociada y número de registro que han superado el criterio de extremo multivariado (p < 0.001).

#------------------------------------------------------------------

# DETECCION DE CASOS EXTREMOS MULTIVARIADOS

#------------------------------------------------------------------

#------------------------------------------------------------------

# Criterio de exclusion: p D2(Mahalanobis) >= 0.001

#------------------------------------------------------------------

*** Distancias calculadas desde una matriz de 2436 registros en 25 variables

*** obtenida de la matriz original de 2800 registros en 25 variables.

*** SE HAN DETECTADO 82 (D2 p <=0.001) registros potencialmente problematicos.

*** Puedes eliminarlos del analisis siguiendo el ejemplo que se presenta a continu

acion:

*** Ej: extremos=extremos.multivariados.fnc(bfi, variables=1:25)

*** new.dat=bfi[extremos$registros.correctos, ] # PRESTA ATENCION A LA COMA

*** analisis.factorial.fnc(new.dat, variables=1:25)

*** CABECERA DE RESULTADOS (Se muestran solo los 15 primeros registros) ***

$Mahalanobis

D D2 p.val registro

datos.63467 10.310152 106.29923 0.0000 63467

datos.65407 9.525357 90.73242 0.0000 65407

datos.65439 9.270040 85.93364 0.0000 65439

datos.63763 9.097980 82.77324 0.0000 63763

datos.67288 9.023625 81.42580 0.0000 67288

datos.64341 8.961424 80.30713 0.0000 64341

datos.63406 8.825714 77.89322 0.0000 63406

datos.64192 8.770832 76.92749 0.0000 64192

datos.62181 8.684167 75.41476 0.0000 62181

datos.65170 8.553129 73.15601 0.0000 65170

datos.64724 8.514739 72.50078 0.0000 64724

datos.64642 8.350569 69.73200 0.0000 64642

datos.65974 8.350569 69.73200 0.0000 65974

datos.63762 8.340674 69.56684 0.0000 63762

datos.64079 8.289636 68.71807 0.0000 64079

$registros.correctos

[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

En primer lugar puedes ver que hemos asignado la salida del procedimiento al objeto extremos. La función guarda ahí una lista con dos elementos: Distancia de Mahalanobis de cada registro y en segundo lugar el vector lógico registros.correctos. Usaremos este vector lógico para filtrar la base de datos bfi, de tal manera que los 82 registros detectados no participen en el análisis factorial posterior. Como puedes ver los registros de ese vector (solo se presentan los 15 primeros) no serán eliminados en el procedimiento de filtraje, dado que presentan valor TRUE en el vector registros.correctos.

Podemos ver que el registro 63457 (entre otros) presenta una gran distancia de Mahalanobis al centroide de la distribución multivariada conjunta de las 25 variables del cuestionario bfi (Big Five).

Podemos realizar ahora un análisis factorial de dicha matriz de datos, excluyendo a los sujetos con distancia significativamente mayor que cero (p < 0.001).

En primer lugar eliminamos todos los registros que han resultado con p < 0.001 en la llamada a la función anterior (Quizás necesites acudir a primeros pasos para recordar como seleccionar o eliminar registros de una base de datos).

bfi.2=bfi[extremos$registros.correctos, ]

dim(bfi) dim(bfi.2)

[1] 2800 28 [1] 2718 28

Observa como extraemos la variable lógica registros.correctos de la lista de resultados asignada por nosotros a extremos. Puedes ver como ahora los datos filtrados ya no contienen los 82 registros problemáticos detectados (2800-82 = 2718). La función genera de forma automática (grafica=T por defecto) un histograma de la distancia de Mahalanobis el cual te permite crear o definir nuevos puntos de corte de definición del criterio de caso extremo incluyendo el argumento criterio.d2 con el valor de distancia que deseamos utilizar. Atendiendo al siguiente histograma, podríamos repetir el procedimiento incluyendo una distancia D2 de 60.

extremos= extremo.multivariado.fnc(bfi, variables=1:25,

criterio.d2=60)

*** SE HAN DETECTADO 39 (D2 > 60) registros potencialmente problematicos.

Como puedes observar con este nuevo criterio solo eliminaremos casi la mitad de los que eliminamos utilizando el criterio de probabilidad asociada al estadístico de distancia de Mahalanobis.

Realizamos el análisis factorial de dicho cuestionario utilizando la base de datos limpia guardada en el paso anterior.

analisis.factorial.fnc(bfi2, variables=1:25, n.factores=5)

fiabilidad.fnc(bfi2, variables=1:25)

Omitimos el resultado de ambas salidas. El usuario puede fácilmente replicar este ejemplo de forma autónoma y comparar la salida habiendo limpiado previamente con los resultados de la matriz de datos sin limpiar por extremos multivariados.

LIMPIAR EXTREMOS MULTIVARIADOS SEGMENTANDO LA MATRIZ

Si incluyes el argumento que.factor con el nombre del factor o factores sobre los que deseas llevar a cabo la limpieza (máximo dos factores) , la función llevará a cabo el procedimiento de forma separada para cada nivel de segmentación.

extremo=extremo.multivariado.fnc(datos, variables=1:10, que.factor='sexo')

extremo=extremo.multivariado.fnc(datos, variables=1:10, que.factor='sexo:zona')

extremo=extremo.multivariado.fnc(iris, variables=1:4,

que.factor = 'Species', criterio.d2=10)

*** SE HAN DETECTADO 8 (D2 > 10) registros potencialmente problematicos

$Mahalanobis

D D2 p.val registro

virginica.119 3.697239 13.669574 0.0084 119

versicolor.69 3.523733 12.416691 0.0145 69

setosa.44 3.518075 12.376852 0.0148 44

setosa.42 3.488495 12.169595 0.0161 42

setosa.23 3.345523 11.192522 0.0245 23

virginica.132 3.299671 10.887828 0.0279 132

versicolor.99 3.199508 10.236852 0.0366 99

setosa.15 3.187075 10.157448 0.0379 15

setosa.25 3.116110 9.710142 0.0456 25

virginica.118 3.092769 9.565221 0.0484 118

virginica.135 2.974840 8.849674 0.0650 135

virginica.101 2.961209 8.768759 0.0671 101

versicolor.71 2.929822 8.583860 0.0724 71

setosa.45 2.922615 8.541677 0.0736 45

virginica.142 2.885865 8.328218 0.0803 142

$registros.correctos

[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE