Adaptado al paquete MVN: Es un paquete R para evaluar la normalidad univariante y multivariante.

CONTENIDO

  1. Introduccción

  2. Consecuencias de la falta de normalidad

  3. Implementación del paquete MVN

  4. Función MVN

  5. Normalidad univariante

    5.1 Representación grafica de datos

    5.2 tests de normalidad univariante

  6. Test de normalidad multivariante

  7. Gráficas de perspectiva y contorno datos bivariados

  8. valores atipicos multivariantes

  9. Análisis de subconjuntos

  10. Interfaz web para el paquete MVN

  11. Normalidad para una sola variable

  12. referencias bibliograficas

1. Introducción

Los análisis de normalidad, también llamados contrastes de normalidad, tienen como objetivo analizar cuánto difiere la distribución de los datos observados respecto a lo esperado si procediesen de una distribución normal con la misma media y desviación típica.

Para su análisis pueden diferenciarse tres estrategias:

  1. Mediante representaciones gráficas

  2. Mediante métodos analíticos y

  3. Test de hipótesis.

El test de hipotesis bajo consideración es:

Hipotesis estadística

Ho: los datos siguen una distribución normal

Ha: los datos no siguen una distribución normal

Nivel de significancia α=0.05 o 0.01

Prueba estadística: shapiro-wilks, kolmogorov, otro

Decisión: si p<α, la prueba estadística es significativa, no existiría normalidad en los datos

2. Consecuencias de la falta de normalidad

El hecho de no poder asumir la normalidad influye principalmente en los test de hipótesis paramétricos (t-test, anova,…) y en los modelos de regresión. Las principales consecuencias de la no normalidad son:

  1. Los estimadores mínimo-cuadráticos no son eficientes (de mínima varianza).
  2. Los intervalos de confianza de los parámetros del modelo y los contrastes de significancia son solamente aproximados y no exactos.

El teorema del límite central requiere que la población o poblaciones de las que proceden las muestras tengan una distribución normal, no que la tengan las muestras. Si las muestras se distribuyen de forma normal, se puede aceptar que así lo hacen las poblaciones de origen. En el caso de que las muestras no se distribuyan de forma normal, pero se tenga certeza de que las poblaciones de origen sí lo hacen, entonces, los resultados obtenidos por los contrastes paramétricos sí son válidos. El teorema del límite central, permite reducir los requerimientos de normalidad cuando las muestras suficientemente grandes.

3. Implementación del paquete MVN.

El paquete MVN contiene funciones en la clase S3 para evaluar la normalidad uni y multivariante, para ello los datos deben acomodarse como clase “data.frame” o “matrix” , es decir para su uso necesita mínimo 2 variables.

4. Función MVN

Esta función incluye todos los argumentos para evaluar la normalidad multivariada mediante pruebas de normalidad multivariante, gráficos multivariados, detección de valores atípicos multivariado, pruebas de normalidad univariante y gráficas univariadas.

  1. Estructura de la función:

mvn(data, subset = NULL, mvnTest = c(“mardia”, “hz”, “royston”, “dh”, “energy”), covariance = TRUE, tol = 1e-25, alpha = 0.5, scale = FALSE, desc = TRUE, transform = “none”, R = 1000, univariateTest = c(“SW”, “CVM”, “Lillie”, “SF”, “AD”), univariatePlot = “none”, multivariatePlot = “none”, multivariateOutlierMethod = “none”, showOutliers = FALSE, showNewData = FALSE)

Para recrear el tema se usan ejemplos del conjunto de datos Iris.

5. Normalidad univariante

Consiste en representar los datos mediante un histograma y superponer la curva de una distribución normal con la misma media y desviación estándar que muestran los datos.

Representaciones graficas de los datos

Cargando el paquete de datos iris desde la base de datos R

# importando la data Iris de R
data(iris)
head(iris) # muestra los primeros 6 datos
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

Podemos observar 4 variables cuantitativas y una cualitativa (Species), note que, para analizar la normalidad en datos, requerimos de variables medidas cuantitativamente.

names(iris) # muestra los rotulos de las variables
## [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"
dim(iris) # muestra numero de filas y comlumnas
## [1] 150   5

El conjunto de datos Iris tiene 150 muestras tomadas en grupos de 50 (especies de plantas: setosa, virginica y versicolor) y para cada especie se midieron la Sepal.Length, Sepal.Width, Petal.Length, Petal.Width en centímetros.

