En el capítulo anterior explicamos sobre la distribución de las probabilidades discretas, en este capítulo hablaremos de la distribución de probabilidades continuas, y nos centraremos en las distribuciones normales.
La distribución normal es aquella distribución simétrica que presenta una una variable aleatroia continua cuya gráfica tiene forma de campana y puede ser descrita mediante la siguiente fórmula: $$ \[\begin{equation} y= \frac{e^{-\frac{1}{2}(\frac{x-\mu}{\sigma})^2}}{\sigma \sqrt{2\pi}} \end{equation}\] $$
La distribución uniforme de una variable continua es aquella que presenta una probabilidad de ocurrencia homogénea a lo largo del rango de valores que puede adoptar la variable continuca. Su gráfica es un rectángulo.
En la base de datos de ejemplo
db <- read.delim(paste0(dirname(getwd()),"/chp4/data/curva de crecimiento final.txt"))
knitr::kable(
db,
caption = "Crecimiento bactriano"
)
| tiempo1 | reactor | tiempo2 | sp | Medio.BBM | Medio.BG.11 | Medio.F.2 |
|---|---|---|---|---|---|---|
| T:0 | reactor 1 | 12h | Chloridium | 819.222 | 554.778 | 554.778 |
| T:1 | reactor 1 | 12h | Chloridium | 1567.000 | 1248.222 | 1393.667 |
| T:2 | reactor 1 | 12h | Chloridium | 2093.667 | 3505.889 | 2392.556 |
| T:3 | reactor 1 | 12h | Chloridium | 2585.889 | 1912.556 | 1965.889 |
| T:4 | reactor 1 | 12h | Chloridium | 4985.111 | 5916.222 | 17935.000 |
| T:5 | reactor 1 | 12h | Chloridium | 5217.667 | 1925.889 | 11873.889 |
| T:6 | reactor 1 | 12h | Chloridium | 6271.000 | 8968.333 | 25992.222 |
| T:0 | reactor 2 | 12h | Chloridium | 819.222 | 554.778 | 554.778 |
| T:1 | reactor 2 | 12h | Chloridium | 1830.333 | 3220.333 | 2024.778 |
| T:2 | reactor 2 | 12h | Chloridium | 2089.222 | 5934.000 | 3612.556 |
| T:3 | reactor 2 | 12h | Chloridium | 2997.000 | 5834.333 | 3595.889 |
| T:4 | reactor 2 | 12h | Chloridium | 6151.778 | 17168.667 | 8285.000 |
| T:5 | reactor 2 | 12h | Chloridium | 8496.111 | 7051.667 | 15636.667 |
| T:6 | reactor 2 | 12h | Chloridium | 10528.667 | 8602.000 | 25936.667 |
| T:0 | reactor 3 | 12h | Chloridium | 283.589 | 2232.556 | 5375.556 |
| T:1 | reactor 3 | 12h | Chloridium | 306.811 | 1661.444 | 6417.778 |
| T:2 | reactor 3 | 12h | Chloridium | 496.289 | 1584.778 | 5273.333 |
| T:3 | reactor 3 | 12h | Chloridium | 576.100 | 1681.444 | 9908.889 |
| T:4 | reactor 3 | 12h | Chloridium | 323.144 | 2172.556 | 5824.444 |
| T:5 | reactor 3 | 12h | Chloridium | 450.733 | 2953.667 | 5552.222 |
| T:6 | reactor 3 | 12h | Chloridium | 595.889 | 11412.778 | 56622.222 |
| T:0 | reactor 1 | 24h | Chloridium | 819.222 | 554.778 | 554.778 |
| T:1 | reactor 1 | 24h | Chloridium | 1875.667 | 1353.667 | 2635.889 |
| T:2 | reactor 1 | 24h | Chloridium | 3109.222 | 1749.222 | 5422.889 |
| T:3 | reactor 1 | 24h | Chloridium | 4505.111 | 2479.222 | 3489.222 |
| T:4 | reactor 1 | 24h | Chloridium | 9464.333 | 2300.333 | 33858.889 |
| T:5 | reactor 1 | 24h | Chloridium | 3453.667 | 7341.000 | 9794.333 |
| T:6 | reactor 1 | 24h | Chloridium | 7474.333 | 10235.333 | 23092.222 |
| T:0 | reactor 2 | 24h | Chloridium | 819.222 | 554.778 | 554.778 |
| T:1 | reactor 2 | 24h | Chloridium | 1327.000 | 2405.889 | 2437.000 |
| T:2 | reactor 2 | 24h | Chloridium | 2463.667 | 2137.000 | 3448.111 |
| T:3 | reactor 2 | 24h | Chloridium | 6618.444 | 5020.667 | 8435.000 |
| T:4 | reactor 2 | 24h | Chloridium | 14973.889 | 8794.333 | 9551.667 |
| T:5 | reactor 2 | 24h | Chloridium | 14846.111 | 8601.667 | 12146.111 |
| T:6 | reactor 2 | 24h | Chloridium | 28303.333 | 12158.889 | 11981.111 |
| T:0 | reactor 3 | 24h | Chloridium | 819.222 | 554.778 | 554.778 |
| T:1 | reactor 3 | 24h | Chloridium | 3709.556 | 3951.778 | 4911.778 |
| T:2 | reactor 3 | 24h | Chloridium | 6254.000 | 2577.000 | 8635.000 |
| T:3 | reactor 3 | 24h | Chloridium | 2853.667 | 3151.444 | 11729.444 |
| T:4 | reactor 3 | 24h | Chloridium | 2693.667 | 3391.444 | 14818.333 |
| T:5 | reactor 3 | 24h | Chloridium | 2381.444 | 3512.556 | 24025.556 |
| T:6 | reactor 3 | 24h | Chloridium | 4635.000 | 5757.667 | 29858.889 |
| T:0 | reactor 1 | 12h | Chlorella | 594.667 | 251.333 | 396.333 |
| T:1 | reactor 1 | 12h | Chlorella | 1313.000 | 1226.333 | 986.333 |
| T:2 | reactor 1 | 12h | Chlorella | 1624.667 | 2821.333 | 2593.000 |
| T:3 | reactor 1 | 12h | Chlorella | 2181.333 | 3606.333 | 4936.333 |
| T:4 | reactor 1 | 12h | Chlorella | 7664.000 | 6992.667 | 13039.000 |
| T:5 | reactor 1 | 12h | Chlorella | 4961.333 | 5392.667 | 11631.667 |
| T:6 | reactor 1 | 12h | Chlorella | 5909.333 | 18148.333 | 17948.000 |
| T:0 | reactor 2 | 12h | Chlorella | 594.667 | 251.333 | 396.333 |
| T:1 | reactor 2 | 12h | Chlorella | 1184.667 | 1156.333 | 1019.667 |
| T:2 | reactor 2 | 12h | Chlorella | 1489.667 | 1484.667 | 2738.000 |
| T:3 | reactor 2 | 12h | Chlorella | 9332.667 | 6936.000 | 11165.000 |
| T:4 | reactor 2 | 12h | Chlorella | 4451.333 | 12549.000 | 12399.000 |
| T:5 | reactor 2 | 12h | Chlorella | 3738.000 | 7684.000 | 11344.000 |
| T:6 | reactor 2 | 12h | Chlorella | 4534.667 | 15980.000 | 34163.333 |
| T:0 | reactor 3 | 12h | Chlorella | 594.667 | 251.333 | 396.333 |
| T:1 | reactor 3 | 12h | Chlorella | 7516.000 | 8336.000 | 11614.000 |
| T:2 | reactor 3 | 12h | Chlorella | 7886.000 | 11898.333 | 13540.000 |
| T:3 | reactor 3 | 12h | Chlorella | 3983.000 | 4429.667 | 16106.667 |
| T:4 | reactor 3 | 12h | Chlorella | 11899.000 | 20506.667 | 19681.667 |
| T:5 | reactor 3 | 12h | Chlorella | 12538.000 | 21598.000 | 31230.000 |
| T:6 | reactor 3 | 12h | Chlorella | 10330.000 | 16598.000 | 3898.000 |
| T:0 | reactor 1 | 24h | Chlorella | 594.667 | 298.000 | 401.333 |
| T:1 | reactor 1 | 24h | Chlorella | 1148.000 | 1069.667 | 1246.333 |
| T:2 | reactor 1 | 24h | Chlorella | 2514.667 | 2296.333 | 2026.333 |
| T:3 | reactor 1 | 24h | Chlorella | 5084.667 | 2736.333 | 3376.333 |
| T:4 | reactor 1 | 24h | Chlorella | 3311.333 | 17278.667 | 4916.333 |
| T:5 | reactor 1 | 24h | Chlorella | 4399.667 | 11669.000 | 5762.667 |
| T:6 | reactor 1 | 24h | Chlorella | 3686.333 | 30030.000 | 13130.000 |
| T:0 | reactor 2 | 24h | Chlorella | 594.667 | 298.000 | 401.333 |
| T:1 | reactor 2 | 24h | Chlorella | 981.333 | 953.000 | 2134.667 |
| T:2 | reactor 2 | 24h | Chlorella | 2371.333 | 4861.333 | 3949.667 |
| T:3 | reactor 2 | 24h | Chlorella | 3133.000 | 15640.000 | 13290.000 |
| T:4 | reactor 2 | 24h | Chlorella | 7944.000 | 19765.000 | 42913.333 |
| T:5 | reactor 2 | 24h | Chlorella | 4439.667 | 18481.667 | 28948.000 |
| T:6 | reactor 2 | 24h | Chlorella | 11589.000 | 20790.000 | 16198.333 |
| T:0 | reactor 3 | 24h | Chlorella | 594.667 | 298.000 | 401.333 |
| T:1 | reactor 3 | 24h | Chlorella | 12754.000 | 22856.667 | 8804.000 |
| T:2 | reactor 3 | 24h | Chlorella | 17006.667 | 27178.000 | 8956.667 |
| T:3 | reactor 3 | 24h | Chlorella | 20306.667 | 21206.667 | 15465.000 |
| T:4 | reactor 3 | 24h | Chlorella | 36896.667 | 27288.000 | 22630.000 |
| T:5 | reactor 3 | 24h | Chlorella | 35463.333 | 34796.667 | 19630.000 |
| T:6 | reactor 3 | 24h | Chlorella | 29558.000 | 85326.667 | 17093.333 |
Podemos observar que la distribución de la variables aleatoria “tiempo1” presenta una distribución uniforme. Sabiendo que T0 = 0 minutos, T1 = 10 minutos, T2 = 20 minutos, y así susecivamente; y considerando que el tiempo es una variable continua, entonces la probilidad que sucedan estos eventos es la misma.
data1 <- table(db$tiempo1)/nrow(db)
data1
##
## T:0 T:1 T:2 T:3 T:4 T:5 T:6
## 0.1428571 0.1428571 0.1428571 0.1428571 0.1428571 0.1428571 0.1428571
plot(data1, type = "l", las = 1, main = "Distribución uniforme del tiempo de cultivo", ylab = "P(x)", xlab = "x (tiempo de espera en minutos)", ylim = c(0, 0.18))
Podemos calcular la probabilidad de ocurrencia de los eventos que tengan un tiempo de T4 o mas, multipliacando la base por la altura.
plot(data1, type = "l", las = 1, main = "Distribución uniforme del tiempo de cultivo", ylab = "P(x)", xlab = "x (tiempo de espera en minutos)", ylim = c(0, 0.18))
abline(v = c(5,7), lty = 2)
polygon(x = c(5,5,7,7), y = c(0,data1[1],data1[1],0), col = colores2)
text(x = 4.8,y = 0.07,labels = paste0("h = ", round(data1[1],3)),srt = 90)
text(x = 6,y = 0.15,labels = 2 ,srt = 0)
Entonces la probibilidad de tener al menos un tiempo de cultivo de T4 es igual al área del rectangulo de la gráfica: \[\begin{equation}
Área = b.h \\
Área = (2)(0.143) \\
Área = 0.286
\end{equation}\]
La importancia prácitca de esta distribución es que nos muestra que podemos obtener la probabilidad de la ocurrencia de un evento a partir del área bajo la curva
La distribución normal estandar es aquella distribución de una variable aleatoria continua cuya gráfica describe una campana, tiene una media de 0 y una desviación estandar de 1.
Para obtener una gráfica de una distribución normal teórica podemos utilizar la función rnorm() que permite generar números aleatoreos que presentan una distribución normal. Esta función tiene 3 parámetros: + n= que define la “n” de la muestra, es decir la cantidad de datos. + mean= que define al media de los datos. + sd= que define la desviación estandar de los datos.
data2 <- rnorm(n = 10000, mean = 0, sd = 1)
par(mfrow = c(2,2))
plot(y = 1:10000, x = data2, main = "Gráfico de dispersión de los datos", xlab = "valor", ylab = "muestra" )
hist(data2,main = "Histograma", col = colores1)
plot(density(data2), type = "l", main = "Distribución normal estandar")
boxplot(data2, col = colores1)
Para definir la frecuencia acumulada a la derecha de “x” podemos usar la fucnión pnorm(), que tiene 3 parámetros: + q= que define el valor de “x” del cual deseamos hallar la probabilidad. + mean= que define al media de los datos. + sd= que define la desviación estandar de los datos.
pnorm(q = -2,mean = 0, sd = 1 )
## [1] 0.02275013
Para hallar el valor de “x” cuando se conoce la frecuencia acumulada a la izquierda del valor de “x” podemos usar la función qnorm(), que tiene 3 parámetros: + p= que define la frecuencia acumulada a la izquierda de “x”. + mean= que define al media de los datos. + sd= que define la desviación estandar de los datos.
qnorm(p = 0.02275013 , mean = 0,sd = 1)
## [1] -2
Para hallar la densidad de la distribución en un valor de “x” podemos usar la función dnorm(), que tiene tres parámetros: + x= que define el valor de “x” del cual deseamos hallar la probabilidad. + mean= que define al media de los datos. + sd= que define la desviación estandar de los datos.
dnorm(x = -2,mean = 0,sd = 1)
## [1] 0.05399097
Con esta última función podemos generar el gráfico de densidad
p <- numeric()
cnt <- 1
for(i in seq(-4,4,by = .1)){
p[cnt] <- dnorm(x = i, mean = 0, sd = 1)
cnt <- cnt + 1
}
plot(p, type = "l", xaxt = "n")
axis(side = 1,at = 1:length(p),labels = seq(-4,4,by = .1))
### 4.3 Ejercicios
qnorm(p = 0.5, mean = 0, sd = 1)
## [1] 0
pnorm(q = -1.281552)
## [1] 0.09999992
pnorm(q = 1.281552)
## [1] 0.9000001
pnorm(q = 0)
## [1] 0.5
En la practica, la distribución normal estandar no ocurre. Cada conjunto de datos tiene una media y una desviación estandar diferente a 0 y 1, respectivamente. Sin embargo, podemos usar escalar los datos para que se ajusten a una distribución normal estandar. Para ello usamos la siguiente fórmula: $$ \[\begin{equation} z=\frac{x-\mu}{\sigma} \\ Donde: \\ z = es\space el\space valor\space escalado \\ x = valor\space del\space número \\ \mu = media\space muestral \\ \sigma = desiviación\space estandar\space muestral \\ \end{equation}\]$$
En vez de usar la tabla de z score (clásica en los libros de estadistica), podemos usar R para encontrar el área bajo la curva (frecuencia acumulada) de valores reales escalados a un z-score. Determinaremos el área bajo la curva, es decir la probabilidad acumulada a la izquierda del primer valor del “Medio.BBM”, para ello extraeremos primero el primer valor
dato <- db$Medio.BBM[1]
dato
## [1] 819.222
Luego escalaremos el valor restandole media muestral y dividiendolo entre su desviación estandar muestral.
zscore <- (dato - mean(db$Medio.BBM))/sd(db$Medio.BBM)
zscore
## [1] -0.6807537
Para calcular el valor a la derecha del valor de z, usaremos la función pnorm (recuerde que ya escalamos los datos a una distribución normal estandar)
pnorm(q = zscore)
## [1] 0.2480137
En R tenemos otra función que nos permite escalar los valores automáticamente sin estar haciendo estos calculos, con la función scale(). La ventaja de esta función es que podemos aplicarla a toda la pila de datos y calculará el valor de z uno por uno, veámoslo
scale(db$Medio.BBM)
## [,1]
## [1,] -0.680753678
## [2,] -0.579608443
## [3,] -0.508370912
## [4,] -0.441792449
## [5,] -0.117271167
## [6,] -0.085815399
## [7,] 0.056659526
## [8,] -0.680753678
## [9,] -0.543989745
## [10,] -0.508972148
## [11,] -0.386185144
## [12,] 0.040533433
## [13,] 0.357630371
## [14,] 0.632556026
## [15,] -0.753203959
## [16,] -0.750062927
## [17,] -0.724433934
## [18,] -0.713638615
## [19,] -0.747853708
## [20,] -0.730595887
## [21,] -0.710961934
## [22,] -0.680753678
## [23,] -0.537857821
## [24,] -0.371005879
## [25,] -0.182196470
## [26,] 0.488593094
## [27,] -0.324415887
## [28,] 0.219423608
## [29,] -0.680753678
## [30,] -0.612071094
## [31,] -0.458324325
## [32,] 0.103655166
## [33,] 1.233821411
## [34,] 1.216538025
## [35,] 3.036775973
## [36,] -0.680753678
## [37,] -0.289804073
## [38,] 0.054360088
## [39,] -0.405572516
## [40,] -0.427214284
## [41,] -0.469445894
## [42,] -0.164627548
## [43,] -0.711127223
## [44,] -0.613964749
## [45,] -0.571808344
## [46,] -0.496513117
## [47,] 0.245078166
## [48,] -0.120487405
## [49,] 0.007740069
## [50,] -0.711127223
## [51,] -0.631323205
## [52,] -0.590068585
## [53,] 0.470783812
## [54,] -0.189470539
## [55,] -0.285956708
## [56,] -0.178198695
## [57,] -0.711127223
## [58,] 0.225059531
## [59,] 0.275106118
## [60,] -0.252817751
## [61,] 0.817908703
## [62,] 0.904340512
## [63,] 0.605684119
## [64,] -0.711127223
## [65,] -0.636282822
## [66,] -0.451426011
## [67,] -0.103805119
## [68,] -0.343668133
## [69,] -0.196458936
## [70,] -0.292945240
## [71,] -0.711127223
## [72,] -0.658826375
## [73,] -0.470813518
## [74,] -0.367789642
## [75,] 0.282951259
## [76,] -0.191048494
## [77,] 0.775977778
## [78,] -0.711127223
## [79,] 0.933556899
## [80,] 1.508777093
## [81,] 1.955138551
## [82,] 4.199119333
## [83,] 4.005245075
## [84,] 3.206483546
## attr(,"scaled:center")
## [1] 5852.11
## attr(,"scaled:scale")
## [1] 7393.111
scale(db$Medio.BBM)[1]
## [1] -0.6807537
zscore
## [1] -0.6807537
scale(db$Medio.BBM)[1] == zscore
## [1] TRUE
En esta sección analizaremos como se comporta la media, la desviación estandar y la varianza; en muestras distintas de una misma población. Para ello generemos una población hipotética de forma virtual, que presente una distribución aleatoria normal
pob <- rnorm(n = 1000000, mean = 0, sd = 1)
plot(density(pob), type = "l")
Ahora vamos a generar 1000 muestras aleatorias de 100 elementos cada una, a partir de nuestra población hipotética
muestras <- list()
for (i in 1:1000){
m <- sample(x = pob, size = 100, replace = T)
muestras[[i]] <- m
}
names(muestras) <-paste0("muestra_", 1:1000)
head(summary(muestras))
## Length Class Mode
## muestra_1 100 -none- numeric
## muestra_2 100 -none- numeric
## muestra_3 100 -none- numeric
## muestra_4 100 -none- numeric
## muestra_5 100 -none- numeric
## muestra_6 100 -none- numeric
Una vez que ya tenemos nuestras muestras generadas, determinemos cuales son las medias para cada una de ellas con la función lapply()
head(lapply(X = muestras, FUN = mean))
## $muestra_1
## [1] 0.03069766
##
## $muestra_2
## [1] 0.02436875
##
## $muestra_3
## [1] -0.02056755
##
## $muestra_4
## [1] -0.03335293
##
## $muestra_5
## [1] 0.2175652
##
## $muestra_6
## [1] 0.07887014
Ahora determinemos como se comporta al distribución de las medias muestrales
medias <- unlist(lapply(X = muestras, FUN = mean))
par(mfrow = c(1,2))
plot(density(medias), type = "l")
hist(medias, col = colores1)
Como vemos la distribución de las medias muestrales se asemeja mucho a la media distribución normal estandar y su media tiende a ser parecida a a la media poblacional
Ahora hagamos el mismo cálculo pero para las varianzas muestrales. Primero calculemos las varianzas con la función lapply()
varianzas <- lapply(X = muestras, FUN = var )
Y ahora grafiquemos la distribución de las varianzas muestrales
varianzas <- unlist(varianzas)
par(mfrow = c(1,2))
plot(density(varianzas), type = "l")
hist(varianzas, col = colores1)
Aparentemente la distribución de las varianzas muestrales tiende a tener un sesgo a la derecha
Ahora veamos si pasa lo mismo que lo anterior con la distribución de la desviación estandar muestral. Primero generemos un vector de las desviaciones estandar muestrales
desvi <- unlist(lapply(X = muestras,FUN = sd))
Ya que tenemos el vector, ahora genermos las gráficas
par(mfrow = c(1,2))
plot(density(desvi), type = "l")
hist(desvi, col = colores1)
Aparentemente la distribución de la desviación estandar tambien a tener una distribución normal
Para todo grupo de muestras, cuya n sea mayor o igual a 30, la distribución de las medias muetrales puede aproximarse a una distribución normal co una media \(\mu\) y una desviación estandar \(\frac{\sigma}{\sqrt{n}}\)
Para escalar los datos de las medias muestrales al valor de z-score se usa la siguiente fórmula: \[z = \frac{\bar{x}-\mu}{\frac{\sigma}{\sqrt{n}}}\] Donde: + \(\bar{x}\) es la media muestral de la iésima muestra + \(\mu\) es la media de todas las medias muestrales + \(\sigma\) es la desviación estandar de todas las medias muestrales + \(n\) es el número de eventos en cada muestra (n siempre debe ser mayor de 30)
En estádistica es muy importante definir o establecer si la población o muestra tiene una distribución normal, para poder elegir entre las pruebas paramétricas o no paramétricas.
Para evaluar si una población o muestra tiene una distribución normal, debemos efectuar tres análisis: + Histograma observar si el histograma tiene forma de campana. + Valores atípicos identificar valores atípicos en la distribución de nuestra muestra. + Gráfica cuantilar que se grafica tomando como “x” el valor numérico de la muestra y como “y” el valor del z-score correspondiente para esa muestra. Cuando la población/muestra tiene una distribución normal, los puntos no se alejan de la linea recta.
Usaremos los datos del medio de cultivo BBM para observar si tienen una distribución normal.
Generaremos un histograma de los valores de cultivo en medio BBM para cada especie, para ello usaremos la función hist()
par(mfrow = c(2,2))
hist(db$Medio.BBM[db$sp=="Chlorella"], col = colores1, main = "distribución de Chlorella")
plot(density(db$Medio.BBM[db$sp=="Chlorella"]), lwd = 2, main = "distribución de Chlorella")
hist(db$Medio.BBM[db$sp=="Chloridium"], col = colores1, main = "distribución de Chloridium")
plot(density(db$Medio.BBM[db$sp=="Chloridium"]), lwd = 2, main = "distribución de Chloridium")
Para encontrar los valores atípicos podemos utiliazar la función boxplot
p <- boxplot(db$Medio.BBM~db$sp, col = colores1)
boxplot(db$Medio.BBM[db$sp=="Chlorella"], plot = F)$out
## [1] 36896.67 35463.33 29558.00
boxplot(db$Medio.BBM[db$sp=="Chloridium"], plot = F)$out
## [1] 14973.89 14846.11 28303.33
Para esta gráfica podemos usar la librería de ggplot y la función stat_qq() y stat_qq_line()
library(ggplot2)
p <- ggplot(db, aes(sample = Medio.BBM, color = factor(sp))) +
stat_qq() +
stat_qq_line()
p
R nos permite hacer pruebas de normalidad como la de Shapiro-Wilk, con la función shapiro.test()
shapiro.test(db$Medio.BBM[db$sp=="Chlorella"])
##
## Shapiro-Wilk normality test
##
## data: db$Medio.BBM[db$sp == "Chlorella"]
## W = 0.71988, p-value = 1.272e-07
shapiro.test(db$Medio.BBM[db$sp=="Chloridium"])
##
## Shapiro-Wilk normality test
##
## data: db$Medio.BBM[db$sp == "Chloridium"]
## W = 0.70475, p-value = 6.993e-08
Para esta prueba la hipótesis nula asume que la población está distribuida de forma normal, por tanto cuando p > 0.05 se asume que la población/muestra tiene una distribución normal. En nuestro caso, ambos grupos tienen una distribución por debajo de la 0.05, por lo tanto se rechaza la hipótesis nula y se acpeta la alterntiva, entonces ninguna de las dos poblaciones tiene una distribución normal.