Distribuciones de probabilidad

Modified

Sunday, November 5, 2023

#| results: false

paquetes <- c("rethinking", "tidyverse", "magrittr", 'extrafont',
              'cowplot', 'gganimate', "cmdstanr", 'bayesplot',
              'rstan', 'lterdatasampler')
sapply(paquetes, library, character.only = T)

knitr::opts_chunk$set(echo = TRUE, warning = F, message = F)

1 Distribuciones de probabilidad

Las distribuciones de probabilidad son ecuaciones que describen, dado unos parámetros particulares, la ocurrencia probabilística de valores en una variable aleatoria. Es decir, las distribuciones de probabilidad son modelos generadores de datos, y se dividen en dos categorías discretas y continuas.

R tienen integrado una gama amplia de distribuciones de probabilidad, con funciones que nos permiten generar números aleatorios, probabilidades teóricas, probabilidades acumuladas y quantiles. En general, las funciones que definen cada distribución tienen un nombre autoexplicativo, pero la sintaxis de todas coincide en la letra inicial:

  • r para generar número aleatorios.
  • d cálculo de las probabilidades teóricas.
  • p cálculo de las probabilidades teóricas acumuladas.
  • q Estimación de cuantiles.

Por ejemplo: las funciones para el uso de la distribución binomial son rbinom, dbinom, pbinom y qbinom. Veamos algunos ejemplos de distribuciones comúnmente empleadas en ecología.

1.1 Distribuciones de probabilidad discretas


1.1.1 \(Binomial(n, p)\)

Se emplea para modelar probabilidades en ensayos de Bernoulli o número de éxitos en una serie de ensayos.

Ejemplos: obtener cara o sello en un lanzamiento de moneda, por supuesto; supervivencia de crías en una camada con un valor inicial; remoción de frutos.

par(mfrow = c(2, 2))
p <- c(0.1, 0.3, 0.6, 0.9)
for(i in 1:4) hist(rbinom(1e3, 10, p[i]), main = paste('p=', p[i]))

1.1.2 \(Poisson(\lambda)\)

Es una distribución de probabilidad que describe conteos (i.e. valores discretos). Es un caso especial de la distribución binomial cuando la probabilidad de cada evento de éxito es muy baja.

Ejemplos: número de semillas, número de visitas florales, número de gatos en Villavicencio.

par(mfrow = c(2, 2))

lambda <- round(seq(2, 10, length.out = 4))

for(i in 1:4) plot(density(rpois(1e3, lambda[i])), main = paste('lambda=', lambda[i]))

1.1.3 \(Binomial Negativa(\tau, \lambda)\)

También conocida como gamma-poisson es una distribución de probabilidad que, a diferencia de la poisson, presenta un parámetro de sobredisperción (\(\tau\) o size en R). En un sentido general, este parámetro de dispersión asigna una tasa de ocurrencia diferente a cada evento (i.e. considera variación aleatoria en cada una de las observaciones, en la poisson esta tasa es constante).

Ejemplos: considera conteos como la distribución Poisson, pero con mayor variabilidad.

plot(density(rnbinom(1e3, size = 1, mu = 2)))

1.1.4 \(Geometrica(p)\)

La distribución geométrica se usa para modelar el éxito de un evento tras un serie repetida de ensayos con igual probabilidad.

Ejemplo: supongamos que la probabilidad de que un macho de ave del paraíso, cualquiera que sea, consiga aparearse con una hembra después de cortejarla es \(P(apareamiento) = 0.3\). Podemos emplear una distribución geométrica para estimar cuantas hembras debería el macho cortejar para conseguir aparearse —desde luego, suponiendo que todos los machos y las hembras tienen la misma probabilidad de éxito para cortejar y ser cortejados, respectivamente.

par(mfrow = c(1, 1))
plot(density(rgeom(1e3, 0.3)))

1.1.5 \(Beta-binomial(n, p, \theta)\)

Es una composición entre la distribución binomial y la Beta que, de manera análoga a la Binomial-negativa, emplea un parámetro de sobredispersión. Para emplearla en R debemos usar el paquete emdbook.

par(mfrow = c(2, 2))
theta <- round(seq(0.1, 2, length.out = 4), 2)
for(i in 1:4) plot(density(emdbook::rbetabinom(1e3, 0.3, 10, theta[i])), main = paste('theta =', theta[i]))

1.2 Distribuciones de probabilidad continua


1.2.1 \(Uniforme(a, b)\)

Modela eventos con igual probabilidad de ocurrencia en un rango \(a-b\).

par(mfrow = c(1, 1))

hist(runif(1e3, 0, 1))

1.2.2 \(Normal(\mu, \sigma)\)

Se emplea para modelar datos continuos sin límites particulares. Su forma lo controlan dos parámetros, la media (\(\mu\)) y la varianza (\(\sigma\)).

plot(density(rnorm(1e3, 0, 1)))

1.2.3 \(Exponencial(\lambda)\)