Observando el tipo de datos:

str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

La salida indica que tenemos 4 variables numéricas(cuantitativas) y una Factor (cualitativa).

Observando el tipo de data.

class(iris)
## [1] "data.frame"

Al observar la normalidad puede suceder que, si los datos tienen una distribución normal multivariante, entonces, cada una de las variables tiene una distribución normal univariante; pero lo opuesto no tiene que ser verdad. Por lo tanto, el control de gráficos y pruebas univariadas podría ser muy útil para diagnosticar el motivo de la desviación. Podemos verificar esta suposición a través de argumentos UnivariatePlot y univariateTest de la función MVN. Establezca el argumento UnivariatePlot “qq” para gráficos Q-Q, “histogram” para histogramas con curvas normales, “box” para diagramas de caja y “scatter” para matrices de diagramas de dispersión.

  1. Gráfico de cajas univariado

A continuación, se muestra el análisis solamente para el tipo de flor setosa (setosa tiene 4 tipos de medición).

# create univariate graphs
library(MVN)
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## sROC 0.1-2 loaded
# setosa subset of the Iris data
setosa <- iris[1:50, 1:4]
# create univariate box, histogram and Q-Q plots
x11()
Result <- mvn(data=setosa, mvnTest="royston", univariatePlot="box")
## Warning in uniPlot(data, type = univariatePlot): Box-Plots are based on
## standardized values (centered and scaled).

Figura 1. Diagramas de cajas para el tipo de flor setosa

  1. Histograma univariado

# create univariate histograms 
Result<- mvn(data=setosa, mvnTest="royston", univariatePlot="histogram")

Figura 2: Histogramas para setosa

Como se ve en la Figura 2, Petal.Width tiene una distribución sesgada a la derecha mientras que otras variables tienen distribuciones aproximadamente normales. Por lo tanto, podemos concluir que los problemas con la normalidad multivariante surgen de la distribución sesgada de Petal.Width.

  1. Gráfico QQ

El gráfico de Q-Q, donde “Q” representa cuantil, es un enfoque gráfico ampliamente utilizado para evaluar el acuerdo entre dos distribuciones de probabilidad. Cada eje se refiere a los cuantiles de distribuciones de probabilidad a comparar, donde uno de los ejes indica cuantiles teóricos (cuantiles hipotéticos) y el otro indica los cuantiles observados. Si los datos observados cumplen con la distribución hipotética (normalidad), los puntos en el gráfico Q-Q se encontrarán aproximadamente en la línea y = x. MVN tiene la capacidad de crear tres gráficos multivariables. Uno puede usar la opción multivariatePlot = “qq” en la función mvn, para crear un gráfico Q-Q chi-cuadrado.

Podemos crear este gráfico para el conjunto de datos de setosa para ver si hay alguna desviación de la normalidad multivariante. La muestra el gráfico de chi-cuadrado Q-Q de las primeras 50 filas de datos de Iris, que son flores de setosa

# create univariate Q-Q plots
result<-mvn(data=setosa, mvnTest = "royston", univariatePlot = "qqplot")

Figura 3: Gráfico Chi-Cuadrado Q-Q para conjunto de datos de setosa

Se puede ver en la Figura que hay algunas desviaciones de la línea recta y esto indica posibles desviaciones de una distribución normal multivariada especialmente en Petal.Width. Como resultado, podemos concluir que este conjunto de datos no satisface las suposiciones de normalidad multivariante, el gráfico de chi-cuadrado Q-Q indica desviaciones de la distribución normal multivariable.

Test de normalidad univariantes

A continuación, se muestran los test de hipótesis más empleados para analizar la normalidad de los datos. En todos ellos, se considera como hipótesis nula que los datos sí proceden de una distribución normal y como hipótesis alternativa que no lo hacen. El p-value de estos test indica la probabilidad de obtener una distribución como la observada si los datos proceden realmente de una población con una distribución normal.

Cuando estos test se emplean con la finalidad de verificar las condiciones de métodos paramétricos, por ejemplo, un t-test o un ANOVA, es importante tener en cuenta que, al tratarse de p-values, cuanto mayor sea el tamaño de la muestra más poder estadístico tienen y más fácil es encontrar evidencias en contra de la H0 (normalidad). Al mismo tiempo, cuanto mayor sea el tamaño de la muestra, menos sensibles son los métodos paramétricos a la falta de normalidad. Por esta razón, es importante no basar las conclusiones únicamente en el p-value del test, sino también considerar la representación gráfica y el tamaño de la muestra.

