Graficos para analizar la distribución de los datos

Gran parte de los modelos estadísticos consideran que las observaciones provienen de poblaciones normales. En muchas situaciones este supuesto no se cumple. A continuación se mencionan algunos gráficos utilizados para analizar la distribución de los datos, además de la detección de puntos atípicos.

En metrología los datos atípicos son llamados valores aberrantes, conocidos como las observaciones que se desvían significativamente de la tendencia general de los datos o que están considerablemente alejados de otros valores de la muestra. La detección y gestión de valores aberrantes es importante en metrología para garantizar la precisión y fiabilidad de las mediciones. Los valores aberrantes pueden sesgar los resultados del análisis y afectar la toma de decisiones basada en los datos.

Gráfico de densidad

Visualiza la distribución de datos en un intervalo continuo. Este gráfico es una variación de un histograma, donde el concepto de frecuencia relativa se cambia por el de probabilidad, la suma de todas la superficie será 1.

Los picos ayudan a mostrar dónde los valores se concentran en el intervalo, a su vez permite comparar la densidad de una variable continua en relación a los niveles de factor de una variable cualitativa.

Ejemplo

El acceso al agua potable es esencial para la salud, un derecho humano básico y un componente de una política eficaz de protección de la salud. Esto es importante como cuestión de salud y desarrollo a nivel nacional, regional y local. En algunas regiones, se ha demostrado que las inversiones en abastecimiento de agua y saneamiento pueden generar un beneficio económico neto, ya que las reducciones de los efectos adversos para la salud y los costos de atención médica superan los costos de llevar a cabo las intervenciones.

El PH es un parámetro importante para evaluar el equilibrio ácido-base del agua. La OMS ha recomendado un límite máximo permitido de pH de 6,5 a 8,5.

Se tienen los datos del ph del agua dependiendo de si el agua es potable o no, 632 datos de agua potable y 632 de agua no potable, se desea comparar su distribución.

library(ggplot2)

head(no)
## [1]  3.7  8.1  8.3  9.1  5.6 10.2
head(si)
## [1] 9.4 9.0 6.8 7.2 7.7 8.3
# datos 

par(mfrow=c(1,2))
tmp <- rbind(data.frame(origen = "no", dato = no), 
             data.frame(origen = "si", dato = si))
ggplot(tmp, aes(x =dato, fill = origen)) +
  geom_density(alpha = 0.3)

hist(no, xlab = "PH agua no potable", ylab = "Frecuencia", las=1, main = "", col = "gray")

hist(si, xlab = "PH agua potable", ylab = "Frecuencia", las=1, main = "", col = "gray")

Grafico cuantil cuantil

Los gráficos cuantil cuantil son una ayuda para explorar si un conjunto de datos proviene de una población con cierta distribución.

La función qqnorm sirve para explorar la normalidad de una muestra, generalmente va acompañada de una linea recta de referencia, que se estima con la función qqline.

La función qqplot sirve para crear el gráfico cuantil cuantil para cualquier distribución, requiere los cuantiles de la distribución candidata.

Ejemplo de los datos de agua potable

par(mfrow=c(1, 2))

qqnorm(y=si, main='PH agua potable', ylab='Cuantiles muestrales',
       xlab='Cuantiles teóricos', las=1)
qqline(y=si, col='blue', lwd=2, lty=2)

qqnorm(y=no, main='PH agua no potable', ylab='Cuantiles muestrales',
       xlab='Cuantiles teóricos', las=1)
qqline(y=no, col='blue', lwd=2, lty=2)

Boxplot

El boxplot es una herramienta de análisis que resalta las principales características de un conjunto de datos, los números usados para construirlo son:

  • Valor mínimo
  • Los cuartiles \(Q_1,Q_2,Q_3\)
  • Valor máximo

