Este apartado aborda los connceptos de distribución que son comúnmente usados en la estadística. Las distribuciones manejadas serán cinco en total, donde se conocerá su concpeto, uso, y un ejemplo práctico y visual sobre cómo son estas distribuciones.
La distribución Lognormal es un tipo de distribución flexible, relacionada con la distribución normal. A diferencia de la normal, que permite valores negativos, esta distribución consta de valores únicamente positivos, aparte que está caracterizada por un sesgo notorio hacia la derecha, es decir que la cola de distribución se extiende hacia este sentido. Esto explica que la mayoría de los datos son pequeños, ya que su moda se enuentra al lado izquierdo.
La asimetría es una medida que indica hacia qué lado se extiende la cola de una distribución. En la lognormal la asimetría es positiva, lo que significa que hay pocos valores muy altos que generan una cola larga hacia la derecha.
Esta es la fórmula de dos parámetros para la distribución lognormal: \[f(x; \mu , \sigma )=\frac{1}{x\sigma \sqrt{2\pi }}* exp(-\frac{(ln(x)-\mu ){^2}}{2\sigma {^2}}), \forall x >0\] Donde:
\[e^{^{\mu +\frac{\sigma{^2}}{2}}}\]
\[\sigma = \sqrt{e^{2\mu +\sigma {^2}}(e^{^{\sigma ^{2}}}-1)}\]
Vamos a usar una librería propia de Rstudio que muestra personajes de Star Wars, la distribución lognormal se hará con las estaturas que se tienen de estos mismos personajes:
library(dplyr)#librería que contiene el data frame del ejemplo
library(fitdistrplus)#librería que ayuda al ajuste de distribuciones según sus datos
estatura <- starwars %>%
filter(!is.na(height), height > 0) %>% #este apartado es para filtrar datos que estén vacíos o tengan valor cero, donde se excluyen para no dañar la distribución
pull(height)
ajuste<-fitdist(estatura, "lnorm")
plot(ajuste)
#Código para poder mostrar el gráfico
hist(estatura,
freq = FALSE,
main = "Distribución lognormal de las estaturas de personajes (Star Wars)",
xlab = "Estatura (cm)",
ylab = "Densidad",
col="skyblue",
border="black")
curve(dlnorm(x,
meanlog = ajuste$estimate["meanlog"],
sdlog = ajuste$estimate["sdlog"]),
add = TRUE,
lwd = 2,
col = "red")
#comando que muestra la estimación de la media y desviación estándar
ajuste$estimate
## meanlog sdlog
## 5.1372060 0.2421759
En el apartado de “meanlog” y “sdlog” indica específicamente la media y la desviación estándar.
#Tabla de datos sobre el ejemplo
starwarslim<-starwars%>%
filter(!is.na(height), height > 0)
tabla<- starwarslim %>%
dplyr::select(name, height) %>%
arrange(desc(height))
print(tabla)
## # A tibble: 81 × 2
## name height
## <chr> <int>
## 1 Yarael Poof 264
## 2 Tarfful 234
## 3 Lama Su 229
## 4 Chewbacca 228
## 5 Roos Tarpals 224
## 6 Grievous 216
## 7 Taun We 213
## 8 Rugor Nass 206
## 9 Tion Medon 206
## 10 Darth Vader 202
## # ℹ 71 more rows
Esta tabla muestra los primeros 10 personajes más altos dentro de la distribución.
La distribución Gaussiana, también conocida como distribución Normal, es la distribución más importante en estadística. Tiene forma de campana simétrica y describe muchos fenómenos naturales como estaturas, pesos, errores de medición, calificaciones, entre otros.
\[f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^{2}}\]
μ (mu) = Media de la distribución (centro de la campana)
σ (sigma) = Desviación estándar (qué tan dispersos están los datos)
Nota importante: Cuando μ = 0 y σ = 1, se llama Distribución Normal Estándar
Vamos a analizar las calificaciones de un examen de estadística. La distribución normal nos ayuda a entender cómo se distribuyen las notas de los estudiantes alrededor del promedio.
calificaciones <- c(75, 82, 78, 85, 80, 83, 77, 88, 74, 81,
79, 84, 78, 82, 86, 76, 80, 83, 81, 79)
media <- mean(calificaciones)
desviacion <- sd(calificaciones)
print(paste("Media (μ):", round(media, 2)))
## [1] "Media (μ): 80.55"
print(paste("Desviación estándar (σ):", round(desviacion, 2)))
## [1] "Desviación estándar (σ): 3.69"
La media nos indica el centro de las calificaciones y la desviación estándar nos dice qué tan dispersas están las notas respecto al promedio.
limite1inf<- media - desviacion
limite2sup <- media + desviacion
print(paste("68% de las calificaciones están entre:", round(limite1inf, 2),
"y", round(limite2sup, 2)))
## [1] "68% de las calificaciones están entre: 76.86 y 84.24"
hist(calificaciones,
main = "Distribución Normal de Calificaciones",
xlab = "Calificación",
ylab = "Frecuencia",
col = "darkblue",
border = "black",
breaks = 8,
prob = TRUE)
curve(dnorm(x, mean = media, sd = desviacion),
add = TRUE, col = "red", lwd = 2)
abline(v = media, col = "darkred", lwd = 2, lty = 2)
legend("topright",
legend = c("Curva Normal", "Media (μ)"),
col = c("red", "darkred"),
lty = c(1, 2),
lwd = 2)
En esta gráfica podemos observar cómo las calificaciones siguen aproximadamente una distribución normal, con la mayoría de los datos concentrados alrededor de la media.
x <- seq(70, 95,)
y <- dnorm(x, mean = media, sd = desviacion)
plot(x, y,
type = "l",
col = "blue",
lwd = 3,
main = "Curva de Densidad Normal (Campana de Gauss)",
xlab = "Calificación",
ylab = "Densidad")
Estas probabilidades nos permiten responder preguntas prácticas sobre las calificaciones de los estudiantes.
prob_mayor_85 <- pnorm(85, mean = media, sd = desviacion, lower.tail = FALSE)
prob_menor_75 <- pnorm(75, mean = media, sd = desviacion)
print(paste("Probabilidad de sacar más de 85:", round(prob_mayor_85 * 100, 2), "%"))
## [1] "Probabilidad de sacar más de 85: 11.4 %"
print(paste("Probabilidad de sacar menos de 75:", round(prob_menor_75 * 100, 2), "%"))
## [1] "Probabilidad de sacar menos de 75: 6.64 %"
datos_tabla <- data.frame(
Estudiante = paste("Estudiante", 1:20),
Calificacion = calificaciones
)
datos_ordenados <- datos_tabla[order(-datos_tabla$Calificacion), ]
print (datos_ordenados)
## Estudiante Calificacion
## 8 Estudiante 8 88
## 15 Estudiante 15 86
## 4 Estudiante 4 85
## 12 Estudiante 12 84
## 6 Estudiante 6 83
## 18 Estudiante 18 83
## 2 Estudiante 2 82
## 14 Estudiante 14 82
## 10 Estudiante 10 81
## 19 Estudiante 19 81
## 5 Estudiante 5 80
## 17 Estudiante 17 80
## 11 Estudiante 11 79
## 20 Estudiante 20 79
## 3 Estudiante 3 78
## 13 Estudiante 13 78
## 7 Estudiante 7 77
## 16 Estudiante 16 76
## 1 Estudiante 1 75
## 9 Estudiante 9 74
La distribución Chi Cuadrado es una distribución de probabilidad continua muy importante en estadística. Se utiliza principalmente en pruebas de hipótesis y no modela directamente fenómenos naturales, sino que surge cuando se trabaja con datos categóricos y varianzas. Es asimétrica y siempre toma valores positivos.
Los grados de libertad (k o df) representan el número de valores que pueden variar libremente en un cálculo. En la práctica, suele ser k = n - 1, donde n es el número de observaciones.
\[f(x; k) = \frac{1}{2^{k/2}\Gamma(k/2)} x^{k/2-1} e^{-x/2}, \quad \text{para } x > 0\]
Donde:
Nota importante: Esta distribución surge como la suma de los cuadrados de k variables normales estándar independientes:
\(\chi^{2} = Z_{1}^{2} + Z_{2}^{2} + ... + Z_{k}^{2}\)
En la mayoría de aplicaciones prácticas, no se calcula la PDF, sino el estadístico de prueba:
\(\chi^{2} = \sum \frac{(O_i - E_i)^2}{E_i}\)
Donde:
Este es el estadístico Chi-cuadrado, que luego se compara con un valor crítico o se usa para calcular un p-valor.
Vamos a analizar si un dado está equilibrado o no. Lanzamos el dado 60 veces y registramos cuántas veces sale cada número. La distribución Chi Cuadrado nos ayudará a determinar si las diferencias observadas son significativas o se deben al azar.
resultados_observados <- c(8, 12, 9, 11, 10, 10)
caras <- c("1", "2", "3", "4", "5", "6")
resultados_esperados <- rep(10, 6)
chi_cuadrado <- sum((resultados_observados - resultados_esperados)^2 / resultados_esperados)
k <- length(resultados_observados) - 1
print(paste("Estadístico Chi Cuadrado calculado:", round(chi_cuadrado, 4)))
## [1] "Estadístico Chi Cuadrado calculado: 1"
print(paste("Grados de libertad (k):", k))
## [1] "Grados de libertad (k): 5"
El estadístico Chi Cuadrado nos indica qué tan grande es la diferencia entre lo que observamos y lo que esperábamos. Un valor alto sugiere que el dado podría no estar equilibrado.
valor_p <- pchisq(chi_cuadrado, df = k, lower.tail = FALSE)
print(paste("Valor p:", round(valor_p, 4)))
## [1] "Valor p: 0.9626"
if(valor_p > 0.05) {
print("Conclusión: El dado parece estar equilibrado (no hay diferencia significativa)")
} else {
print("Conclusión: El dado NO está equilibrado (hay diferencia significativa)")
}
## [1] "Conclusión: El dado parece estar equilibrado (no hay diferencia significativa)"
barplot(rbind(resultados_observados, resultados_esperados),
beside = TRUE,
names.arg = caras,
col = c("blue", "coral"),
main = "Lanzamiento de Dado: Observado vs Esperado",
xlab = "Cara del Dado",
ylab = "Frecuencia",
ylim = c(0, 14),
legend.text = c("Observado", "Esperado"),
args.legend = list(x = "topright"))
Esta gráfica compara las frecuencias que observamos con las que esperaríamos si el dado fuera perfecto. Las diferencias pequeñas son normales por el azar.
x <- seq(0, 20)
y <- dchisq(x, df = k)
plot(x, y,
type = "l",
col = "red",
lwd = 3,
main = paste("Distribución Chi Cuadrado (k =", k, ")"),
xlab = "Valor Chi Cuadrado (χ²)",
ylab = "Densidad")
x_critico <- seq(qchisq(0.95, df = k), 20)
y_critico <- dchisq(x_critico, df = k)
polygon(c(x_critico, rev(x_critico)), c(y_critico, rep(0, length(y_critico))),
col = rgb(1, 0, 0, 0.3), border = NA)
abline(v = chi_cuadrado, col = "blue", lwd = 2, lty = 2)
legend("topright",
legend = c("Distribución χ²", "Región crítica (5%)", "Nuestro valor"),
col = c("red", rgb(1, 0, 0, 0.3), "blue"),
lty = c(1, 1, 2),
lwd = c(3, 10, 2))
La curva muestra la distribución Chi Cuadrado. Si nuestro valor calculado cae en la zona roja (región crítica), rechazamos la hipótesis de que el dado está equilibrado.
tabla_datos <- data.frame(
Cara = caras,
Observado = resultados_observados,
Esperado = resultados_esperados,
Diferencia = resultados_observados - resultados_esperados
)
print(tabla_datos)
## Cara Observado Esperado Diferencia
## 1 1 8 10 -2
## 2 2 12 10 2
## 3 3 9 10 -1
## 4 4 11 10 1
## 5 5 10 10 0
## 6 6 10 10 0
Esta tabla resume los datos: muestra cuántas veces salió cada cara del dado, cuántas veces esperábamos que saliera, y la diferencia entre ambos valores.
La distribución de Poisson es una herramienta importante para modelar sucesos discretos que ocurren en un intervalo fijo.Este supone que estos sucesos ocurren con una frecuencia media conocida e independientemente del tiempo transcurrido desde el último suceso.
Supongamos eventos donde solo hay dos posibles resultados, como por ejemplo éxito o fracaso. Ahora bien, si esos eventos son muy raros, y hacemos muchos intentos, pero cada uno con una probabilidad muy pequeña de una de las dos posibles respuestas, usamos la distribución de Poisson.
Una de las propiedades más distintivas de la distribución de Poisson es que su media (valor esperado) es igual a su varianza. Ambos están representados por el parámetro λ (lambda), que denota el número medio de sucesos en el intervalo.
La fórmula se denota como:
\[ P(X=k)=\frac{\lambda ^{k}e^{-\lambda }}{k!}\]
λ: Representa la tasa promedio de ocurrencia de los eventos.
k: Número específico de eventos que se quieren calcular la probabilidad de que ocurra.
k representa el número exacto de eventos que se quieran evaluar, por ejemplo, si k=5 es la probabilidad de que ocurran esos 5 eventos exactamente.
La forma de la distribución de Poisson varía en función del valor de λ:
Para valores pequeños de λ (λ < 10), la distribución es notablemente sesgada a la derecha. Esto significa que es común que haya pocos eventos, pero de vez en cuando pueden aparecer eventos grandes.
A medida que aumenta λ (λ > 10), la distribución se vuelve más simétrica y empieza a parecerse a una distribución normal. Esta simetría indica que los datos están distribuidos más uniformemente en torno a la media.
Consideremos un escenario donde en cierta zona del mundo durante una tormenta, caen en promedio 30 rayos por hora, y queremos calcular la probabilidad de que caigan justamente los 30 rayos en una hora.
Primero toca considerar los datos que nos dan, y asimilarlos con las variables de la distribución. Según las definiciones, λ corresponde a la cantidad de rayos que caen en promedio (λ=30). Ahora, k corresponde a la cantidad de rayos que queremos calcular, entonces k=30.
k<-30
lambda<-30
probab<-dpois(k,lambda)
print(paste("la probabilidad de que caigan los 30 rayos es de",probab*100,"%"))
## [1] "la probabilidad de que caigan los 30 rayos es de 7.26345264715915 %"
#Este apartado es para la tabla completa de probabilidades
todok<-10:(1.7*lambda)
dfinal<-data.frame(Rayos=todok, Probabilidad= dpois(todok,lambda))
head(dfinal, 50)
## Rayos Probabilidad
## 1 10 1.522702e-05
## 2 11 4.152825e-05
## 3 12 1.038206e-04
## 4 13 2.395861e-04
## 5 14 5.133987e-04
## 6 15 1.026797e-03
## 7 16 1.925245e-03
## 8 17 3.397491e-03
## 9 18 5.662486e-03
## 10 19 8.940767e-03
## 11 20 1.341115e-02
## 12 21 1.915879e-02
## 13 22 2.612562e-02
## 14 23 3.407689e-02
## 15 24 4.259611e-02
## 16 25 5.111534e-02
## 17 26 5.897924e-02
## 18 27 6.553248e-02
## 19 28 7.021338e-02
## 20 29 7.263453e-02
## 21 30 7.263453e-02
## 22 31 7.029148e-02
## 23 32 6.589826e-02
## 24 33 5.990751e-02
## 25 34 5.285957e-02
## 26 35 4.530820e-02
## 27 36 3.775683e-02
## 28 37 3.061365e-02
## 29 38 2.416867e-02
## 30 39 1.859128e-02
## 31 40 1.394346e-02
## 32 41 1.020253e-02
## 33 42 7.287524e-03
## 34 43 5.084319e-03
## 35 44 3.466581e-03
## 36 45 2.311054e-03
## 37 46 1.507209e-03
## 38 47 9.620485e-04
## 39 48 6.012803e-04
## 40 49 3.681308e-04
## 41 50 2.208785e-04
## 42 51 1.299285e-04
Aquí se pueden ver las probabilidades por cantidad de rayos que pueden caer en una hora.
# Gráfica del escenario de ejemplo
plot(todok, dfinal$Probabilidad,
type = "h", lwd = 3, lend = 1,
xlab = "Número de rayos en una hora (x)",
ylab = "Probabilidad P(X = x)",
main = paste("Distribución Poisson (λ =", lambda, ")"),
col = "red",
border="black")
abline(v = k, col = "blue", lwd = 2)
points(k, probab, pch = 19, col = "yellow")
La línea vertical azul marca el punto donde la cantidad de rayos es la que quisimos calcular.
El punto amarillo indica la probabilidad de que estos 30 rayos caigan en una hora.
La distribución exponencial es una distribución probabilística continua que modela el tiempo entre sucesos en el que estos ocurren de continua e independiente. Los valores de una variable aleatoria exponencial se presentan de manera que hay menos valores grandes y más valores pequeños.
La distribución exponencial tiene varias propiedades únicas que la hacen especialmente útil en aplicaciones del mundo real:
La propiedad sin memoria: Ésta es quizá la característica más distintiva de la distribución exponencial. Significa que el comportamiento futuro del sistema no depende de su historia pasada.
Formulación matemática: La distribución exponencial está definida por un único parámetro λ (lambda), que representa el parámetro de la tasa. Veamos sus componentes matemáticos clave.
La distribución exponencial contiene variedad de fórmulas clave, y son las siguientes:
\[ f(x)=\lambda e^{-\lambda x},\forall x\geq 0\]
\[g(x)=1-e^{-\lambda x},\forall x\geq 0\]
\[s(x)=P(X>x)=e^{-\lambda x}\]
\[h(x)=\frac{f(x)}{s(x)} = \lambda \to (constante)\]
\[Media=\frac{1}{\lambda }\]
donde:
El tiempo que las parejas dedican a comprar tarjetas de aniversario se puede modelar mediante una distribución exponencial con un tiempo promedio de ocho minutos. Escriba la distribución, indique la función de densidad de probabilidad y grafíquela.
Primero toca encontrar el parámetro lambda: \[\lambda =\frac{1}{Media}=\frac{1}{8}=0.125\]
Luego toca reemplazar el parámetro lambda en la función de densidad: \[f(x)=0.125 e^{-0.125x}\]
Ahora, con esto, se puede crear la gráfica del ejercicio
lambda <- 1/8
# Esta es la función de densidad de probabilidad
x <- seq(0,60, by=0.1)
y <- dexp(x, rate = lambda)
df <- data.frame(
Minutos = x,
Densidad = y)
print(head(df, 15))
## Minutos Densidad
## 1 0.0 0.1250000
## 2 0.1 0.1234472
## 3 0.2 0.1219137
## 4 0.3 0.1203993
## 5 0.4 0.1189037
## 6 0.5 0.1174266
## 7 0.6 0.1159679
## 8 0.7 0.1145274
## 9 0.8 0.1131047
## 10 0.9 0.1116997
## 11 1.0 0.1103121
## 12 1.1 0.1089418
## 13 1.2 0.1075885
## 14 1.3 0.1062520
## 15 1.4 0.1049321
En este apartado se saca una tabla con los 15 primeros valores done se relaciona el tiempo en un minuto exacto densidad de probabilidad que la distribución le asigna.
plot(df$Minutos, df$Densidad,
type = "l", lwd = 3, col = "blue",
main = "Distribución Exponencial\n(Tiempo de compra de tarjetas de aniversario)",
xlab = "Minutos",
ylab = "Densidad f(x)")
#esto es para sombrear el área bajo la curva
polygon(c(min(x), x, max(x)),
c(0, y, 0),
col="lightblue")
lines(df$Minutos, df$Densidad, lwd=3, col="blue")