La función mvn. Proporciona varias pruebas de normalidad univariante ampliamente utilizadas, incluido “SW” (no aplique la prueba de Shapiro-Wilk, si el conjunto de datos incluye más de 5000 casos o menos de 3 casos) para la prueba de Shapiro-Wilk, “CVM” para Cramer-von Mises test, test “Lillie” para la prueba de Lilliefors, “SF” para la prueba de Shapiro-Francia y la prueba de “AD” Anderson-Darling.

  1. Test de Shapiro-Wilks

Este test se emplea para contrastar normalidad cuando el tamaño de la muestra es menor de 50. Para muestras grandes es equivalente al test de kolmogorov-Smirnov (Lilliefors).

# test de normalidad univariante
# Test de Shapiro-Wilks
result <- mvn(data = setosa, univariateTest = "SW", desc = TRUE)
result
## $multivariateNormality
##              Test        Statistic           p value Result
## 1 Mardia Skewness 25.6643445196298 0.177185884467652    YES
## 2 Mardia Kurtosis 1.29499223711605 0.195322907441935    YES
## 3             MVN             <NA>              <NA>    YES
## 
## $univariateNormality
##           Test     Variable Statistic   p value Normality
## 1 Shapiro-Wilk Sepal.Length    0.9777  0.4595      YES   
## 2 Shapiro-Wilk Sepal.Width     0.9717  0.2715      YES   
## 3 Shapiro-Wilk Petal.Length    0.9550  0.0548      YES   
## 4 Shapiro-Wilk Petal.Width     0.7998  <0.001      NO    
## 
## $Descriptives
##               n  Mean   Std.Dev Median Min Max 25th  75th       Skew   Kurtosis
## Sepal.Length 50 5.006 0.3524897    5.0 4.3 5.8  4.8 5.200 0.11297784 -0.4508724
## Sepal.Width  50 3.428 0.3790644    3.4 2.3 4.4  3.2 3.675 0.03872946  0.5959507
## Petal.Length 50 1.462 0.1736640    1.5 1.0 1.9  1.4 1.575 0.10009538  0.6539303
## Petal.Width  50 0.246 0.1053856    0.2 0.1 0.6  0.2 0.300 1.17963278  1.2587179

A partir de los resultados anteriores, podemos ver que todas las variables, excepto Petal.Width con p(0.001)<α(0.05) en el conjunto de datos setosa, tienen distribuciones normales univariadas en el nivel de significación 0.05. Igualmente, los promedios difieren entre sí.

  1. Test Cramer-Von Mises

Nota: para mostrar las pruebas estadísticas, cortaremos las salidas descriptivas ya que estas se repiten en cada corrida.

result <- mvn(data = setosa, mvnTest = "royston", univariateTest = "CVM", desc = TRUE)
result
## $multivariateNormality
##      Test        H      p value MVN
## 1 Royston 31.51803 2.187653e-06  NO
## 
## $univariateNormality
##               Test     Variable Statistic   p value Normality
## 1 Cramer-von Mises Sepal.Length    0.0718  0.2597      YES   
## 2 Cramer-von Mises Sepal.Width     0.0754  0.2324      YES   
## 3 Cramer-von Mises Petal.Length    0.1897  0.0069      NO    
## 4 Cramer-von Mises Petal.Width     0.9769  <0.001      NO    
## 
## $Descriptives
##               n  Mean   Std.Dev Median Min Max 25th  75th       Skew   Kurtosis
## Sepal.Length 50 5.006 0.3524897    5.0 4.3 5.8  4.8 5.200 0.11297784 -0.4508724
## Sepal.Width  50 3.428 0.3790644    3.4 2.3 4.4  3.2 3.675 0.03872946  0.5959507
## Petal.Length 50 1.462 0.1736640    1.5 1.0 1.9  1.4 1.575 0.10009538  0.6539303
## Petal.Width  50 0.246 0.1053856    0.2 0.1 0.6  0.2 0.300 1.17963278  1.2587179

  1. Test de Lilliefors (correccion de Kolmogorov)