Cada sección contiene el 25% de los datos. La caja muestra la mitad de los datos, es decir el 50% de ellos, contiene la información entre el 3 cuartil y el primer cuartil.

  • Sirve para realizar comparaciones de una variable cuantitativa, en relación a los niveles de una variable cualitativa.

  • Es posible observar la dispersión de cada caja, mientras mas larga, más dispersión.

  • Permite observar puntos atípicos,los cuales no están contenidos dentro de la caja, ni en sus bigotes.

Ejemplo

construir un boxplot con los datos del ph del agua según su potabilidad, Qué infiere?

boxplot(no,si)
abline(h=6.5,col=2)
abline(h=8.5,col=2)

Pruebas de normalidad

La hipotesis nula y alternativa de normalidad son las siguientes:

\[H_0: \quad Los\quad datos\quad se\quad distribuyen \quad normal\]

\[H_1: \quad Los\quad datos\quad no \quad se\quad distribuyen \quad normal\] Existen diferentes pruebas para evaluar la normalidad, todas son de fácil implementación en R.

  • Prueba Shapiro-Wilk

En R se usa la función shapiro.test, se usa cuando la muestra es como máximo de tamaño 50. Es más potente que la prueba de K-S.

  • Prueba Anderson-Darling con la función ad.test del paquete nortest.

  • Prueba Cramer-von Mises con la función cvm.test del paquete nortest.

  • Prueba Lilliefors (Kolmogorov-Smirnov) con la función lillie.test del paquete nortest.

  • Prueba Pearson chi-square con la función pearson.test del paquete nortest.

  • Prueba Shapiro-Francia con la función sf.test del paquete nortest.

Ejemplo en R probando normalidad en los datos de potabilidad del agua

Para los datos del ph del agua, se desea probar mediante una prueba estadística si los datos se distribuyen de forma normal

shapiro.test(no)
## 
##  Shapiro-Wilk normality test
## 
## data:  no
## W = 0.99749, p-value = 0.4571
shapiro.test(si)
## 
##  Shapiro-Wilk normality test
## 
## data:  si
## W = 0.9852, p-value = 5.12e-06

Otro Ejemplo en R

Se necesita verificar si es correcto suponer que el volumen de llenado (en onzas) de una máquina dispensadora de jugos sigue una distribución normal, por lo que se toman 25 botellas de forma aleatoria. Los datos del volumen de llenado obtenidos de la muestra se encuentran almacenados en el vector volumen.

Hipótesis

\(H_0:\) el volumen de llenado (en onzas) sigue una distribución normal.

\(H_1:\) el volumen de llenado (en onzas) no sigue una distribución normal.

Nivel de significancia: 0.05 (Hipotético).

Analisis descriptivo

library(nortest)
volumen <-c(8.39,12.14,11.80,12.04,7.34,12.62,11.51,12.47,11.08,14.32,11.33,11.56, 12.79,11.72,12.84,11.73,12.1,11.88,11.95,10.84,11.79,13.21,12.56,12.55,12.80)

mean(volumen)
## [1] 11.8144
sd(volumen)
## [1] 1.4036
require(car)
## Loading required package: car
## Loading required package: carData
library(MASS)
par(mfrow=c(1,4))
hist(volumen, xlab = "Volumen de llenado", ylab = "Frecuencia", las=1, main = "", col = "gray")

plot(density(volumen), xlab = "Volumen de llenado", ylab = "Densidad", las=1, main = "")

qqPlot(volumen, xlab="Cuantiles teóricos", ylab="Cuantiles muestrales", las=1,main="")
## [1] 5 1
boxplot(volumen)

ks.test(volumen, "pnorm", mean =11.81, sd=1.4)
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  volumen
## D = 0.21516, p-value = 0.1703
## alternative hypothesis: two-sided
shapiro.test(volumen)
## 
##  Shapiro-Wilk normality test
## 
## data:  volumen
## W = 0.8161, p-value = 0.0004272
ad.test(volumen)
## 
##  Anderson-Darling normality test
## 
## data:  volumen
## A = 1.6505, p-value = 0.0002268
cvm.test(volumen)
## 
##  Cramer-von Mises normality test
## 
## data:  volumen
## W = 0.27431, p-value = 0.0005727
sf.test(volumen)
## 
##  Shapiro-Francia normality test
## 
## data:  volumen
## W = 0.79487, p-value = 0.0004128

