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. μ=0;σ=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.(mendenhall2010?).
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:
Aproximadamente 68% de las observaciones caerán entre más y menos una desviación estándar de la media.
Aproximadamente 95% de las observaciones caerán entre más y menos dos desviaciones estándar de la media.
Prácticamente todas, o 99.7% de las observaciones caerán entre más y menos tres desviaciones estándar de la media.(lind2015?).
Ejemplo: una desviación estándar de la media es igual al valor zz de 1.00. Al hablar de la tabla de probabilidad normal estándar, el valor zz 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%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)
## Registered S3 method overwritten by 'mosaic':
## method from
## fortify.SpatialPolygonsDataFrame ggplot2
##
## The 'mosaic' package masks several functions from core packages in order to add
## additional features. The original behavior of these functions should not be affected by this.
##
## Attaching package: 'mosaic'
## The following objects are masked from 'package:dplyr':
##
## count, do, tally
## The following object is masked from 'package:Matrix':
##
## mean
## The following object is masked from 'package:ggplot2':
##
## stat
## The following object is masked from 'package:cowplot':
##
## theme_map
## The following objects are masked from 'package:stats':
##
## binom.test, cor, cor.test, cov, fivenum, IQR, median, prop.test,
## quantile, sd, t.test, var
## The following objects are masked from 'package:base':
##
## max, mean, min, prod, range, sample, sum
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.
n <- 200
media <- 175
desv <- 10
Se generan 200 valores aleatorios o con las condiciones de una distribución normal de media igual a μ=175cm. y desviación de σ=10cm.
set.seed(2023)
n <- 200
estaturas<- rnorm(n = n, mean = media, sd = desv)
estaturas
## [1] 174.1622 165.1706 156.2493 173.1386 168.6651 185.9080 165.8627 185.0164
## [9] 171.0073 170.3188 178.2696 170.8725 180.6204 181.6336 168.9710 181.9838
## [17] 180.9585 179.5209 183.9674 180.7222 170.8835 172.0567 187.1857 177.4411
## [25] 170.5485 156.5220 168.7117 166.3892 190.1492 202.3524 172.2512 187.7665
## [33] 166.8902 174.5508 168.6059 170.6164 180.0720 186.2922 184.7564 173.7540
## [41] 179.2834 179.1873 179.3547 172.9574 178.0235 181.9436 198.7307 185.7597
## [49] 178.3538 182.5343 181.6439 164.0912 170.7723 186.8340 190.8483 197.8086
## [57] 154.3454 170.9189 178.0101 181.9661 184.8818 172.1594 155.7773 163.2628
## [65] 185.4428 173.6707 183.4488 171.2841 185.4758 184.2542 160.2139 165.7737
## [73] 174.1510 166.3349 181.7504 174.1930 173.7441 171.1167 175.1683 163.7369
## [81] 177.1835 192.4304 173.8042 179.8618 176.4137 178.0797 184.9408 169.8219
## [89] 166.9286 155.7682 161.1086 179.2867 172.0622 197.8000 163.3549 187.4087
## [97] 160.0492 172.6836 166.7513 161.7583 175.7901 173.9076 184.0552 184.7537
## [105] 184.4308 174.8303 167.7840 178.0054 165.9688 188.8769 181.6989 175.0614
## [113] 177.6517 154.3890 182.5298 175.0942 164.9516 200.7925 182.0131 193.7924
## [121] 170.2494 178.6808 176.0354 178.4634 167.3164 185.9914 168.0551 172.9606
## [129] 171.7023 187.5072 173.7930 198.9812 178.5305 184.5160 171.8423 188.1553
## [137] 156.6120 181.3491 173.1951 178.8053 172.6986 173.4750 181.8548 157.6163
## [145] 175.0004 180.5990 178.6618 176.5170 173.8668 169.8614 179.5796 202.0468
## [153] 163.2948 184.2456 168.7872 184.2698 178.8299 175.0166 182.5670 190.9310
## [161] 192.2326 178.2643 180.1493 183.0001 165.5912 178.4760 173.8323 174.1998
## [169] 177.7924 174.9253 179.7447 177.9394 166.4722 156.6311 163.9346 170.1027
## [177] 194.8736 161.8801 169.6599 186.7238 175.5119 175.0552 184.5582 177.4248
## [185] 164.8037 184.4675 171.4228 182.5463 176.2973 167.4851 177.6740 171.7858
## [193] 165.5153 167.8036 169.0944 189.2960 192.8208 179.9633 190.5534 178.9348
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] 176.38
## [1] 9.65
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/2023/funciones/funciones%20para%20disribuciones%20de%20probabilidad.R")
##
## Attaching package: 'gtools'
## The following object is masked from 'package:mosaic':
##
## logit
##
## Attaching package: 'plotly'
## The following object is masked from 'package:mosaic':
##
## do
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
x = seq(from = 170, to = 180, by = .5)
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.66113990 -0.60932642 -0.55751295 -0.50569948 -0.45388601 -0.40207254
## [7] -0.35025907 -0.29844560 -0.24663212 -0.19481865 -0.14300518 -0.09119171
## [13] -0.03937824 0.01243523 0.06424870 0.11606218 0.16787565 0.21968912
## [19] 0.27150259 0.32331606 0.37512953
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 154.3454 -2.065457
## 2 154.3890 -2.061096
## 3 155.7682 -1.923179
## 4 155.7773 -1.922267
## 5 156.2493 -1.875067
## 6 156.5220 -1.847804
## 7 156.6120 -1.838798
## 8 156.6311 -1.836890
## 9 157.6163 -1.738369
## 10 160.0492 -1.495084
## 11 160.2139 -1.478605
## 12 161.1086 -1.389139
## 13 161.7583 -1.324173
## 14 161.8801 -1.311989
## 15 163.2628 -1.173720
## 16 163.2948 -1.170517
## 17 163.3549 -1.164511
## 18 163.7369 -1.126307
## 19 163.9346 -1.106538
## 20 164.0912 -1.090883
tail(equivalencias, 20)
## x z
## 181 187.7665 1.276654
## 182 188.1553 1.315530
## 183 188.8769 1.387694
## 184 189.2960 1.429604
## 185 190.1492 1.514920
## 186 190.5534 1.555339
## 187 190.8483 1.584827
## 188 190.9310 1.593103
## 189 192.2326 1.723256
## 190 192.4304 1.743037
## 191 192.8208 1.782077
## 192 193.7924 1.879238
## 193 194.8736 1.987356
## 194 197.8000 2.279999
## 195 197.8086 2.280855
## 196 198.7307 2.373066
## 197 198.9812 2.398119
## 198 200.7925 2.579248
## 199 202.0468 2.704676
## 200 202.3524 2.735239
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] "35.38 %"
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.3751295
prob2 <- round(pnorm(q = z, mean = 0, sd=1, lower.tail = FALSE) * 100, 2)
paste(prob2, "%")
## [1] "35.38 %"
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?).
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≤z≤1.50) (matemovil?).
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)
##
## 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
##
grafica
## [1] 0.5000000 0.9331928
round(grafica[1] - grafica[2], 4)
## [1] -0.4332
Salida de xpnorm()
If X ~ N(0, 1), then
Hay una probabilidad del 43.32% de que un valor tomado al azar de una distribución normal estándar se encuentre entre 0 y 1.5 desviaciones estándar por encima de la media.
Esto significa que:
Casi la mitad de los valores (43.32%) caen en ese rango si la variable está normalmente distribuida.
Es un valor bastante probable dentro de una distribución normal.