En este documento, exploraremos las principales distribuciones de probabilidad utilizadas en estadistica, su interpretacion, su aplicacion en R y la manera en que pueden ser visualizadas.
Con estos ejercicios vamos a simular que calculamos estadísticos para algunas variables.
Crear una secuencia de datos numéricos
x <- seq(1, 5, length = 100) #Crear un vector 100 números desde el 1 hasta el 5
x
## [1] 1.000000 1.040404 1.080808 1.121212 1.161616 1.202020 1.242424 1.282828
## [9] 1.323232 1.363636 1.404040 1.444444 1.484848 1.525253 1.565657 1.606061
## [17] 1.646465 1.686869 1.727273 1.767677 1.808081 1.848485 1.888889 1.929293
## [25] 1.969697 2.010101 2.050505 2.090909 2.131313 2.171717 2.212121 2.252525
## [33] 2.292929 2.333333 2.373737 2.414141 2.454545 2.494949 2.535354 2.575758
## [41] 2.616162 2.656566 2.696970 2.737374 2.777778 2.818182 2.858586 2.898990
## [49] 2.939394 2.979798 3.020202 3.060606 3.101010 3.141414 3.181818 3.222222
## [57] 3.262626 3.303030 3.343434 3.383838 3.424242 3.464646 3.505051 3.545455
## [65] 3.585859 3.626263 3.666667 3.707071 3.747475 3.787879 3.828283 3.868687
## [73] 3.909091 3.949495 3.989899 4.030303 4.070707 4.111111 4.151515 4.191919
## [81] 4.232323 4.272727 4.313131 4.353535 4.393939 4.434343 4.474747 4.515152
## [89] 4.555556 4.595960 4.636364 4.676768 4.717172 4.757576 4.797980 4.838384
## [97] 4.878788 4.919192 4.959596 5.000000
mean(x)
## [1] 3
sd(x)
## [1] 1.172181
En R, puedes crear un vector dicotómico que represente, por ejemplo, si una persona tiene o no tiene acceso a Internet en su hogar
Vector categórico
# Crear un vector categórico con "S" (Sí) y "N" (No)
acceso_internet <- c("S", "S", "N", "S", "N", "S", "S", "N", "S", "N", "S", "S", "S", "N", "N")
# Crear un vector categórico con "S" (Sí) y "N" (No)
acceso_internet <- c("S", "S", "N", "S", "N", "S", "S", "N", "S", "N", "S", "S", "S", "N", "N")
# Calcular la proporción de "S" y "N"
prop_S2 <- mean(acceso_internet == "S") # Proporción de "S"
prop_N2 <- mean(acceso_internet == "N") # Proporción de "N"
prop_S2
## [1] 0.6
prop_N2
## [1] 0.4
**Cuando se representa con (1 = Sí, 0 = No). Luego, puedes calcular la proporción de cada categoría.
# Crear un vector dicotómico (1 = Tiene acceso a Internet, 0 = No tiene)
y <- c(1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1,0, 1, 1, 1, 1)
Calcular proporciones
prop_1 <- mean(acceso_internet == 1) # Proporción de personas con acceso
prop_0 <- mean(acceso_internet == 0) # Proporción de personas sin acceso
prop_1
## [1] 0
prop_0
## [1] 0
dpqr para distribuciones de probabilidadR proporciona cuatro funciones fundamentales para manejar distribuciones de probabilidad, se utilizan comando + distribución*:
La densidad de probabilidad es una función matemática que describe la probabilidad relativa de que una variable aleatoria tome un valor específico dentro de un rango. En el caso de una distribución continua, como la normal, la probabilidad exacta de un solo punto es cero, por lo que en su lugar analizamos la densidad de probabilidad.
Ejemplo, creamos un vector numéricos:
x <- seq(1, 5, length = 100)
x
## [1] 1.000000 1.040404 1.080808 1.121212 1.161616 1.202020 1.242424 1.282828
## [9] 1.323232 1.363636 1.404040 1.444444 1.484848 1.525253 1.565657 1.606061
## [17] 1.646465 1.686869 1.727273 1.767677 1.808081 1.848485 1.888889 1.929293
## [25] 1.969697 2.010101 2.050505 2.090909 2.131313 2.171717 2.212121 2.252525
## [33] 2.292929 2.333333 2.373737 2.414141 2.454545 2.494949 2.535354 2.575758
## [41] 2.616162 2.656566 2.696970 2.737374 2.777778 2.818182 2.858586 2.898990
## [49] 2.939394 2.979798 3.020202 3.060606 3.101010 3.141414 3.181818 3.222222
## [57] 3.262626 3.303030 3.343434 3.383838 3.424242 3.464646 3.505051 3.545455
## [65] 3.585859 3.626263 3.666667 3.707071 3.747475 3.787879 3.828283 3.868687
## [73] 3.909091 3.949495 3.989899 4.030303 4.070707 4.111111 4.151515 4.191919
## [81] 4.232323 4.272727 4.313131 4.353535 4.393939 4.434343 4.474747 4.515152
## [89] 4.555556 4.595960 4.636364 4.676768 4.717172 4.757576 4.797980 4.838384
## [97] 4.878788 4.919192 4.959596 5.000000
mean(x)
## [1] 3
sd(x)
## [1] 1.172181
Usamos la función d + la distribución esta funcion devuelve la densidad de probabilidad en un punto especifico de la distribucion normal estandar. Nos dice que tan probable es que un valor especifico ocurra. Obtendremos las probabilidades para cada valor de x:
#Aquí se utiliza la función d:
densidad <- dnorm(x, mean = 3 , sd = 1)
densidad
## [1] 0.05399097 0.05848724 0.06325461 0.06829898 0.07362533 0.07923761
## [7] 0.08513860 0.09132982 0.09781147 0.10458224 0.11163931 0.11897819
## [13] 0.12659268 0.13447478 0.14261464 0.15100051 0.15961869 0.16845351
## [19] 0.17748736 0.18670064 0.19607183 0.20557752 0.21519246 0.22488967
## [25] 0.23464051 0.24441479 0.25418095 0.26390617 0.27355653 0.28309726
## [31] 0.29249286 0.30170735 0.31070449 0.31944801 0.32790184 0.33603039
## [37] 0.34379874 0.35117292 0.35812016 0.36460914 0.37061018 0.37609553
## [43] 0.38103951 0.38541877 0.38921247 0.39240239 0.39497314 0.39691225
## [49] 0.39821028 0.39886088 0.39886088 0.39821028 0.39691225 0.39497314
## [55] 0.39240239 0.38921247 0.38541877 0.38103951 0.37609553 0.37061018
## [61] 0.36460914 0.35812016 0.35117292 0.34379874 0.33603039 0.32790184
## [67] 0.31944801 0.31070449 0.30170735 0.29249286 0.28309726 0.27355653
## [73] 0.26390617 0.25418095 0.24441479 0.23464051 0.22488967 0.21519246
## [79] 0.20557752 0.19607183 0.18670064 0.17748736 0.16845351 0.15961869
## [85] 0.15100051 0.14261464 0.13447478 0.12659268 0.11897819 0.11163931
## [91] 0.10458224 0.09781147 0.09132982 0.08513860 0.07923761 0.07362533
## [97] 0.06829898 0.06325461 0.05848724 0.05399097
Graficar la densidad (probabilidad para cada valor de x):
plot(x, densidad, type = "l", col = "blue", main = "Densidad de Probabilidad Normal",
ylab = "Densidad", xlab = "Valores")
En el grafico, los valores cercanos a la media (0) tienen mayor probabilidad.
Esta funcion devuelve la probabilidad acumulada de que un valor sea menor o igual a un punto dado.
#Probabilidad acumulada Z hasta 1.96
pnorm(1.96, mean=0, sd=1)
## [1] 0.9750021
La probabilidad acumulada hasta que Z valga 1.96 es del 0.975. Recuerde que estamos hablando de una distribución Z porque usamos la función p + norm (normal) con media = o y desviación = 1.
Si pnorm(1.96, mean=0, sd=1) da 0.975, significa que el
97.5% de los valores en una normal estandar son menores a 1.96 en otras
palabras.
Esta funcion devuelve el valor correspondiente a un percentil dado, no aroja probabilidad, si no, el valor que tomaría X de acuerdo a la posición percentil.
Ejemplo:
qnorm(0.975, mean = 0, sd = 1)
## [1] 1.959964
Note que esta función hace lo contrario a la anterior, Le ingresamos una probabilidad y nos arroja el valor de x, en este caso Z
Esta funcion genera valores aleatorios de una distribucion con los parametros dados, en este caso normal:
set.seed(123) # Para reproducibilidad, para que se generen siempre los mismos valores, si no se usa, cada vez que ejecute las líneas de código, se crearán valores aleatorios nuevos.
datos = rnorm(100, mean = 0, sd = 1)
datos
## [1] -0.560475647 -0.230177489 1.558708314 0.070508391 0.129287735
## [6] 1.715064987 0.460916206 -1.265061235 -0.686852852 -0.445661970
## [11] 1.224081797 0.359813827 0.400771451 0.110682716 -0.555841135
## [16] 1.786913137 0.497850478 -1.966617157 0.701355902 -0.472791408
## [21] -1.067823706 -0.217974915 -1.026004448 -0.728891229 -0.625039268
## [26] -1.686693311 0.837787044 0.153373118 -1.138136937 1.253814921
## [31] 0.426464221 -0.295071483 0.895125661 0.878133488 0.821581082
## [36] 0.688640254 0.553917654 -0.061911711 -0.305962664 -0.380471001
## [41] -0.694706979 -0.207917278 -1.265396352 2.168955965 1.207961998
## [46] -1.123108583 -0.402884835 -0.466655354 0.779965118 -0.083369066
## [51] 0.253318514 -0.028546755 -0.042870457 1.368602284 -0.225770986
## [56] 1.516470604 -1.548752804 0.584613750 0.123854244 0.215941569
## [61] 0.379639483 -0.502323453 -0.333207384 -1.018575383 -1.071791226
## [66] 0.303528641 0.448209779 0.053004227 0.922267468 2.050084686
## [71] -0.491031166 -2.309168876 1.005738524 -0.709200763 -0.688008616
## [76] 1.025571370 -0.284773007 -1.220717712 0.181303480 -0.138891362
## [81] 0.005764186 0.385280401 -0.370660032 0.644376549 -0.220486562
## [86] 0.331781964 1.096839013 0.435181491 -0.325931586 1.148807618
## [91] 0.993503856 0.548396960 0.238731735 -0.627906076 1.360652449
## [96] -0.600259587 2.187332993 1.532610626 -0.235700359 -1.026420900
Se crearon 100 números aleatorios que siguen una distribución normal estándar.
set.seed() es una función en R que establece una semilla aleatoria para la generación de números pseudoaleatorios. Esto significa que garantiza que los resultados de cálculos aleatorios sean reproducibles cada vez que se ejecuta el código. Si no se fija una semilla con set.seed(), cada vez que ejecutes el código obtendrás diferentes valores aleatorios.
hist(datos, breaks = 30, col = "lightblue", main = "Muestra Aleatoria de distribución Normal",
xlab = "Valores")
Aqui generamos 1000 valores aleatorios de una normal estandar y los visualizamos en un histograma.
A continuacion, exploramos tres distribuciones discretas: Bernoulli, Binomial y Poisson.
La distribucion de Bernoulli modela experimentos con solo dos posibles resultados: exito (1) o fracaso (0). La funcion de masa de probabilidad (PMF) es:
\[ P(X = x) = p^x (1-p)^{1-x}, \quad x \in \{0,1\} \]
p <- 0.5 # Probabilidad de exito
x <- c(0, 1)
densidad_bernoulli <- dbinom(x, size = 1, prob = p)
barplot(densidad_bernoulli, names.arg = x, col = "steelblue",
main = "Distribucion de Bernoulli", ylab = "Probabilidad", xlab = "Valores")
La distribucion binomial modela el numero de exitos en n
ensayos independientes de Bernoulli con probabilidad p. Su
PMF es:
\[ P(X = k) = \binom{n}{k} p^k (1-p)^{n-k}, \quad k = 0,1,\dots,n \]
densidad_binomial <- dbinom(0:10, size = 10, prob = 0.5) # size = número de ensayos y prob = Probabilidad de exito
barplot(densidad_binomial, names.arg = 0:10, col = "steelblue",
main = "Distribucion Binomial", ylab = "Probabilidad", xlab = "Numero de exitos")
La distribucion normal es una de las mas utilizadas en estadistica
debido a su presencia en fenomenos naturales y cientificos. Se
caracteriza por dos parametros: - Media
(mu): Indica el centro de la distribucion. -
Desviacion estandar (sigma): Define la
dispersion de los datos.
La funcion de densidad de probabilidad para la distribucion normal es:
\[ f(x) = \frac{1}{\sigma \sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}} \]
En R podemos visualizarla de la siguiente manera:
x <- seq(4, 8, length = 100) #Crear una secuencia de 100 números del -4 al 4
x
## [1] 4.000000 4.040404 4.080808 4.121212 4.161616 4.202020 4.242424 4.282828
## [9] 4.323232 4.363636 4.404040 4.444444 4.484848 4.525253 4.565657 4.606061
## [17] 4.646465 4.686869 4.727273 4.767677 4.808081 4.848485 4.888889 4.929293
## [25] 4.969697 5.010101 5.050505 5.090909 5.131313 5.171717 5.212121 5.252525
## [33] 5.292929 5.333333 5.373737 5.414141 5.454545 5.494949 5.535354 5.575758
## [41] 5.616162 5.656566 5.696970 5.737374 5.777778 5.818182 5.858586 5.898990
## [49] 5.939394 5.979798 6.020202 6.060606 6.101010 6.141414 6.181818 6.222222
## [57] 6.262626 6.303030 6.343434 6.383838 6.424242 6.464646 6.505051 6.545455
## [65] 6.585859 6.626263 6.666667 6.707071 6.747475 6.787879 6.828283 6.868687
## [73] 6.909091 6.949495 6.989899 7.030303 7.070707 7.111111 7.151515 7.191919
## [81] 7.232323 7.272727 7.313131 7.353535 7.393939 7.434343 7.474747 7.515152
## [89] 7.555556 7.595960 7.636364 7.676768 7.717172 7.757576 7.797980 7.838384
## [97] 7.878788 7.919192 7.959596 8.000000
densidad <- dnorm(x, mean = 6, sd = 0.5) #obtener las densidades (p) de cada número para la distribución Normal estandar y guardarlos en el objeto "densidad"
densidad
## [1] 0.0002676605 0.0003685906 0.0005042761 0.0006854197 0.0009255692
## [6] 0.0012417246 0.0016550295 0.0021915444 0.0028830946 0.0037681796
## [11] 0.0048929229 0.0063120326 0.0080897328 0.0103006160 0.0130303565
## [16] 0.0163762131 0.0204472422 0.0253641367 0.0312585990 0.0382721634
## [21] 0.0465543853 0.0562603283 0.0675473021 0.0805708292 0.0954798526
## [26] 0.1124112370 0.1314836630 0.1527910596 0.1763957719 0.2023217069
## [31] 0.2305477404 0.2610017025 0.2935552764 0.3280201494 0.3641457400
## [36] 0.4016187924 0.4400650707 0.4790533174 0.5181015431 0.5566856162
## [41] 0.5942500061 0.6302204191 0.6640179600 0.6950743503 0.7228476598
## [46] 0.7468379475 0.7666021883 0.7817678624 0.7920446268 0.7972335586
## [51] 0.7972335586 0.7920446268 0.7817678624 0.7666021883 0.7468379475
## [56] 0.7228476598 0.6950743503 0.6640179600 0.6302204191 0.5942500061
## [61] 0.5566856162 0.5181015431 0.4790533174 0.4400650707 0.4016187924
## [66] 0.3641457400 0.3280201494 0.2935552764 0.2610017025 0.2305477404
## [71] 0.2023217069 0.1763957719 0.1527910596 0.1314836630 0.1124112370
## [76] 0.0954798526 0.0805708292 0.0675473021 0.0562603283 0.0465543853
## [81] 0.0382721634 0.0312585990 0.0253641367 0.0204472422 0.0163762131
## [86] 0.0130303565 0.0103006160 0.0080897328 0.0063120326 0.0048929229
## [91] 0.0037681796 0.0028830946 0.0021915444 0.0016550295 0.0012417246
## [96] 0.0009255692 0.0006854197 0.0005042761 0.0003685906 0.0002676605
plot(x, densidad, type = "l", col = "blue", main = "Distribucion Normal",
ylab = "Densidad", xlab = "Valores")
Es un caso especial de la normal con media 0 y desviacion estandar 1.
x <- seq(-4, 4, length = 100)
densidad <- dnorm(x, mean = 0, sd = 1)
plot(x, densidad, type = "l", col = "red", main = "Densidad de la distribución Normal Estandar",
ylab = "Densidad", xlab = "Valores")
Esta distribucion se utiliza cuando el tamano de la muestra es pequeno y la varianza poblacional es desconocida. Su funcion de densidad es:
\[ f(t) = \frac{\Gamma((v+1)/2)}{\sqrt{v\pi} \Gamma(v/2)} \left( 1 + \frac{t^2}{v} \right)^{-(v+1)/2} \]
donde \(v\) es el numero de grados de libertad.
x <- seq(-4, 4, length = 100)
densidad_t <- dt(x, df = 10) #df significa: Grados de libertad
plot(x, densidad_t, type = "l", col = "green", main = "Distribucion t de Student",
ylab = "Densidad", xlab = "Valores")
### Los grados de libertad en la distribución t: Para visualizar la
convergencia de la distribucion t a la normal estandar a medida que
aumentan los grados de libertad, graficamos ambas en la misma
figura.
x <- seq(-4, 4, length = 100)
# Definir los grados de libertad
grados_libertad <- c(1, 5, 28)
colores <- c("red", "green", "orange")
Graficando en comparación con la distribución Normal Estándar:
# Graficar la distribucion normal estandar
plot(x, dnorm(x, mean = 0, sd = 1), type = "l", col = "black", lwd = 2,
main = "Comparacion entre la Distribucion t y la Normal Estandar",
ylab = "Densidad", xlab = "Valores", ylim = c(0, 0.45))
# Agregar las distribuciones t con diferentes grados de libertad
for (i in 1:length(grados_libertad)) {
lines(x, dt(x, df = grados_libertad[i]), col = colores[i], lwd = 2)
}
# Agregar una leyenda
legend("topright", legend = c("Normal Estandar", paste("t (df=", grados_libertad, ")")),
col = c("black", colores), lwd = 2)
Esta distribucion se usa en pruebas de hipotesis y analisis de varianza. Se obtiene como la suma de los cuadrados de \(k\) variables aleatorias normales estandar.
Su funcion de densidad es: \[ f(x) = \frac{x^{(k/2)-1} e^{-x/2}}{2^{k/2} \Gamma(k/2)} \]
x <- seq(0, 20, length = 100)
densidad_chi2 <- dchisq(x, df = 5) #df significa grados de libertad
plot(x, densidad_chi2, type = "l", col = "purple", main = "Distribucion Chi-cuadrado",
ylab = "Densidad", xlab = "Valores")
Se usa para comparar varianzas en pruebas de hipotesis. Es la razon de dos distribuciones Chi-cuadrado divididas por sus respectivos grados de libertad:
\[ F = \frac{(\chi^2_{df1} / df1)}{(\chi^2_{df2} / df2)} \]
x <- seq(0, 5, length = 100)
densidad_f <- df(x, df1 = 5, df2 = 10) #df1 y df2 son lso grados de libertad
plot(x, densidad_f, type = "l", col = "orange", main = "Distribucion F",
ylab = "Densidad", xlab = "Valores")
Las distribuciones muestrales describen la variabilidad de un estadístico muestral (como la media, proporción o varianza) a través de diferentes muestras tomadas de una misma población.
Diferencia clave
Mientras que una distribución de probabilidad describe cómo se comporta
una sola variable aleatoria, Una distribución muestral describe
cómo varía un estadístico, como la media muestral, al
tomar muchas muestras.
set.seed(123) #Sembrar semilla para que solo se generen valores aletorios una vez
medias <- numeric(1000) # Vector vacío para guardar las medias
Se crean 1000 muestras de 30 observaciones cada, cada una a partir de una distribución normal com media 50 y desviación estándar de 10. Luego, se guardan todas las medias muestrales.
#Esto es un blucle: acción repetitiva:
for (i in 1:1000) { #Para cada i desde 1 hasta 1000, generar una muestra a partir de una distribución normal
muestra <- rnorm(30, mean = 50, sd = 10) # Cada muestra tiene 30 observaciones y sigue distribución normal con media 50 y desvición estándar de 10
medias[i] <- mean(muestra) # Guardamos las medias muestrales en el vector medias
}
head(medias) #Mostrar las primeras medias generadas
## [1] 49.52896 51.78338 50.24420 49.06111 48.16420 51.53717
Graficando la media de cada muestra en un histograma:
hist(medias, breaks = 30, col = "lightblue", probability = TRUE,
main = "Distribucion Muestral de la Media",
xlab = "Media Muestral")
lines(density(medias), col = "red", lwd = 2) # Agregamos la curva de densidad
La forma de campana describe cómo el histograma se aproxima a una distribución normal.
La distribucion de la varianza muestral sigue una distribucion chi-cuadrado.
Ahora vamos a generar nuevamente 1000 muestras de tamaño 30 que sigan distribución normal con media 50 y desviación estándar de 30:
set.seed(123) #Semilla para que no se generen valores diferentes cada vez que se corra el código
varianzas <- numeric(1000) # Crear vector númerico con el tamaño de las n muestras
#Crear en bucle las 1000 muestras y calcular la varianza de cada una
for (i in 1:1000) {
muestra <- rnorm(30, mean = 50, sd = 10) #generar muestras normales con media 50 y desviación estándar de 10
varianzas[i] <- var(muestra) #Guardar las varianzas de cada muestra.
}
Graficando en un histograma las 1000 varianzas calculadas (una para cada muestra):
hist(varianzas, breaks = 30, col = "pink", probability = TRUE,
main = "Distribucion Muestral de la Varianza",
xlab = "Varianza Muestral")
lines(density(varianzas), col = "red", lwd = 2)
Se puede apreciar la forma muy similar a la distribución chi cuadrada.
Si tomamos muestras de una población binomial, la proporcion de “exitos” en cada muestra sigue una distribucion aproximadamente normal si el tamaño de la muestra es suficientemente grande.
set.seed(123)
poblacion <- rbinom(10000, size = 1, prob = 0.4) # Poblacion binaria con p = 0.4
proporciones <- numeric(1000)# Crear vector númerico con el tamaño de las n muestras
Se crean 1000 muestras, cada una a partir de una distribución binomial com probabilidad de éxito de 0.4. Luego, se guardan todas las proporciones de éxito muestrales.
for (i in 1:1000) {
muestra <- sample(poblacion, 50)
proporciones[i] <- mean(muestra) #Calcular la proporción de exitos en cada muestra
}
hist(proporciones, breaks = 30, col = "lightgreen", probability = TRUE,
main = "Distribucion Muestral de la Proporcion",
xlab = "Proporcion Muestral")
lines(density(proporciones), col = "red", lwd = 2)
Se puede apreciar como la distribución binomial se acerca mucho a la distribución normal.