Pruebas de bondad de ajuste para otras distribuciones

Una alternativa a la no normalidad de los datos, es proceder a implementar pruebas no paramétricas, para evaluar si los datos se ajustan a una distribución hipotética.

Test de Kolmogorov-Smirnov K-S

Se emplea para saber si una distribución de probabilidad acumulada difiere de una distribución hipotética, por lo general la distribución normal, la uniforme, la de Poisson o la exponencial. Es decir permite contrastar si un conjunto de datos muestrales proviene de un tipo de distribución.

Estadístico

Cuando K-S se aplica para contrastar la hipótesis de normalidad de la población, el estadístico de prueba es la máxima diferencia entre las funciones de distribución de probabilidad muestral y la teórica:

\[D=max|F_n-F_0(x)|\]

Siendo \(F_n(x)\) la función de distribución muestral y \(F_0(x)\) es la función teórica (normal) especificada en la hipotesis nula \(H_0\)

Pruebas de hipótesis

\(H_0:\) Los datos analizados siguen una distribución M.

\(H_1:\) Los datos analizados no siguen una distribución M

Ejemplo probando la distribución exponencial

Celia quiere medir el tiempo de atención a los usuarios. Se seleccionaron 20 personas y los tiempos de atención en minutos.

require(car)
tiempo<-c(3.69, 39.50,  4.43,  2.70,  9.11, 10.21, 10.44,  2.57,  5.68,  0.80,
          12.63,  2.35, 25.47, 8.07,  0.96,  0.21, 12.06, 10.79,  6.58, 13.06)

par(mfrow=c(1,4))
hist(tiempo, xlab = "Tiempo", ylab = "Frecuencia", las=1, main = "", col = "gray")
qqPlot(tiempo, col = "gray", ylab="Tiempo")
## [1]  2 13
plot(density(tiempo), xlab = "Tiempo", ylab = "Densidad", las=1, main = "")
boxplot(tiempo, xlab = "Tiempo", ylab = "Densidad", las=1, main = "")

Se procede a revisar el ajuste con respecto a una distribución exponencial con un α=0.05

Sea X el tiempo entre llegadas a Celia Express.

\[H_0:X∼exp\]

\[H_1:X≁exp\] la siguiente función ayuda a estimar los parámetros del modelo

library(MASS)
Ajustex <- fitdistr(tiempo,"exponential")
Ajustex
##       rate   
##   0.11030831 
##  (0.02466569)
Ks<- ks.test(tiempo, "pexp", rate=Ajustex$estimate[1])
Ks
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  tiempo
## D = 0.13678, p-value = 0.8006
## alternative hypothesis: two-sided

Según las pruebas realizadas, no se rechaza la hipótesis nula y por tanto, se asume la distribución exponencial.

Ejemplo comparando dos distribuciones Se desea saber si los datos de potabilidad de agua (potable y no potable) siguen la misma distribución de probabilidad.

\[H_0:X_{si}∼X_{no}\]

\[H_1:X_{si}≁X_{no}\]

par(mfrow=c(1,2))
hist(si)
hist(no)

ks.test(si, no)
## Warning in ks.test(si, no): p-value will be approximate in the presence of ties
## 
##  Two-sample Kolmogorov-Smirnov test
## 
## data:  si and no
## D = 0.058544, p-value = 0.2289
## alternative hypothesis: two-sided

Prueba chi cuadrado

Esta prueba tiene diferentes usos, entre los principales se encuentran

1. Prueba de independencia

Dos variables aleatorias X e Y son llamadas independientes si la distribución de probabilidad de una de las variables no es afectada por la presencia de la otra. Asuma que \(Oij\) es la frecuencia observada de eventos que pertenecen a ambos, la i−ésima categoría de X y la j−ésima categoría de Y. Además, suponga que \(e_{ij}\) son las correspondientes frecuencias esperadas si X e Y son independientes.