Es una distribución de probabilidad que está restringida entre 0 e \(\infty\). Es frecuentemente empleada para asignar previas a parámetros de dispersión (e.g. \(\sigma\) en la distribución normal).

par(mfrow = c(2, 2))
for (i in 1:4) plot(density(rexp(1e3, i)), 
                    main = paste('exponential(', i,')', sep = ''))

1.2.4 \(Gamma(k, \theta)\)

La distribución gamma está restringida a valores positivos mayores a cero, y su forma está controlada por dos parámetros shape (\(k = \frac{\mu^2}{\sigma}\)) y rate (\(\theta = \frac{\mu}{\sigma}\)). Es la contraparte continua de la distribución binomial-negativa.

Ejemplo: variables continuas positivas con sobredispersión

par(mfrow = c(2, 2))
sigma <- round(seq(10, 60, length.out = 4))
for (i in 1:4) plot(density(rgamma(1e3, 
                                   shape = (18.8^2)/sigma[i], 
                                   rate = 18.8/sigma[i])), main = paste('sigma=', sigma[i]))

1.2.5 \(Beta\)

Modela valores continuos acotados entre 0 y 1, igual que la uniforme. Es una de las distribuciones más flexibles dadas las combinaciones de valores en sus parámetros.

Ejemplos: probabilidades o proporciones

par(mfrow = c(2, 2))
pars <- expand.grid(c(1:5), c(1:5))
pars <- pars[sample(1:nrow(pars), 4), ]
for (i in 1:4) plot(density(rbeta(1e3, pars$Var1[i], pars$Var2[i])),
                   main = paste('shape1=', pars$Var1[i], '-', 'shape2=', pars$Var2[i]))

1.2.6 \(Lognormal(\mu, \sigma)\)

Se usa para modelar valores continuos mayores a cero. El logaritmo de una distribución log-normal es una distribución normal.

par(mfrow = c(1, 2))
log_norm <- rlnorm(1e3, 0 , 1)
plot(density(log_norm))
plot(density(log(log_norm)))

sessionInfo()
R version 4.2.1 (2022-06-23)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Big Sur ... 10.16

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
 [1] lterdatasampler_0.1.1 rstan_2.21.8          StanHeaders_2.21.0-7 
 [4] bayesplot_1.9.0       cmdstanr_0.5.3        gganimate_1.0.8      
 [7] cowplot_1.1.1         extrafont_0.18        magrittr_2.0.3       
[10] lubridate_1.9.2       forcats_1.0.0         stringr_1.5.0        
[13] dplyr_1.1.1           purrr_1.0.1           readr_2.1.4          
[16] tidyr_1.3.0           tibble_3.2.1          ggplot2_3.4.1        
[19] tidyverse_2.0.0       rethinking_2.13.2    

loaded via a namespace (and not attached):
 [1] matrixStats_0.63.0   progress_1.2.2       numDeriv_2016.8-1.1 
 [4] tensorA_0.36.2       tools_4.2.1          backports_1.4.1     
 [7] utf8_1.2.3           R6_2.5.1             DBI_1.1.3           
[10] colorspace_2.1-0     withr_2.5.0          tidyselect_1.2.0    
[13] gridExtra_2.3        prettyunits_1.1.1    processx_3.8.0      
[16] compiler_4.2.1       extrafontdb_1.0      cli_3.6.0           
[19] posterior_1.3.1      scales_1.2.1         checkmate_2.1.0     
[22] mvtnorm_1.1-3        ggridges_0.5.4       callr_3.7.3         
[25] digest_0.6.29        rmarkdown_2.17       pkgconfig_2.0.3     
[28] htmltools_0.5.3      fastmap_1.1.0        bbmle_1.0.25        
[31] htmlwidgets_1.5.4    rlang_1.1.0          rstudioapi_0.14     
[34] shape_1.4.6          farver_2.1.1         generics_0.1.3      
[37] jsonlite_1.8.4       distributional_0.3.1 inline_0.3.19       
[40] loo_2.5.1            Matrix_1.5-1         Rcpp_1.0.10         
[43] munsell_0.5.0        fansi_1.0.4          abind_1.4-5         
[46] lifecycle_1.0.3      stringi_1.7.8        yaml_2.3.5          
[49] MASS_7.3-57          plyr_1.8.7           pkgbuild_1.4.0      
[52] grid_4.2.1           bdsmatrix_1.3-6      crayon_1.5.2        
[55] lattice_0.20-45      hms_1.1.2            magick_2.7.3        
[58] knitr_1.40           ps_1.7.2             pillar_1.8.1        
[61] codetools_0.2-18     stats4_4.2.1         glue_1.6.2          
[64] evaluate_0.17        RcppParallel_5.1.6   vctrs_0.6.1         
[67] tzdb_0.3.0           tweenr_2.0.2         Rttf2pt1_1.3.11     
[70] gtable_0.3.1         emdbook_1.3.13       xfun_0.33           
[73] coda_0.19-4          timechange_0.2.0     ellipsis_0.3.2