Transformar distribución normal a normal estándar y calcular probabilidades.
La distribución normal estándar o distribución normal tipificada es una distribución normal singular cuya denominación es media igual a cero y desviación igual a 1. \(\mu = 0 ; \sigma = 1\).
Se necesita una variable, Z que representa el producto de una transformación o cambio de variable de la variable aleatoria continua X que sigue una distribución normal del tipo \(N(μ, σ)\).
Esta transformación se llama tipificación (también estandarización o normalización):
¿Porque Z? En general, el valor de \(Z\) se interpreta como el número de desviaciones estándar que están comprendidas entre el promedio y un cierto valor de variable \(x\).
Se identifica \(z\) como la diferencia entre un valor de la variable y el promedio, expresada esta diferencia en cantidad de desviaciones estándar.(Mendenhall, Beaver, and Beaver 2010).
Entonces, a partir de cualquier variable aleatoria \(x\) que siga una distribución, se puede obtener otra característica \(z\) con una distribución normal estándar, sin más que efectuar la transformación conforme y de acuerdo a la fórmula.
\[ z = \frac{x - \mu}{\sigma} \]
\[ x \text{ es el valor de una variable aleatoria continua de una distribución normal} \\ \sigma \text{ desviación estándar de población} \\ \mu \text{ media de la población} \]
Establece que si una variable aleatoria está normalmente distribuida, entonces:
Ejemplo: una desviación estándar de la media es igual al valor \(z\) de 1.00. Al hablar de la tabla de probabilidad normal estándar, el valor \(z\) de 1.00 corresponde a una probabilidad de 0.3413. Por lo tanto, ¿qué porcentaje de las observaciones caerá entre más y menos una desviación estándar de la media? Se multiplica (2)(0.3413), lo que da 0.6826, o aproximadamente \(68\%\) de las observaciones están entre más y menos una desviación estándar de la media.
Cargar librerías y datos para representar una distribución normal y transformar a distribución normal estándar
library(cowplot) # Gráficos
library(ggplot2) # Gráfico
library(mosaic)
library(dplyr) # Para proesar filtrar ordenar con arrange
La población tiene una variable aleatoria de interés como lo puede ser la altura de las personas. Valores medidos en centímetros.
Se inicializan las variables para generar valores aleatorios y simular una población.
n <- 200
media <- 175
desv <- 10
Se generan 200 valores aleatorios o con las condiciones de una distribución normal de media igual a \(\mu = 175cm.\) y desviación de \(\sigma = 10cm.\).
set.seed(2021)
n <- 200
estaturas<- rnorm(n = n, mean = media, sd = desv)
estaturas
## [1] 173.7754 180.5246 178.4865 178.5963 183.9805 155.7743 177.6174 184.1557
## [9] 175.1377 192.2996 164.1780 172.2717 176.8200 190.0854 191.0447 156.5852
## [17] 191.2331 176.3139 189.8112 190.1332 165.5756 173.1431 163.9888 187.0812
## [25] 158.7506 176.0538 160.4456 171.4598 174.0630 186.0067 155.3617 160.5206
## [33] 185.1944 160.7858 168.9547 159.1653 162.1407 160.4532 174.1293 180.0474
## [41] 176.1639 192.6021 171.5488 196.2000 174.6562 167.0785 189.7552 167.7444
## [49] 178.1238 181.9196 169.9971 152.4413 175.4374 171.3118 165.3978 176.0377
## [57] 179.2729 173.2952 159.5086 159.9440 175.1604 173.1464 178.9193 167.4329
## [65] 177.3142 165.1639 180.6508 191.1675 172.4804 164.4412 171.5177 174.5701
## [73] 161.0245 189.9022 164.6061 172.6305 165.0086 161.0746 184.8201 178.6094
## [81] 171.6249 168.5661 153.3311 181.3329 173.5509 162.5997 180.3396 159.1174
## [89] 165.0904 179.8326 183.1062 172.0634 174.4654 182.3518 175.1498 173.7800
## [97] 168.5323 166.3214 169.9130 154.2242 172.3966 179.5034 173.5712 170.1328
## [105] 163.0423 175.4694 173.7347 147.9928 169.2919 180.9160 179.8698 173.7320
## [113] 162.4080 177.0129 155.8310 191.7274 179.7079 189.1411 175.8430 156.9770
## [121] 182.5374 171.8806 157.6744 153.6144 198.6580 179.8476 185.9324 178.0291
## [129] 185.1530 199.5359 172.5438 180.4152 176.9688 154.2884 180.1258 170.9424
## [137] 178.5620 171.6843 175.8059 172.3847 166.2255 182.4131 148.1704 165.5052
## [145] 179.4626 162.1117 173.4219 178.4782 174.4038 189.7673 168.4584 172.4319
## [153] 162.4596 182.7104 165.8865 168.0669 168.8233 182.6212 164.1284 171.0020
## [161] 183.2780 178.5542 176.5914 184.5540 171.6036 167.7262 158.0219 194.5414
## [169] 201.6674 195.6338 183.1878 174.2035 170.1055 183.4772 165.4096 184.2869
## [177] 178.8097 189.9460 170.3230 177.6116 165.0739 164.3662 177.7428 184.4534
## [185] 182.2619 172.4549 189.8518 177.3029 177.7800 176.4704 163.0371 175.9014
## [193] 187.1927 169.3851 178.3688 159.6320 172.5987 180.1487 172.6114 180.8182
Se identifican la media aritmética y la desviación de la población generada.
media.p <- round(mean(estaturas),2)
desv.p <- round(sd(estaturas),2)
media.p; desv.p
## [1] 174.12
## [1] 10.44
Se muestra la distribución normal con función plotDist() de la librería mosaic.
g1 <- plotDist(dist = "norm", mean = media.p, sd = desv.p, type = "h", xlab = "x's = Estaturas", col = 'blue')
g1
Z se interpreta como los valores que están a la derecha de una distribución normal con media igual a cero y desviación igual a 1.
\[ z = \frac{x - \mu}{\sigma} \]
En la siguiente función f.devolver.z() se hace una simulación de transforma cualquier valor de \(x\) a valores de \(z\). Se simula transformar valores de 170 a 180 de 0.5 en 0.5.
En el archivo que se carga a continuación, se encuentra programada una función f.devolver.z() para obtener el valor de z a partir de los parámetros x, media y desviación.
source("https://raw.githubusercontent.com/rpizarrog/probabilidad-y-estad-stica/master/Enero%20Junio%202022/funciones/funciones.para.distribuciones.r")
##
## Attaching package: 'gtools'
## The following object is masked from 'package:mosaic':
##
## logit
x = seq(from = 170, to = 180, by = .5)
# z ?
#f.devolver.z <- function(x, media, desv) {
# z <- (x - media) / desv
# z
#}
z <- f.devolver.z(x = x, media = media.p, desv = desv.p)
x; z
## [1] 170.0 170.5 171.0 171.5 172.0 172.5 173.0 173.5 174.0 174.5 175.0 175.5
## [13] 176.0 176.5 177.0 177.5 178.0 178.5 179.0 179.5 180.0
## [1] -0.39463602 -0.34674330 -0.29885057 -0.25095785 -0.20306513 -0.15517241
## [7] -0.10727969 -0.05938697 -0.01149425 0.03639847 0.08429119 0.13218391
## [13] 0.18007663 0.22796935 0.27586207 0.32375479 0.37164751 0.41954023
## [19] 0.46743295 0.51532567 0.56321839
equivalencias <- data.frame (x = estaturas, z = f.devolver.z(x = estaturas, media = media, desv = desv))
# equivalencias
Se muestran ordenados para identificarlos de manera más práctica y únicamente los primeros y últimos veinte registros.
equivalencias <- arrange(equivalencias, x)
head(equivalencias, 20)
## x z
## 1 147.9928 -2.700715
## 2 148.1704 -2.682963
## 3 152.4413 -2.255869
## 4 153.3311 -2.166885
## 5 153.6144 -2.138563
## 6 154.2242 -2.077584
## 7 154.2884 -2.071162
## 8 155.3617 -1.963825
## 9 155.7743 -1.922570
## 10 155.8310 -1.916904
## 11 156.5852 -1.841476
## 12 156.9770 -1.802304
## 13 157.6744 -1.732560
## 14 158.0219 -1.697806
## 15 158.7506 -1.624939
## 16 159.1174 -1.588265
## 17 159.1653 -1.583474
## 18 159.5086 -1.549140
## 19 159.6320 -1.536800
## 20 159.9440 -1.505600
tail(equivalencias, 20)
## x z
## 181 189.7552 1.475515
## 182 189.7673 1.476729
## 183 189.8112 1.481122
## 184 189.8518 1.485180
## 185 189.9022 1.490216
## 186 189.9460 1.494604
## 187 190.0854 1.508542
## 188 190.1332 1.513318
## 189 191.0447 1.604470
## 190 191.1675 1.616752
## 191 191.2331 1.623310
## 192 191.7274 1.672739
## 193 192.2996 1.729963
## 194 192.6021 1.760214
## 195 194.5414 1.954138
## 196 195.6338 2.063379
## 197 196.2000 2.120000
## 198 198.6580 2.365798
## 199 199.5359 2.453593
## 200 201.6674 2.666738
La media debe ser 0 y la desviación es 1
\[ \mu = 0 \\ \sigma = 1 \]
Se muestran los datos de la distribución estaturas con valores transformados a z.
g2 <- plotDist(dist = "norm", mean = 0, sd = 1, type = "h", xlab = "Z's", col = 'red')
g2
plot_grid(g1, g2, nrow = 1, ncol=2)
Se muestran las gráficas de distribución normal con datos de estaturas en azul y gráficas de valores de estaturas transformados a \(z\) en color rojo.
gnormal <- ggplot(data = equivalencias) +
geom_point(aes(x = x, y = dnorm(x = x, mean = media.p, sd = desv.p)), col = 'blue') +
geom_line(aes(x = x, y = dnorm(x = x, mean = media.p, sd = desv.p)), col = 'blue') +
geom_vline(xintercept = media.p) +
ggtitle(label = "Distribución normal", subtitle = paste("Media = ", media.p))
gnormalstd <- ggplot(data = equivalencias) +
geom_point(aes(x = z, y = dnorm(x = z, mean = 0, sd = 1)), col = 'red') +
geom_line(aes(x = z, y = dnorm(x = z, mean = 0, sd = 1)), col = 'red') +
geom_vline(xintercept = 0) +
ggtitle(label = "Distribución normal Estándar", subtitle = paste("Media = ", 0))
plot_grid(gnormal, gnormalstd, nrow=1, ncol=2)
\[ P(x \ge 180) = 1 - P(x < 180) = \text {lower tail = FALSE} \]
x <- 180
prob1 <- round(pnorm(q = x, mean = media.p, desv.p, lower.tail = FALSE) * 100, 2)
paste(prob1, "%")
## [1] "28.66 %"
gnormal <- plotDist(dist = "norm", mean = media.p, sd = desv.p, type = "h", xlab = "x's", groups = x >= 180, col = c('blue', 'pink'), main= "Distribución normal", sub= paste("Media = ", media.p, "f(x > ", x , ") = ", prob1, "%"))
x <- 180
z <- f.devolver.z(x = x, media = media.p, desv = desv.p)
z
## [1] 0.5632184
prob2 <- round(pnorm(q = z, mean = 0, sd=1, lower.tail = FALSE) * 100, 2)
paste(prob2, "%")
## [1] "28.66 %"
gnormal.z <- plotDist(dist = "norm", mean = 0, sd = 1, type = "h", xlab = "z's", groups = x >= z, col = c('red', 'pink'), main= "Distribución normal estándar", sub= paste("Media = ", 0, "f(z > ", round(z,2) , ") = ", prob2, "%"))
plot_grid(gnormal, gnormal.z, nrow = 1, ncol=2)
La respuesta es razonar y deducir si el 50% está a la derecha y el otro 50% está a la izquierda entonces la probabilidad es aproximadamente del 50% \[ P(x <= mean) = 50 \% \\ o \\ P(z <= 0 ) = 50\% \]
x <- media.p
prob1 <- round(pnorm(q = x, mean = media.p, desv.p, lower.tail = FALSE) * 100, 2)
paste(prob1, "%")
## [1] "50 %"
gnormal <- plotDist(dist = "norm", mean = media.p, sd = desv.p, type = "h", xlab = "x's", groups = x<= media.p, col = c('blue', 'pink'), main= "Distribución normal", sub= paste("Media = ", media.p, "f(x < ", x , ") = ", prob1, "%"))
x <- media.p
z <- f.devolver.z(x = x, media = media.p, desv = desv.p)
z
## [1] 0
prob2 <- round(pnorm(q = z, mean = 0, sd=1) * 100, 2)
paste(prob2, "%")
## [1] "50 %"
gnormal.z <- plotDist(dist = "norm", mean = 0, sd = 1, type = "h", xlab = "z's", groups = x <= z, col = c('red', 'pink'), main= "Distribución normal estándar", sub= paste("Media = ", 0, "f(z < ", round(z,2) , ") = ", prob2, "%"))
plot_grid(gnormal, gnormal.z, nrow = 1, ncol=2)
Se toma de referencia algunos ejercicios de distribuciones normales. (matemovil, n.d.a).
Por ejemplo, si se desea encontrar la probabilidad de que la variable estandarizada \(z\), tome un valor entre \(0\) y \(1.50\); hay que encontrar el área bajo la curva entre \(z = 0\) y \(z = 1.50\), o lo que es lo mismo la probabilidad \(P(0 \le z \le 1.50)\) (matemovil, n.d.b).
z1 = 0
z2 = 1.5
prob2 <- pnorm(q = z2, mean = 0, sd=1) - pnorm(q = z1, mean = 0, sd = 1)
prob2 <- round(prob2 * 100, 2)
paste(prob2, "%")
## [1] "43.32 %"
gnormal.z <- plotDist(dist = "norm", mean = 0, sd = 1, type = "h", xlab = "z's", groups = x >= z1 & x <= z2, col = c('grey', 'pink'), main= "Distribución normal estándar", sub= paste("Media = ", 0, "f(",z1, "<= z <=",z2,")", prob2, "%"))
gnormal.z
La función xpnorm() de librería mosaic refleja el área bajo la curva y los valores porcentuales de probabilidad.
grafica <- xpnorm(q = c(0, 1.5), mean = 0, sd = 1)
grafica
## [1] 0.5000000 0.9331928
round(grafica[1] - grafica[2], 4)
## [1] -0.4332
Salida de xpnorm()
If X ~ N(0, 1), then
P(X <= 0.0) = P(Z <= 0.0) = 0.5000 P(X <= 1.5) = P(Z <= 1.5) = 0.9332
P(X > 0.0) = P(Z > 0.0) = 0.50000 P(X > 1.5) = P(Z > 1.5) = 0.06681
primero se debe observar que es la distribución normal estándar. En general tiene como trabajo adaptar una variable aleatoria a una función que depende de la media y la desviación estándar.
Dicha distribución tiene la forma de una campana la cual es simétrica con respecto a la media, su forma depende tanto de la media así como de la desviación estándar.
Dentro del ejercicio podemos observar que un conjunto de datos se encuentra en 0, por lo que a partir de ahí se encuentra el 50% de los datos, de igual forma del 0 en adelante le corresponde el otro 50%
Bibliografía