Prueba de hipótesis

\[H_0: \quad Los\quad datos\quad son \quad independientes\]

\[H_1: \quad Los\quad datos\quad no \quad son \quad independientes\]

Estadístico:

\[ \large \chi^2=\sum_{i,j}^n \frac {(o_{ij}-e_{ij})^2}{e_{ij}}\]

Ejemplo en R:

Se usan los datos de la base survey de la librería MASS de R, que corresponden a 237 observaciones provenientes de una encuesta a estudiantes de estadística de una Universidad en Australia.

  1. Valide la hipótesis de si el hábito de fumar es independiente del nivel de ejercicios de los estudiantes usando un nivel de significancia del 0.05.
## Para inst lar librerías use

# install.packages("MASS")

## Para llamar la librería
library(MASS)
library(DT)

##la base de datos total corresponde a 
DT::datatable(survey, filter = 'top', 
              options = list(pageLength = 5, autoWidth = TRUE ))
## Para obtener un resumen de los datos

summary(survey)
##      Sex          Wr.Hnd          NW.Hnd        W.Hnd          Fold    
##  Female:118   Min.   :13.00   Min.   :12.50   Left : 18   L on R : 99  
##  Male  :118   1st Qu.:17.50   1st Qu.:17.50   Right:218   Neither: 18  
##  NA's  :  1   Median :18.50   Median :18.50   NA's :  1   R on L :120  
##               Mean   :18.67   Mean   :18.58                            
##               3rd Qu.:19.80   3rd Qu.:19.73                            
##               Max.   :23.20   Max.   :23.50                            
##               NA's   :1       NA's   :1                                
##      Pulse             Clap       Exer       Smoke         Height     
##  Min.   : 35.00   Left   : 39   Freq:115   Heavy: 11   Min.   :150.0  
##  1st Qu.: 66.00   Neither: 50   None: 24   Never:189   1st Qu.:165.0  
##  Median : 72.50   Right  :147   Some: 98   Occas: 19   Median :171.0  
##  Mean   : 74.15   NA's   :  1              Regul: 17   Mean   :172.4  
##  3rd Qu.: 80.00                            NA's :  1   3rd Qu.:180.0  
##  Max.   :104.00                                        Max.   :200.0  
##  NA's   :45                                            NA's   :28     
##        M.I           Age       
##  Imperial: 68   Min.   :16.75  
##  Metric  :141   1st Qu.:17.67  
##  NA's    : 28   Median :18.58  
##                 Mean   :20.37  
##                 3rd Qu.:20.17  
##                 Max.   :73.00  
## 
## se usan las variables
## FUMA (Smoke) con los niveles: Heavy, Regul, Occas y Never 
## EJERCICIO (Exer) con los niveles: Freq, Some, y None
##se tabulan

tbl=table(survey$Smoke,survey$Exer)
tbl
##        
##         Freq None Some
##   Heavy    7    1    3
##   Never   87   18   84
##   Occas   12    3    4
##   Regul    9    1    7
chisq.test(tbl)
## Warning in chisq.test(tbl): Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  tbl
## X-squared = 5.4885, df = 6, p-value = 0.4828
#Note que aparece un mensaje de alerta. Esto es debido a que en algunas celdas las
#frecuencias son muy pequeñas. Podemos solucionar esto agrupando algunas columnas.

ctbl = cbind(tbl[,"Freq"], tbl[,"None"] + tbl[,"Some"])
ctbl
##       [,1] [,2]
## Heavy    7    4
## Never   87  102
## Occas   12    7
## Regul    9    8
chisq.test(ctbl)
## 
##  Pearson's Chi-squared test
## 
## data:  ctbl
## X-squared = 3.2328, df = 3, p-value = 0.3571

2. Prueba de bondad de ajuste

Se utiliza para determinar si una variable categórica sigue o no una distribución hipotética.