El test de Kolmogorov-Smirnov permite estudiar si una muestra procede de una población con una determinada distribución (media y desviación típica), no está limitado únicamente a la distribución normal. A pesar de que continuamente se alude al test Kolmogorov-Smirnov como un test válido para contrastar la normalidad, esto no es del todo cierto. El Kolmogorov-Smirnov asume que se conoce la media y varianza poblacional, lo que en la mayoría de los casos no es posible. Esto hace que el test sea muy conservador y poco potente. Para solventar este problema, se desarrolló una modificación del Kolmogorov-Smirnov conocida como test Lilliefors. El test Lilliefors asume que la media y varianza son desconocidas, estando especialmente desarrollado para contrastar la normalidad. Es la alternativa al test de Shapiro-Wilk cuando el número de observaciones es mayor de 50.

result <- mvn(data = setosa, mvnTest = "royston", univariateTest = "Lillie", desc = TRUE)
result
## $multivariateNormality
##      Test        H      p value MVN
## 1 Royston 31.51803 2.187653e-06  NO
## 
## $univariateNormality
##                              Test     Variable Statistic   p value Normality
## 1 Lilliefors (Kolmogorov-Smirnov) Sepal.Length    0.1149  0.0969      YES   
## 2 Lilliefors (Kolmogorov-Smirnov) Sepal.Width     0.1047  0.1863      YES   
## 3 Lilliefors (Kolmogorov-Smirnov) Petal.Length    0.1534  0.0049      NO    
## 4 Lilliefors (Kolmogorov-Smirnov) Petal.Width     0.3488  <0.001      NO    
## 
## $Descriptives
##               n  Mean   Std.Dev Median Min Max 25th  75th       Skew   Kurtosis
## Sepal.Length 50 5.006 0.3524897    5.0 4.3 5.8  4.8 5.200 0.11297784 -0.4508724
## Sepal.Width  50 3.428 0.3790644    3.4 2.3 4.4  3.2 3.675 0.03872946  0.5959507
## Petal.Length 50 1.462 0.1736640    1.5 1.0 1.9  1.4 1.575 0.10009538  0.6539303
## Petal.Width  50 0.246 0.1053856    0.2 0.1 0.6  0.2 0.300 1.17963278  1.2587179

  1. Test de Shapiro Francia

result <- mvn(data = setosa, mvnTest = "royston", univariateTest = "SF", desc = TRUE)
result
## $multivariateNormality
##      Test        H      p value MVN
## 1 Royston 31.51803 2.187653e-06  NO
## 
## $univariateNormality
##              Test     Variable Statistic   p value Normality
## 1 Shapiro-Francia Sepal.Length    0.9817  0.5357      YES   
## 2 Shapiro-Francia Sepal.Width     0.9641  0.1181      YES   
## 3 Shapiro-Francia Petal.Length    0.9490  0.0324      NO    
## 4 Shapiro-Francia Petal.Width     0.7952  <0.001      NO    
## 
## $Descriptives
##               n  Mean   Std.Dev Median Min Max 25th  75th       Skew   Kurtosis
## Sepal.Length 50 5.006 0.3524897    5.0 4.3 5.8  4.8 5.200 0.11297784 -0.4508724
## Sepal.Width  50 3.428 0.3790644    3.4 2.3 4.4  3.2 3.675 0.03872946  0.5959507
## Petal.Length 50 1.462 0.1736640    1.5 1.0 1.9  1.4 1.575 0.10009538  0.6539303
## Petal.Width  50 0.246 0.1053856    0.2 0.1 0.6  0.2 0.300 1.17963278  1.2587179

  1. Test de Anderson Darling

result <- mvn(data = setosa, mvnTest = "royston", univariateTest = "AD", desc = TRUE)
result
## $multivariateNormality
##      Test        H      p value MVN
## 1 Royston 31.51803 2.187653e-06  NO
## 
## $univariateNormality
##               Test     Variable Statistic   p value Normality
## 1 Anderson-Darling Sepal.Length    0.4080  0.3352      YES   
## 2 Anderson-Darling Sepal.Width     0.4910  0.2102      YES   
## 3 Anderson-Darling Petal.Length    1.0073  0.0108      NO    
## 4 Anderson-Darling Petal.Width     4.7148  <0.001      NO    
## 
## $Descriptives
##               n  Mean   Std.Dev Median Min Max 25th  75th       Skew   Kurtosis
## Sepal.Length 50 5.006 0.3524897    5.0 4.3 5.8  4.8 5.200 0.11297784 -0.4508724
## Sepal.Width  50 3.428 0.3790644    3.4 2.3 4.4  3.2 3.675 0.03872946  0.5959507
## Petal.Length 50 1.462 0.1736640    1.5 1.0 1.9  1.4 1.575 0.10009538  0.6539303
## Petal.Width  50 0.246 0.1053856    0.2 0.1 0.6  0.2 0.300 1.17963278  1.2587179