Para estimar los parámetros de una distribución de probabilidad discreta (poisson y binomial), se requiere la función goodfit del paquete vcd. Esta función también realiza la prueba de bondad de ajuste y sus argumentos son: variable de interés, tipo de distribución y método. Se usará el test de Chi-cuadradado a través del argumento “MinChisq”

Ejemplo En un supermercado se está estudiando el comportamiento del número de personas que llegan cada hora. Se analizaron 20 horas, cuyos datos se consignan a continuación:

Análisis exploratorio Se analiza los gráficos para determinar una distribución hipotética.

personas<-c(13, 14, 14, 19, 17, 14, 13,  9, 16, 16,13, 13, 15, 13,  7, 14, 14, 13, 20, 15)

par(mfrow=c(1,2))
hist(personas, xlab = "personas", ylab = "Frecuencia", las=1, main = "", col = "gray")
plot(density(personas), xlab = "personas", ylab = "Densidad", las=1, main = "")

En este caso, la variable de interés registra un número de eventos por unidad de tiempo, por lo que se sugiere analizar el ajuste a una distribución poisson. Se muestra la respectiva prueba de hipótesis. Sea X el número de clientes que visitan Celia Express.

\(H_0:\)X∼Poisson

\(H_1:\)X≁Poisson

Se realizará el análisis con un α=0.01

require(vcd)
## Loading required package: vcd
## Loading required package: grid
gf<-goodfit(personas, type = "poisson", method = "MinChisq")
gf$par
## $lambda
## [1] 13.60833
summary(gf)
## Warning in summary.goodfit(gf): Chi-squared approximation may be incorrect
## 
##   Goodness-of-fit test for poisson distribution
## 
##              X^2 df  P(> X^2)
## Pearson 19.30042 19 0.4377217

3. Comparación de distribuciones

Retomando el ejemplo de el ph de agua potable y no potable

\(H_0:X_{si}∼y_{no}\)

\(H_1:X_{si}≁y_{no}\)

chisq.test(no,si)
## Warning in chisq.test(no, si): Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  no and si
## X-squared = 6298.3, df = 6318, p-value = 0.5672

Ejemplo en R

Se mide las concentraciones de cortisol en dos grupos de mujeres antes de dar a luz. Al grupo 1 se le practicó una cesárea de urgencias después de inducido el parto. Las del grupo 2, dieron a luz mediante operación cesárea o vía vaginal después de presentarse el trabajo de parto expontáneamente.

  1. Realice un analisis grafico para detectar si hay normalidad

2.Verifique normalidad en los conjuntos de datos usando α = 0.05.

4.Compruebe que ambos grupos de datos provienen de la misma distribución de probabilidad

\[H_0:grupo1∼grupo2\]

\[H_1:grupo1≁grupo2\]

###Ingresamos los datos como vectores de los dos grupos de madres

grupo1=c(411,466,432,409,381,363,449,483,438,381)
grupo2=c(584,553,516,688,650,590,574,700,831,688,478,689)         

boxplot(grupo1,grupo2)

## Prueba de normalidad
shapiro.test(grupo1)
## 
##  Shapiro-Wilk normality test
## 
## data:  grupo1
## W = 0.96658, p-value = 0.8575
shapiro.test(grupo2)
## 
##  Shapiro-Wilk normality test
## 
## data:  grupo2
## W = 0.95245, p-value = 0.673
#prueba para saber si provienen de la misma distribución 
ks.test(grupo1,grupo2)
## Warning in ks.test(grupo1, grupo2): cannot compute exact p-value with ties
## 
##  Two-sample Kolmogorov-Smirnov test
## 
## data:  grupo1 and grupo2
## D = 0.91667, p-value = 0.0002089
## alternative hypothesis: two-sided
## Prueba de igualdad entre varinzas
var.test(grupo1,grupo2)
## 
##  F test to compare two variances
## 
## data:  grupo1 and grupo2
## F = 0.16182, num df = 9, denom df = 11, p-value = 0.0108
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.04510143 0.63304938
## sample estimates:
## ratio of variances 
##          0.1618194
## prueba de diferencias entre medias
t.test (grupo1,grupo2,paired=FALSE,conf.level=0.95)
## 
##  Welch Two Sample t-test
## 
## data:  grupo1 and grupo2
## t = -6.7277, df = 14.996, p-value = 6.787e-06
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -272.7363 -141.4970
## sample estimates:
## mean of x mean of y 
##  421.3000  628.4167

Prueba no paramétrica para la diferencias entre dos poblaciones

Prueba de Mann-Whitney

  • Es una prueba no paramétrica para identificar diferencias entre dos poblaciones basadas en el análisis de dos muestras independientes.

  • Se usa cuando los conjuntos de datos no cumplen los requisitos de la prueba de t-Student y la normal, (normalidad de los datos y tamaño de muestra mayor a 30)

  • Para realizar la prueba las observaciones de las dos muestras deben estar en orden ascendente.

  • También se conoce con otros nombres: Mann–Whitney–Wilcoxon, Wilcoxon rank-sum test y Wilcoxon–Mann–Whitney. Por ello está disponible en R por medio de la función wilcox.test.

  • La prueba se basa en una comparación de cada observación de una muestra \(x_i\) con cada observación en la segunda muestra \(y_i\) Si las muestras tienen la misma mediana, entones cada observación tiene un 50% de probabilidad de ser mayor o menor que la observación correspondiente de la otra muestra. Por tanto plantea las hipotesis:

\[H_o:P(x_i>y_i)=0.5\] \[H_1: P(x_i>y_i) \neq 0.5\]

Ejemplo Prueba de wilcoxon en R

Los datos siguientes datos corresponden a constantes de permeabilidad de la membrana chorioamnion en humanos (una membrana placentaria) medida a las 12 y 26 semanas de edad gestacional.

  1. Realice un analisis descriptivo para verificar la normalidad en los conjuntos de datos
require(car)
library(nortest)

c12=c(0.80, 0.83, 1.89, 1.04, 1.45, 1.38, 1.91, 1.64, 0.73, 1.46)
c26=c(1.15, 0.88, 0.90, 0.74, 1.21)

# Para la constante a las 12 semanas

par(mfrow=c(1,4))
hist(c12, xlab = "Tiempo", ylab = "Frecuencia", las=1, main = "", col = "gray")
qqPlot(c12, col = "gray", ylab="Tiempo")
## [1] 7 9
plot(density(c12), xlab = "Tiempo", ylab = "Densidad", las=1, main = "")
boxplot(c12,c26, xlab = "Tiempo", ylab = "Densidad", las=1, main = "")

# Para la constante a las 26 semanas

par(mfrow=c(1,4))
hist(c26, xlab = "Tiempo", ylab = "Frecuencia", las=1, main = "", col = "gray")
qqPlot(c26, col = "gray", ylab="Tiempo")
## [1] 4 5
plot(density(c26), xlab = "Tiempo", ylab = "Densidad", las=1, main = "")
boxplot(c12,c26, xlab = "Tiempo", ylab = "Densidad", las=1, main = "")

  1. Pruebe mediante un juego de hipotesis y mediante la prueba de shapiro wilk, la normalidad del conjunto de datos
library(nortest)

##PRUEBA DE NORMALIDAD
shapiro.test(c12)
## 
##  Shapiro-Wilk normality test
## 
## data:  c12
## W = 0.91129, p-value = 0.29
shapiro.test(c26)
## 
##  Shapiro-Wilk normality test
## 
## data:  c26
## W = 0.91538, p-value = 0.5006
  1. Pruebe la igualdad entre el conjunto de datos
#prueba para saber si provienen de la misma distribución 
ks.test(c12,c26)
## 
##  Two-sample Kolmogorov-Smirnov test
## 
## data:  c12 and c26
## D = 0.6, p-value = 0.1658
## alternative hypothesis: two-sided


Copyright © 2019, webpage made with Rmarkdown.