También podemos obtener solo pruebas de normalidad multivariante

6. Test de normalidad multivariante

Para simplificar, tomemos un subconjunto del paquete de datos iris que contiene 50 muestras de flores setosa y verifiquemos la suposición de normalidad multivariada utilizando las pruebas de Mardia, Royston, Henze-Zirkler y Energy test que se encuentran dentro del paquete MVN.

# tomando el subconjunto de datos setosa 
setosa <- iris[1:50, 1:4] # primeros 50 datos, primeras 4 variables
head(setosa)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1          5.1         3.5          1.4         0.2
## 2          4.9         3.0          1.4         0.2
## 3          4.7         3.2          1.3         0.2
## 4          4.6         3.1          1.5         0.2
## 5          5.0         3.6          1.4         0.2
## 6          5.4         3.9          1.7         0.4

6.1 Prueba de Mardia con MVN.

El argumento mvnTest = “mardia” en la función mvn se usa para calcular los coeficientes de asimetría multivariado y curtosis de Mardia, así como su significación estadística correspondiente. Esta función también puede calcular la versión corregida del coeficiente de asimetría para el tamaño de muestra pequeño (n <20).

# test de normalidad
# test de Mardia en MVN
result <- mvn(data = setosa, mvnTest = "mardia")
result$multivariateNormality
##              Test        Statistic           p value Result
## 1 Mardia Skewness 25.6643445196298 0.177185884467652    YES
## 2 Mardia Kurtosis 1.29499223711605 0.195322907441935    YES
## 3             MVN             <NA>              <NA>    YES

Si ambas pruebas indican una normalidad multivariante, los datos siguen una distribución normal multivariada con un nivel de significación de 0.05, como es el caso del ejemplo: Skewness: p(0.177)>α(0.05) y Kurtosis: p(0.1953)>α(0.05)

6.2 Test Henze-Zirkler con MVN

Se puede usar mvnTest = “hz” en la función mvn para realizar la prueba de Henze-Zirkler.

# Henze-Zirkler's MVN test
result <- mvn(data = setosa, mvnTest = "hz")
result$multivariateNormality
##            Test        HZ    p value MVN
## 1 Henze-Zirkler 0.9488453 0.04995356  NO

La última columna indica que los datos NO siguen una normalidad multivariada al nivel 5% de significación. p(0.04995)<α(0.05)

6.3 Test Royston con MVN

Para llevar a cabo la prueba de Royston, establezca el argumento mvnTest = “royston” en la función mvn de la siguiente manera:

# Royston's MVN test
result <- mvn(data = setosa, mvnTest = "royston")
result$multivariateNormality
##      Test        H      p value MVN
## 1 Royston 31.51803 2.187653e-06  NO

La última columna indica que los datos NO siguen una normalidad multivariada al 5% de significancia. p(0.00000218)<α(0.05). NOTA: No aplique la prueba de Royston, si el conjunto de datos incluye más de 5000 casos o menos de 3 casos, ya que depende de la prueba de Shapiro-Wilk.

6.4 Test de Doornik-Hansen con MVN

Para llevar a cabo la prueba de Doornik-Hansen, establezca el argumento mvnTest = “dh” en la función mvn de la siguiente manera:

# Doornik-Hansen's MVN test
result <- mvn(data = setosa, mvnTest = "dh")
result$multivariateNormality
##             Test        E df      p value MVN
## 1 Doornik-Hansen 126.5584  8 1.460761e-23  NO

La última columna que el conjunto de datos NO sigue una normalidad multivariada en el nivel de significación 0.05. p(0.00000)<α(0.05)

6.5 Energy test

Para llevar a cabo la prueba de Doornik-Hansen, establezca el argumento mvnTest = “energía” en la función mvn de la siguiente manera:

# Energy test
result <- mvn(data = setosa, mvnTest = "energy")
result$multivariateNormality
##          Test Statistic p value MVN
## 1 E-statistic  1.203397   0.029  NO

La última columna indica que el conjunto de datos NO sigue una normalidad multivariada en el nivel de significación 0.05. p(0.033)<α(0.05). Como ya lo hemos descrito la variable Petal.With no tiende a la normal, excluyamos esta variable:

6.6 Normalidad excluyendo la variable Petal.With

Ahora podemos excluir Petal.With de los datos setosa y volver a verificar la normalidad multivariable.

setosa1 <- iris[1:50, 1:3] # primeros 50 datos, primeras 3 variables
head (setosa1) # solo la data setosa
##   Sepal.Length Sepal.Width Petal.Length
## 1          5.1         3.5          1.4
## 2          4.9         3.0          1.4
## 3          4.7         3.2          1.3
## 4          4.6         3.1          1.5
## 5          5.0         3.6          1.4
## 6          5.4         3.9          1.7
# prueba MVN de Mardia
result <- mvn(data = setosa1, mvnTest = "mardia")
result$multivariateNormality
##              Test        Statistic           p value Result
## 1 Mardia Skewness 11.2494200312663 0.338419002210318    YES
## 2 Mardia Kurtosis 1.28731356507177 0.197985017332943    YES
## 3             MVN             <NA>              <NA>    YES
# Henze-Zirkler's MVN test
result <- mvn(data = setosa1, mvnTest = "hz")
result$multivariateNormality
##            Test        HZ   p value MVN
## 1 Henze-Zirkler 0.5243923 0.8310472 YES
# Royston's MVN test
result <- mvn(data = setosa1, mvnTest = "royston")
result$multivariateNormality
##      Test        H    p value MVN
## 1 Royston 7.254588 0.06025685 YES
# Doornik-Hansen's MVN test
result <- mvn(data = setosa1, mvnTest = "dh")
result$multivariateNormality
##             Test        E df      p value MVN
## 1 Doornik-Hansen 64.97364  6 4.367761e-12  NO
# Energy test
result <- mvn(data = setosa1, mvnTest = "energy")
result$multivariateNormality
##          Test Statistic p value MVN
## 1 E-statistic 0.7856238   0.629 YES

De acuerdo con los resultados de la prueba MVN la data setosa sin Petal.Width tiene una distribución normal multivariada a un nivel de significación de 0.05 (excepto con la prueba Doornik-Hansen).

7. Gráficas de perspectiva y contorno para datos bivariados

Si bien la gráfica Q-Q es un enfoque general para evaluar la MVN en todos los tipos de conjuntos de datos numéricos multivariados, las gráficas de perspectiva y contorno solo se pueden usar para datos bivariados. Para demostrar la aplicabilidad de estos dos enfoques, utilizaremos un subconjunto de datos de Iris, llamado setosa2, que incluye las variables longitud del sépalo y ancho de sépalo de la especie setosa.

Perspectiva y gráficos de contorno

Las densidades marginales normales univariadas son una condición necesaria pero no suficiente para la MVN. Por lo tanto, además de las representaciones univariadas, será útil crear gráficos de perspectiva y contorno. El diagrama de perspectiva es una extensión de la curva de distribución de probabilidad univariada en una superficie de distribución de probabilidad tridimensional relacionada con distribuciones bivariadas. También proporciona información sobre dónde se recopilan los datos y cómo se correlacionan dos variables entre sí. Consiste en tres dimensiones donde dos dimensiones se refieren a los valores de las dos variables y la tercera dimensión, que es probable en casos univariables, es el valor de la función de densidad de probabilidad normal multivariable. Otro gráfico alternativo, que se llama la “gráfica de contorno”, implica la proyección de la gráfica de perspectiva en un espacio bidimensional y esto puede usarse para verificar la suposición de normalidad multivariado. Para datos distribuidos normalmente bivariados, esperamos obtener un gráfico en forma de campana tridimensional a partir de la gráfica de perspectiva. Del mismo modo, en la gráfica de contorno, podemos observar un patrón similar. Para construir una perspectiva y un diagrama de contorno, podemos usar el argumento MultivariatePlot en la función mvn. En los siguientes códigos, usamos multivariatePlot = “persp” para crear un gráfico de perspectiva. También es posible crear un gráfico de contorno de los datos. Los gráficos de contorno son muy útiles ya que brindan información sobre la normalidad y la correlación al mismo tiempo. La Figura tambien muestra la gráfica de contorno de las flores de setosa, cuando establecemos multivariatePlot = “contour”. Como se puede ver en el gráfico, esto es simplemente una vista superior de la gráfica de perspectiva donde la tercera dimensión se representa con líneas de contorno elipsoidales. A partir de este gráfico, podemos decir que existe una correlación positiva entre las medidas de los sépalos de las flores ya que las líneas de contorno se encuentran alrededor de la diagonal principal. Si la correlación fuera cero, las líneas de contorno serían circulares en lugar de elipsoidales.

# Graficos de perspectiva y contorno para datos bivariados 
setosa2 <- iris[1:50, 1:2]
head(setosa2)
##   Sepal.Length Sepal.Width
## 1          5.1         3.5
## 2          4.9         3.0
## 3          4.7         3.2
## 4          4.6         3.1
## 5          5.0         3.6
## 6          5.4         3.9
# perspective plot 
result <- mvn(setosa2, mvnTest = "hz", multivariatePlot = "persp")

# contour plot
result <- mvn(setosa2, mvnTest = "hz", multivariatePlot = "contour")

Figure 4: grafico de perspectiva y contorno para la data setosa2

8. Valores atípicos multivariantes (Multivariate outliers)

Los valores atípicos multivariados son la razón común para violar la suposición de MVN. En otras palabras, la suposición de MVN requiere la ausencia de valores atípicos multivariados. Por lo tanto, es crucial verificar si los datos tienen valores atípicos multivariantes, antes de comenzar con el análisis multivariado. La MVN incluye dos métodos de detección de valores atípicos multivariados que se basan en distancias robustas de Mahalanobis (rMD (x)). La distancia de Mahalanobis es una métrica que calcula qué tan lejos está cada observación del centro de distribución de la articulación, que se puede considerar como el centroide en el espacio multivariable. Las distancias robustas se estiman a partir de estimadores determinantes de covarianza mínima en lugar de la covarianza de la muestra [7]. Estos dos enfoques, definidos como la distancia Mahalanobis y la distancia Mahalanobis ajustada en el paquete, detectan valores atípicos multivariados como se indica a continuación,

Distancia Mahalanobis:

  1. Calcule distancias robustas de Mahalanobis (rMD (xi)),

  2. Calcule el cuantil del 97.5 por ciento (Q) de la distribución de chi-cuadrado,

  3. Declare rMD (xi)> Q como posible valor atípico.

Distancia ajustada de Mahalanobis:

  1. Calcule distancias robustas de Mahalanobis (rMD (xi)),

  2. Calcule el cuantil ajustado de 97.5 por ciento (AQ) de la distribución de chi-Cuadrado,

  3. Declare rMD (xi)> AQ como posible valor atípico.

El argumento multivariateOutlierMethod como “quan” para el método de cuantiles basado en la distancia de Mahalanobis y como “adj” para el método cuantil ajustado basado en la distancia de Mahalanobis para detectar valores atípicos multivariados como se indica a continuación. También devuelve un nuevo conjunto de datos en el que se eliminan los valores atípicos declarados. Además, este argumento crea gráficos Q-Q para la inspección visual de los posibles valores atípicos.

Para este ejemplo, usaremos otro subconjunto de los datos de Iris, que son flores versicolor, con las primeras tres variables.

# Valores atipicos multivariantes (Multivariate outliers)
versicolor <- iris[51:100, 1:3]
# Mahalanobis distance
result <- mvn(data = versicolor, mvnTest = "hz", multivariateOutlierMethod = "quan")

Figura 5. Detección de valores atípicos. Distancia de Mahalanobis

# Adjusted Mahalanobis distance
result <- mvn(data=versicolor,mvnTest="hz",multivariateOutlierMethod="adj")

Figura 6. Detección de valores atípicos. Distancia ajustad de Mahalanobis

De la Figura 5 y 6, la distancia de Mahalanobis declara 2 observaciones como valor atípico multivariado, mientras que la distancia Mahalanobis ajustada no declara ninguna. Ver [8] para más información sobre valores atípicos multivariados.

9. Análisis de subconjuntos

También se puede realizar un análisis de subgrupos utilizando la función mvn. Vamos a usar todo el conjunto de datos Iris una vez más para este propósito.

En el conjunto de datos, hay una variable de grupo (Especies), que define la especie de la flor.

# Análisis de subconjuntos.
head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
result <- mvn(data = iris, subset = "Species", mvnTest = "hz") 
result$multivariateNormality
## $setosa
##            Test        HZ    p value MVN
## 1 Henze-Zirkler 0.9488453 0.04995356  NO
## 
## $versicolor
##            Test        HZ   p value MVN
## 1 Henze-Zirkler 0.8388009 0.2261991 YES
## 
## $virginica
##            Test        HZ   p value MVN
## 1 Henze-Zirkler 0.7570095 0.4970237 YES

De acuerdo con los resultados de la prueba de Henze-Zirkler, el conjunto de datos para setosa no sigue una distribución normal multivariada, mientras que el conjunto de datos versicolor y virginica siguen una distribución normal multivariante.

10. Interfaz web para el paquete MVN

El objetivo del paquete es proporcionar pruebas MVN junto con enfoques gráficos para evaluar MVN. Además, este paquete ofrece pruebas y gráficos univariados y detección de valores atípicos multivariados para verificar supuestos de MVN a través de R. Sin embargo, el uso de códigos R puede ser un desafío para los nuevos usuarios de R. Por lo tanto, también desarrollamos una aplicación web fácil de usar mediante el uso de shiny [9]. Esta herramienta web, que es una aplicación interactiva, tiene todas las características que tiene el paquete MVN. Está disponible públicamente a través de

http://www.biosoft.hacettepe.edu.tr/MVN/.

http://www.rstudio.com/shiny/

11. Normalidad para datos simples.

# normalidad para datos simples
# Ejemplo: verifique la normalidad para los siguientes datos:
# 12,13,12,13,1,2,34,45,46,57,45,23,22,22,13,46
# ingresando datos
a <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
b <- c(12,13,12,13,1,2,34,45,46,57,45,23,22,22,13,46)
data=data.frame(a,b)
data
##     a  b
## 1   1 12
## 2   2 13
## 3   3 12
## 4   4 13
## 5   5  1
## 6   6  2
## 7   7 34
## 8   8 45
## 9   9 46
## 10 10 57
## 11 11 45
## 12 12 23
## 13 13 22
## 14 14 22
## 15 15 13
## 16 16 46
boxplot(data$b)

Figura 7. Diagrama de cajas

hist(data$b)

Figura 8. histograma de frecuencias

shapiro.test(x = data$b) # Shapiro
## 
##  Shapiro-Wilk normality test
## 
## data:  data$b
## W = 0.90519, p-value = 0.09737
ks.test(x = data$b,"pnorm", mean(data$b), sd(data$b)) #Kolmogorov
## Warning in ks.test(x = data$b, "pnorm", mean(data$b), sd(data$b)): ties should
## not be present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  data$b
## D = 0.19568, p-value = 0.5725
## alternative hypothesis: two-sided
library("nortest")
lillie.test(x = data$b) # Lilliefors
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$b
## D = 0.19568, p-value = 0.104
library("tseries")
## Registered S3 method overwritten by 'xts':
##   method     from
##   as.zoo.xts zoo
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
jarque.bera.test(x = data$b) # Jarque vera
## 
##  Jarque Bera Test
## 
## data:  data$b
## X-squared = 1.2837, df = 2, p-value = 0.5263

12. Referencias Bibliograficas

[1] S Korkmaz, D Goksuluk, and G Zararsiz. Mvn: An r package for assessing multivariate normality. The R Journal, 6(2):151–162, 2014.

[2] R. A. Fisher. The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7(2):179–188, 1936. [3] Edgar Anderson. The species problem in Iris. Missouri Botanical Garden Press, 23(3):457–509, 1936.

[4] Tom Burdenski. Evaluating univariate, bivariate, and multivariate normality using graphical and statistical procedures. Multiple Linear Regression Viewpoints, 26(2):15–28, 2000.

[5] James P Stevens. Applied multivariate statistics for the social sciences. Routledge, 2012.

[6] Robert E Kass, Uri T Eden, and Emery N Brown. Analysis of Neural Data. Springer, 2014.

[7] P. J. Rousseeuw and A. M. Leroy. Robust Regression and Outlier Detection. John Wiley & Sons, Inc., New York, NY, USA, 1987.

[8] Peter Filzmoser, Robert G. Garrett, and Clemens Reimann. Multivariate outlier detection in exploration geochemistry. Computers & Geosciences, 31(5):579–587, 2005.

[9] RStudio, Inc. shiny: Web Application Framework for R, 2014. R package version 0.10.1.

[10] Selcuk Korkmaz1, Dincer Goksuluk and Gokmen Zararsiz. MVN: An R Package for Assessing Multivariate Normality. Trakya University, Faculty of Medicine, Department of Biostatistics, Edirne, TURKEY