Objetivo

Encontrar probabilidades de acuerdo a la distribución binomial.

Descripción

Se identifican ejercicios casos de la literatura de distribuciones de probabilidad binomial y se realizan cálculos de probabilidades, se visualiza la densidad, el diagrama de barra y la probabilidad acumulada determinan el valor esperado y se calcula la varianza y la desviación estándar.

Los ejercicios que se presenta utilizan funciones relacionadas con la distribución binomial dbinom() pbinom(), rbinom() en algunos ejercicios del caso se utiliza la función f.prob.binom() previamente codificada y que encapsula la fórmula para determinar probabilidad binomiales.

Fundamento teórico

El experimento de lanzar al aire una moneda es un ejemplo sencillo de una variable aleatoria binomial. Muchos experimentos prácticos resultan en datos similares a que salga cara o cruz al tirar la moneda (Mendenhall, Beaver, and Beaver 2006)

Un experimento binomial es el que tiene estas cinco características:

  • El experimento consiste en n intentos idénticos.

  • Cada intento resulta en uno de dos resultados, el resultado uno se llama éxito, ‘S’, y el otro se llama fracaso, ‘F’.

  • La probabilidad de éxito en un solo intento es igual a p y es igual de un intento a otro. La probabilidad de fracaso es igual a

\[ q=(1−p) \]

  • Los intentos son independientes.

  • El interés es el valor de x, o sea, el número de éxitos observado durante los nn intentos, para x=0,1,2,…,n (Mendenhall, Beaver, and Beaver 2006).

Un experimento de Bernoulli puede tener como resultado un éxito con probabilidad p y un fracaso con probabilidad q = 1− p. Entonces, la distribución de probabilidad de la variable aleatoria binomial x, el número de éxito k en n ensayos independientes (Walpole, Myers, and Myers 2012):

Fórmula:

\[ f(x) = prob(x=k) = \binom{n}{k} \cdot p^{k} \cdot q^{(n-k)} \]

Para

\[ x = 0,1,2,3...n \]

y recordando las combinaciones cuantos éxitos k en n ensayos. Interpretar que x = k para la fórmula.

\[ f(x) = \binom{n}{k} = \frac{n!}{k!\cdot(n-k)!} \]

La función acumulada es:

\[ F(x) = \sum_{0}^{n}f.x_i \]

El valor esperado está dado por:

\[ \mu = n \cdot p \]

La varianza y la desviación estándar se determinan mediante:

\[ \sigma^{2} = n \cdot p \cdot(1-p) \]

y

\[ \sigma = \sqrt{\sigma^{2}} \]

En programación R, para calcular la función de probabilidad binomial para un conjunto de valores discretos, x , un número de ensayos n y una probabilidad de éxito p se puede hacer uso de la función dbinom().

De semejante forma, para calcular la probabilidad acumulada de una distribución binomial se puede utilizar la función pbinom() o para calcular la probabilidad de que una variable aleatoria x que sigue una distribución binomial tome valores menores o iguales a x puedes hacer uso de la función pbinom() (rcodera?)

En los siguientes ejercicios también se utilizan funciones de paqutes base de R para la comprensión de la distribución binomial.

(rcoder?)

(statology2019?)

Desarrollo

Cargar librerías

# Estos paquetes necesitan ser instalados cin anticiácón
# install.packages("paquete nombre")
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(mosaic) # Gráficos de distribuciones
## 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 object is masked from 'package:Matrix':
## 
##     mean
## The following object is masked from 'package:ggplot2':
## 
##     stat
## The following objects are masked from 'package:dplyr':
## 
##     count, do, tally
## 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(cowplot) # Para varios gráficos
## 
## Attaching package: 'cowplot'
## The following object is masked from 'package:mosaic':
## 
##     theme_map
library(plotly)
## 
## 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
library(visualize)
options(scipen=999) # Notación normal
# options(scipen=1) # Notación científica

Cargar funciones

Se carga función de servicio github o de manera local

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

Se determina una semilla porque algunos ejercicios calculan valores aleatorios.

set.seed(2023)

Ejercicios

Tienda de ropa MartinClothingStore

Tienda de ropa MartinClothingStore (Anderson, Sweeney, and Williams 2008)
Tienda de ropa MartinClothingStore (Anderson, Sweeney, and Williams 2008)

De acuerdo con la experiencia, el gerente de la tienda estima que la probabilidad de que un cliente realice una compra es 0.30 o 30%

  • Identificar las probabilidad para cuando se compre 0,1,2,3, determinar la tabla de probabilidad incluyendo probabilidad acumulada

  • Encontrar la probabilidad de que compren dos clientes

  • Encontrar la probabilidad de que compren los tres próximos clientes.

  • Encontrar la probabilidad de que sean menor o igual que dos.

  • Calcular la probabilidad de que sean mayor que dos

  • Determinar el valor esperado y su significado

  • Determinar la varianza y la desviación estándar y si significado

  • Interpretar

Probabilidad para 0,1,2,3 y tabla de distribución

Identificar las probabilidad para cuando se compre 0,1,2,3, determinar la tabla de probabilidad incluyendo probabilidad cumulada

  • Inicializar valores
x <- c(0,1,2,3)
n <- 3
exito <- 0.30
  • Determinar tabla de probabilidad usando la función f.prob.binom() creada y conforme a la fórmula.
tabla1 <- data.frame(x=x, f.prob.x = f.prob.binom(x,n,exito), f.acum.x = cumsum(f.prob.binom(x,n,exito)))
tabla1
##   x f.prob.x f.acum.x
## 1 0    0.343    0.343
## 2 1    0.441    0.784
## 3 2    0.189    0.973
## 4 3    0.027    1.000
  • Determinar tabla de probabilidad usando función propia de los paquetes base de R dbinom()
tabla2 <- data.frame(x=x, f.prob.x = dbinom(x = x, size = n, prob = exito), f.acum.x = cumsum(dbinom(x = x, size = n, prob = exito)))
tabla2
##   x f.prob.x f.acum.x
## 1 0    0.343    0.343
## 2 1    0.441    0.784
## 3 2    0.189    0.973
## 4 3    0.027    1.000

con pbinom() en lugar de cumsum()

tabla3 <- data.frame(x=x, f.prob.x = dbinom(x = x, size = n, prob = exito), f.acum.x = pbinom(q = x, size = n, prob = exito))
tabla3
##   x f.prob.x f.acum.x
## 1 0    0.343    0.343
## 2 1    0.441    0.784
## 3 2    0.189    0.973
## 4 3    0.027    1.000

Visualizar tabla de distribución

plotDist(dist = "binom", size=3, prob=0.30,xlab = paste("Variables ",min(tabla1$x),"-",max(tabla1$x) ), xlim = c(-1, n+1)) 

plotDist(dist = "binom", size=3, prob=0.30,xlab = paste("Variables ",min(tabla1$x),"-",max(tabla1$x) ), kind = "histogram", xlim = c(-1, n+1)) 

Probabilidad de que compren dos clientes

Encontrar la probabilidad de que compren dos clientes

  • Identificar la probabilidad cuando P(x = 2) de la tabla.

  • Se puede usar tabla1, tabla2 o tabla3 es la misma.

valor.x <- 2
la.probabilidad <- filter(tabla1, x == valor.x) 
la.probabilidad
##   x f.prob.x f.acum.x
## 1 2    0.189    0.973
paste("La probabilidad cuando x es ", valor.x, " es igual a : ", la.probabilidad$f.prob.x )
## [1] "La probabilidad cuando x es  2  es igual a :  0.189"

Usando dbinom()

dbinom(x = 2, size = 3, prob = exito)
## [1] 0.189

Probabilidad de que compren los tres próximos clientes

Encontrar la probabilidad de que compren los tres próximos clientes

  • Identificar la probabilidad cuando P(x = 3) de la tabla.

  • Se puede usar tabla1, tabla2 o tabla3 es la misma.

valor.x <- 3
la.probabilidad <- filter(tabla1, x == valor.x) 
la.probabilidad
##   x f.prob.x f.acum.x
## 1 3    0.027        1
paste("La probabilidad cuando x es ", valor.x, " es igual a : ", la.probabilidad$f.prob.x )
## [1] "La probabilidad cuando x es  3  es igual a :  0.027"

Usando dbinom()

dbinom(x = 3, size = 3, prob = exito)
## [1] 0.027

Probabilidad de que sean menor o igual que dos

Encontrar la probabilidad de que sean menor o igual que dos

  • Ahora usar la función acumulada por la pregunta

  • P(x = 0) + P(x = 1) + P(x = 2)

valor.x <- 2
la.probabilidad <- filter(tabla1, x == valor.x) 
la.probabilidad
##   x f.prob.x f.acum.x
## 1 2    0.189    0.973
paste("La probabilidad de que sea menor o igual a ", valor.x, " es igual a : ", la.probabilidad$f.acum.x )
## [1] "La probabilidad de que sea menor o igual a  2  es igual a :  0.973"

Usando pbinom()

pbinom(q = 2, size = 3, prob = exito)
## [1] 0.973

Probabilidad de que sean mayor que dos

La expresión lower.tail = FALSE como atributo de la función pbinom() significa encontrar en la tabla de distribución la sumatoria de las probabilidades a partir de el valor de x, o lo que es lo mismo,

\[ 1 - prob.acum(x) \]

\[ 1 - 0.97 = 0.27 \]

pbinom(q = 2, size = 3, prob = exito, lower.tail = FALSE)
## [1] 0.027

Valor esperado

Determinar el valor esperado y su significado

  • El valor esperado de la distribución binomial

\[ \mu = n \cdot p \]

Siendo p el éxito de la probabilidad y n el número de experimentos

VE <- n * exito
paste ("El valor esperado es: ", VE)
## [1] "El valor esperado es:  0.9"

El valor esperado VE significa el valor medio o el valor promedio de todos valores de la distribución de probabilidad.

Varianza y desviación estándar

Determinar la varianza y la desviación estándar y su significado.

  • La varianza en la distribución binomial

\[ \sigma^{2} = n \cdot p \cdot(1-p) \]

varianza <- n * exito *( 1 - exito)
paste ("La varianza es: ", round(varianza,2))
## [1] "La varianza es:  0.63"
  • La desviación

\[ \sigma = \sqrt{\sigma^{2}} \]

desviacion.std <- sqrt(varianza)
paste("La desviación std es: ", round(desviacion.std, 2))
## [1] "La desviación std es:  0.79"

Interpretar el ejercicio

La distribución binomial aplicada en este caso permite al gerente de la tienda anticipar el comportamiento de compra de los clientes. Con una probabilidad de compra del 30%, es más probable que uno o ninguno de los tres próximos clientes realicen una compra. Estas probabilidades pueden ayudar en la planificación de inventario y estrategias de ventas.

Jugador de basquetbol

Un jugador encesta con probabilidad 0.55. (“La Distribución Binomial o de Bernoulli,” n.d.):

  • Determinar las probabilidad de los tiros del 0 al 10 con la tabla de probabilidad

  • Determinar la probabilidad de encestar cuatro tiros P(x = 4)

  • Determinar la probabilidad de encestar todos tiros o sea seis P(x = 6)

  • Determinar la probabilidad de encestar al menos tres P(x < 6) o, P.acum(x = 3)

  • Determinar el valor esperado VE

  • Determinar la varianza y su desviación estándar

  • Interpretar el ejercicio

Tabla de probabilidad (0-10)

A partir de este ejercicio, se manda llamar la función llamada f.binom.all() que se encuentra en el archivo “funciones para distribuciones.r” del enlace https://raw.githubusercontent.com/rpizarrog/Libro-Analisis-de-datos-con-R-2022/main/funciones/funciones%20para%20disribuciones%20de%20probabilidad.R

La función en encapsula la construcción de la tabla de distribución de la variable, el cálculo del valor esperado, la varianza y la desviación estándar, así como gráficos relacionados a la distribución de probabilidad binomial discreta.

Aquí el código de la función

# 14 Abr 2023
# Función para devuelve tabla binomial, VE Varianza y Desv. Std
# de una distribución binomial. 
f.binom.all <- function(n, exito){
  tabla <- data.frame(x = 0:n,
                      f.x = dbinom(x = 0:n, size = n, prob = exito),
                      F.x = pbinom(q = 0:n, size = n, prob = exito))
  tabla
  
  # Valor esperado
  VE <- n * exito # n * p
  
  # Varianza n * p * (n - 1)
  varianza <- n * exito * (1 - exito)
  desv.std <- sqrt(varianza)
  
  g.dens <- plotDist(dist = "binom", 
                     params = c(n, exito), 
                     xlim = c(-1, n+1), 
                     kind = "d",
                     xlab ="X's", 
                     ylab = "Probabilidad", 
                     main='Distribución Binomial')
  
  g.hist <- plotDist(dist = "binom", 
                     params = c(n, exito), 
                     xlim = c(-1, n+1), 
                     kind = "h", 
                     xlab ="X's", 
                     ylab = "Probabilidad", 
                     main='Distribución Binomial')
  
  g.acum <- plotDist(dist = "binom", 
                     params = c(n, exito), 
                     xlim = c(-1, n+1), 
                     kind = "c", 
                     xlab ="X's", 
                     ylab = "Prob Acumulada", 
                     main='Distribución Binomial',
                     sub = "")
  
  t_dist <- 'Distribución Binomial'
  g_barra <- ggplot(data = tabla, aes(x = x, y=f.x , fill=x)) +
    geom_bar(stat="identity") +
    geom_vline(xintercept = VE, color = 'red', linetype = "dashed", size = 1) +
    geom_vline(xintercept = VE - desv.std, color = 'blue', linetype = "dashed", size = 1) +
    geom_vline(xintercept = VE + desv.std, color = 'blue', linetype = "dashed", size = 1) +
    labs(title=t_dist, subtitle = paste("VE", round(VE, 2), "± Desv. Std", round(desv.std, 2)), x="Variable X", y="Probabilidad")
  
  g.text <- ggplot(data = tabla) +
    geom_col(aes(x = x, y = f.x), fill='blue') + 
    ggtitle(label = "Distribución binomial",subtitle = paste("ve=", VE, ";", 
                                                             "var=", round(varianza, 2), ";",
                                                             "sd=", round(desv.std, 2))
    )
  g.hist.plotly <- plot_ly(
    x = c(tabla$x),
    y = c(tabla$f.x),
    type = "bar") %>%
    layout(title = "Distribución binomial",
           xaxis = list(title = "x's"), 
           yaxis = list(title = "Función de Prob. f(X)")
    )
  
  
  g.acum.plotly <- plot_ly(
    x = c(tabla$x),
    y = c(tabla$F.x),
    type = "scatter" ,
    mode = "lines") %>%
    layout(title = "Distribución binomial",
           xaxis = list(title = "x's"), 
           yaxis = list(title = "Función Acumulada F(X)")
    )
  
  
  distribucion <- list(tabla = tabla, VE = VE, 
                       varianza = varianza, desv.std = desv.std, 
                       g.dens = g.dens, 
                       g.hist = g.hist,
                       g.acum = g.acum,
                       g.text = g.text,
                       g_barra = g_barra,
                       g.hist.plotly = g.hist.plotly,
                       g.acum.plotly = g.acum.plotly,
                       g_all = f.hist.dens.discreta(tabla))
  
}

Se construye la tabla de probabilidades

Se inicializan valores:

x <- 0:6
n <- 10
exito <- 0.55

Llamando la función f.binom.all(n = , exito = ) con los argumentos y parámetros adecuados y asignando el contenido a una variable llamada resultado.

A partir de este resultado, se identifican, las tablas de probabilidad, el valor esperado, la varianza, la desviación y algunos gráficos de la distribución.

resultado <-  f.binom.all(n = n, exito = exito)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Tabla de probabilidad (0-6)

resultado$tabla
##     x          f.x          F.x
## 1   0 0.0003405063 0.0003405063
## 2   1 0.0041617435 0.0045022498
## 3   2 0.0228895894 0.0273918393
## 4   3 0.0746031063 0.1019949456
## 5   4 0.1595677552 0.2615627008
## 6   5 0.2340327076 0.4955954083
## 7   6 0.2383666466 0.7339620550
## 8   7 0.1664782929 0.9004403478
## 9   8 0.0763025509 0.9767428988
## 10  9 0.0207241496 0.9974670484
## 11 10 0.0025329516 1.0000000000

Visualización de probabilidades

Visualizando probabilidades con la función plot_grid() permite visualizar de dos o más gráficos en el mismo reglón aprovechando el contenido de la variable resultado.

plot_grid(resultado$g.dens, resultado$g_all$dens  )

plot_grid(resultado$g_barra, resultado$g_all$acum )

Utilizando plotly que se encuentra en la variable resultado

resultado$g.hist.plotly 
resultado$g.acum.plotly

Probabilidad de encestar cuatro tiros

Calcular la probabilidad de encestar cuatro tiros

\[ f(x=4) \]

dbinom(x = 4, size = n, prob = exito)
## [1] 0.1595678

Probabilidad de encestar seis tiros

Determinar la probabilidad de encestar seis tiros

\[ f(x=6) \]

dbinom(x = 6, size = n, prob = exito)
## [1] 0.2383666

Probabilidad de encestar al menos tres

Usando la función pbinom() para determinar el valor acumulado.

\[ f(x \geq3) = 1 - F(x=2) \]

como mínimo 3.

pbinom(q = 3, size = n, prob = exito, lower.tail = FALSE)
## [1] 0.8980051

o utilizando el renglón de la tabla de distribución en la columna de probabilidad acumulada F(x).

valor.x <- 3
la.probabilidad <- filter(resultado$tabla, x == valor.x) 
la.probabilidad
##   x        f.x       F.x
## 1 3 0.07460311 0.1019949
1 - la.probabilidad$F.x
## [1] 0.8980051

Valor esperado

De igual forma utilizar la función

paste("El valor esperado es: ",resultado$VE)
## [1] "El valor esperado es:  5.5"

El valor esperado de 5.5 significa que es lo que se espera encestar en promedio de los n= 10 tiros.

Varianza y desviación

Varianza

paste ("La varianza es: ", round(resultado$varianza, 4))
## [1] "La varianza es:  2.475"

Desviación

paste("La desviación std es: ", round(resultado$desv.std, 4))
## [1] "La desviación std es:  1.5732"

De el valor esperado 5.5 hay una desviación aproximada de 1.5732133 hacia arriba o hacia abajo.

Recuperación de un paciente

La probabilidad de que un paciente se recupere de una rara enfermedad sanguínea es 0.40. Si se sabe que 15 personas contraen tal enfermedad,

  • Determine tabla de probabilidad de 1 al 15, incluyendo el 0.

  • Visualizar la gráfica de probabilidades.

  • ¿Cuál es la probabilidad de que sobrevivan al menos diez,

  • ¿Cuál es la probabilidad de que sobrevivan de tres a ocho? y

  • ¿Cuál es la probabilidad de que sobrevivan exactamente cinco?

  • ¿Cuál es el valor esperado ‘VE’ o la esperanza media?

  • ¿Cual es la varianza y la desviación estándar?

  • ¿Cómo se comportarían las probabilidades para un experimento de 100 personas?

  • Interpretación del ejercicio (Walpole, Myers, and Myers 2012).

Tabla de distribución

Inicializar valores

x <- 0:15
n <- 15
exito <- 0.40

Se construye la tabla de probabilidades con las funciones construidas que se encuentran en enlace citado al principio del documento y con la variable resultado.

resultado <-  f.binom.all(n = n, exito = exito)
resultado$tabla
##     x            f.x         F.x
## 1   0 0.000470184985 0.000470185
## 2   1 0.004701849846 0.005172035
## 3   2 0.021941965947 0.027114001
## 4   3 0.063387901624 0.090501902
## 5   4 0.126775803249 0.217277706
## 6   5 0.185937844765 0.403215550
## 7   6 0.206597605294 0.609813156
## 8   7 0.177083661681 0.786896817
## 9   8 0.118055774454 0.904952592
## 10  9 0.061214105272 0.966166697
## 11 10 0.024485642109 0.990652339
## 12 11 0.007419891548 0.998072231
## 13 12 0.001648864788 0.999721096
## 14 13 0.000253671506 0.999974767
## 15 14 0.000024159191 0.999998926
## 16 15 0.000001073742 1.000000000

Gráfica de probabilidades

La gráfica se presenta con el contenido de alguna gráfica de la variable resultado que contiene lo que devuelve el código de la función ejecutada.

plot_grid(resultado$g.dens, resultado$g_all$dens  )

plot_grid(resultado$g_barra, resultado$g_all$acum )

Utilizando plotly que se encuentra en la variable resultado

# resultado$g.hist.plotly 
# resultado$g.acum.plotly

Probabilidad de que sobrevivan al menos diez

Se requiere la suma de las probabilidades en dónde

\[ f(x\leq 10) \]

o bien

\[ f(x=0) + f(x=1) + f(x=2) ... + f(x=10) \]

o mediante la función acumulada de la probabilidad. F(x =10). Como se necesita la probabilidad acumulada entonces se usa pbinom().

x = 10
prob <- pbinom(q = x, size = n, prob = exito)
paste ("La probabilidad de que se enfermen menos que diez es: ", prob, " o el ", round(prob * 100, 2), "%") 
## [1] "La probabilidad de que se enfermen menos que diez es:  0.990652339224576  o el  99.07 %"

La probabilidad de que sobrevivan de tres a ocho

Se requiere el valor acumulado entre tres y ocho es decir,

\[ F(x=8) - F(x=2) \]

las probabilidades de tres a ocho

\[ f(x=3) + f(x=4) + f(x=5) + f(x=6) + f(x=7)+f(x=8) \]

Se usa la resta usando la función pbinom()

x1 = 2  #
x2 = 8
prob <- pbinom(q = x2, size = n, prob = exito) - pbinom(q = x1, size = n, prob = exito) 
paste ("La probabilidad de que se enfermen de tres a ocho es: ", prob, " o el ", round(prob * 100, 2), "%")
## [1] "La probabilidad de que se enfermen de tres a ocho es:  0.877838591066112  o el  87.78 %"

Se comprueba sumando las probabilidades de tres a ocho

sum(dbinom(x = 3:8, size = n, prob = exito))
## [1] 0.8778386

o sumando los renglones de las probabilidades de tres a ocho de la tabla de probabilidad.

sum(filter(resultado$tabla, x %in% 3:8) %>%
  select(f.x))
## [1] 0.8778386

La probabilidad de que sobrevivan exactamente cinco

Aquí se calcula la probabilidad con la función dbinom() cuando

\[ f(x=5) \]

x = 5
prob <- dbinom(x = x, size = n, prob = exito)
paste ("La probabilidad de que se enfermen menos que diez es: ", prob, " o el ", round(prob * 100, 2), "%") 
## [1] "La probabilidad de que se enfermen menos que diez es:  0.185937844764672  o el  18.59 %"

Se comprueba la probabilidad extrayendo con la función filter() el registro de la tabla de distribución cuando x == 10.

filter(resultado$tabla, x==5)
##   x       f.x       F.x
## 1 5 0.1859378 0.4032156

Valor esperado

Se determina el valor medio o el valor esperado de la tabla de distribución.

VE <- resultado$VE
paste("El valor esperado es: ",VE)
## [1] "El valor esperado es:  6"

Se espera que se recuperen 6 en promedio

Varianza y desviación

Se calcula la varianza

varianza <- resultado$varianza
paste ("La varianza es: ", round(varianza,2))
## [1] "La varianza es:  3.6"

Se determina la desviación

desviacion.std <- resultado$desv.std
paste("La desviación std es: ", round(desviacion.std, 2))
## [1] "La desviación std es:  1.9"

Siendo la desviación una medida de variabilidad significa que tanto estarían las probabilidades por encima o por debajo del valor esperado.

Probabilidades para un experimento de 100 personas

Con la función de aleatoriedad rbinom() se calculan las probabilidades de una muestra de 100, con las proporciones o frecuencias relativas siendo los elementos de la función n la cantidad de experimentos que serían 100 size el tamaño del estudio original es decir 15 y prob la probabilidad de éxito.

La variable llamada variables contiene los valores aleatorios de la muestra y la frecuencia es la cantidad de ocasiones de cada variable aleatoria.

muestra <- 100
variables <- rbinom(n = muestra, size = n, prob = exito)
variables
##   [1]  6  5  4  5  3  4  6  7  5  6  8  4  4 12  8  4  5  8  5  7  7  6  5  9  7
##  [26]  7  7  4  5  4  7  7  7  6  7  7  8  7  7  8  5  7  5  5  8  8  6 10  5  8
##  [51]  3  6  5  6  4  6  9  7 11  8  5  5  8  5  4  6  6  3  5  5  5  4  7  4  8
##  [76]  4  8  5  6  8  7  6  7  8  7  4  6  6  7  6  7  5 11 10  8  5  7  7  7  7
frecuencia = table(variables)
frecuencia
## variables
##  3  4  5  6  7  8  9 10 11 12 
##  3 13 21 16 25 15  2  2  2  1

Las probabilidades relativas de la muestra

probs <- prop.table(frecuencia)
probs
## variables
##    3    4    5    6    7    8    9   10   11   12 
## 0.03 0.13 0.21 0.16 0.25 0.15 0.02 0.02 0.02 0.01
tablaexp <- data.frame(x=1:length(frecuencia), f.prob.x = as.vector(probs), f.acum.x = cumsum(as.vector(probs)))
tablaexp
##     x f.prob.x f.acum.x
## 1   1     0.03     0.03
## 2   2     0.13     0.16
## 3   3     0.21     0.37
## 4   4     0.16     0.53
## 5   5     0.25     0.78
## 6   6     0.15     0.93
## 7   7     0.02     0.95
## 8   8     0.02     0.97
## 9   9     0.02     0.99
## 10 10     0.01     1.00

Visualizando las probabilidades del experimento

A partir de la nueva tabla del experimento se compara con la tabla original en dos gráficas

Con la función par(mfrow=c(1,2)) se puede ver dos gráficas tipo plot() al mismo tiempo en el mismo renglón.

par(mfrow=c(1,2))
plot(x = resultado$tabla$x, y=resultado$tabla$f.x, type = "h", xlab = "X", ylab= "f(x)", main = "15 pacientes")
plot(x = tablaexp$x, y=tablaexp$f.prob.x, type = "h", xlab = "X", ylab= "f(x)", xlim = c(0,15), ylim = range(0, 0.20), main="Simulando 100 pacientes")

¿Cómo se comportan las probabilidades del estudio con 15 y del experimento o simulación con 100 pacientes?, muy similares las probabilidades.

Aprobar un examen

400

Un estudio refleja que al aplicar un examen de estadística la probabilidad de aprobar (éxito) es del 60%. Se pide lo siguiente:

  • Encuentre la tabla de distribución binomial para 30 estudiantes que presentan el examen

  • ¿Cuál es la probabilidad de que aprueben 5 alumnos?

  • ¿Cuál es la probabilidad de que aprueben 10 alumnos?

  • ¿Cuál es la probabilidad de que aprueben 15 o menos alumnos?

  • ¿Cuál es la probabilidad de que aprueben entre 10 y 20 alumnos?

  • ¿Cuál es la probabilidad de que aprueben mas de 25 alumnos?

  • Determinar el valor esperado VE y su significado.

  • Determinar la varianza y su desviación estándard y su significado.

Tabla de distribución binomial

Se incializan valores

x <- 0:30
n <- 30
exito <- 0.60

Se construye la tabla

resultado <- f.binom.all(n = n, exito = exito)
tabla <- resultado$tabla
tabla
##     x                  f.x                  F.x
## 1   0 0.000000000001152922 0.000000000001152922
## 2   1 0.000000000051881468 0.000000000053034389
## 3   2 0.000000001128421923 0.000000001181456312
## 4   3 0.000000015797906917 0.000000016979363229
## 5   4 0.000000159953807533 0.000000176933170762
## 6   5 0.000001247639698760 0.000001424572869522
## 7   6 0.000007797748117251 0.000009222320986774
## 8   7 0.000040102704603007 0.000049325025589781
## 9   8 0.000172942913600469 0.000222267939190250
## 10  9 0.000634124016535054 0.000856391955725303
## 11 10 0.001997490652085418 0.002853882607810724
## 12 11 0.005447701778414773 0.008301584386225485
## 13 12 0.012938291723735080 0.021239876109960601
## 14 13 0.026871836656988245 0.048111712766948846
## 15 14 0.048945131053800175 0.097056843820749084
## 16 15 0.078312209686080117 0.175369053506829159
## 17 16 0.110126544871050197 0.285495598377879189
## 18 17 0.136038673076003203 0.421534271453882614
## 19 18 0.147375229165670141 0.568909500619552144
## 20 19 0.139618638156950664 0.708528138776503003
## 21 20 0.115185376479484264 0.823713515255987683
## 22 21 0.082275268913917302 0.905988784169904804
## 23 22 0.050487096833540038 0.956475881003445050
## 24 23 0.026341094000107985 0.982816975003552917
## 25 24 0.011524228625047248 0.994341203628600123
## 26 25 0.004148722305017007 0.998489925933617184
## 27 26 0.001196746818754908 0.999686672752372107
## 28 27 0.000265943737501089 0.999952616489873214
## 29 28 0.000042740957812675 0.999995357447685862
## 30 29 0.000004421478394415 0.999999778926080274
## 31 30 0.000000221073919721 1.000000000000000000

Visualizar gráfica de probabilidades

plot_grid(resultado$g.dens, resultado$g_all$dens  )

plot_grid(resultado$g_barra, resultado$g_all$acum )

Utilizando plotly que se encuentra en la variable resultado

resultado$g.hist.plotly
resultado$g.acum.plotly

Probabilidad de que aprueben 15 o menos alumnos

Se calcula la probabilidad de

\[ f(x=0) + f(x=1) + P(f=2) ... + f(x=15) \]

o la probabilidad acumulada cuando F(x = 15)

prob <- pbinom(q = 15, size = n, prob = exito)
paste("La probabilidad de que aprueben 15 o menos es de ", round(prob, 4))
## [1] "La probabilidad de que aprueben 15 o menos es de  0.1754"

Probabilidad de que aprueben entre 10 y 20 alumnos

Se calcula la probabilidad acumulada de

\[ F(x=20) - F(x=9) \]

o sumando

\[ f(10) + f(11) + f(12) + ... + f(20) \]

prob <- pbinom(q = 20, size = n, prob = exito) - pbinom(q = 9, size = n, prob = exito)
paste ("La probabilidad de que aprueben entre 10 y 20 estudiantes es de: ", prob)
## [1] "La probabilidad de que aprueben entre 10 y 20 estudiantes es de:  0.822857123300262"

o bien …

# o
sum(dbinom(x = 10:20, size = n, prob = exito))
## [1] 0.8228571

o bien usando la tabla, se comprueba sumando los valores de los registros 11 al 21

sum(tabla$f.x[11:21])  
## [1] 0.8228571

Probabilidad de que aprueben de 25 o más alumnos alumnos

Se debe calcular

\[ f(x\geq25) \]

o restar el valor acumulado de 24 a 1.

\[ 1 - F(x=24) \]

o sumar

\[ f(25) + f(26) + f(27) + ... + f(30) \]

Con pbinom() y con lower.tail() = TRUE se encuentra la probabilidad mayor a 24.

prob <- pbinom(q = 24, size = n, prob = exito, lower.tail = FALSE)
paste ("La probabilidad de que aprueben mas de 25 alumnos es de ", prob)
## [1] "La probabilidad de que aprueben mas de 25 alumnos es de  0.0056587963713998"
# Se puede comprobar sumando los renglones 26 al 31 de la tabla
sum(tabla$f.x[26:31])
## [1] 0.005658796

o bien

sum(dbinom(x = 25:30, size = n, prob = exito))
## [1] 0.005658796

Valor esperado

El valor esperado es la cantidad de alumnos que aprueben el examen.

VE <- resultado$VE
paste("El valor esperado es: ",VE)
## [1] "El valor esperado es:  18"

Varianza y desviación

Varianza

varianza <- resultado$varianza
paste ("La varianza es: ", round(varianza, 4))
## [1] "La varianza es:  7.2"

Desviación

desviacion.std <- resultado$desv.std
paste("La desviación std es: ", round(desviacion.std, 4))
## [1] "La desviación std es:  2.6833"

La desviación como parte de la varianza significa la cantidad de alumnos que puede variar con respecto al valor medio VE previamente calculado.

Autobuses contaminantes

Suponga que un grupo de agentes de tránsito sale a una vía principal para revisar el estado de los autobuses de transporte intermunicipal.
Suponga que un grupo de agentes de tránsito sale a una vía principal para revisar el estado de los autobuses de transporte intermunicipal.

De datos históricos se sabe que un 10%10% de los camiones generan una mayor cantidad de humo de la permitida. En cada jornada los agentes revisan siempre 1818 unidades (autobuses). Se asume que el estado de un autobús es independiente del estado de los otros autobuses. (Hernández 2021).

  • Construir la tabla de distribución

  • Visualizar la densidad o las probabilidades para cada variable discreta

  • Calcular la probabilidad de que se encuentren exactamente 2 buses que generan una mayor cantidad de humo de la permitida.

  • Calcular la probabilidad de que el número de autobuses que sobrepasan el límite de generación de gases sea al menos 4.

  • Calcular la probabilidad de que existan MAS DE TRES (a partir de CUATRO) autobuses que emitan gases por encima de lo permitido en la norma

  • Calcular el valor esperado.

  • Calcular la varianza y la desviación.

  • Generar una muestra aleatoria de 100 valores y comparar las frecuencias relativas con las probabilidad originales.

  • Interpretar el caso.

Construir la tabla de distribución

# Parámetros
n <- 18        # Número de autobuses inspeccionados
p <- 0.10      # Probabilidad de que un autobús emita más humo del permitido
x <- 0:n       # Posibles números de autobuses que emiten más humo

# Cálculo de probabilidades
probabilidades <- dbinom(x, size = n, prob = p)
prob_acumuladas <- pbinom(x, size = n, prob = p)

# Creación de la tabla
tabla <- data.frame(
  Autobuses_que_emiten_mas_humo = x,
  Probabilidad = round(probabilidades, 4),
  Probabilidad_acumulada = round(prob_acumuladas, 4)
)

# Visualización de la tabla
print(tabla)
##    Autobuses_que_emiten_mas_humo Probabilidad Probabilidad_acumulada
## 1                              0       0.1501                 0.1501
## 2                              1       0.3002                 0.4503
## 3                              2       0.2835                 0.7338
## 4                              3       0.1680                 0.9018
## 5                              4       0.0700                 0.9718
## 6                              5       0.0218                 0.9936
## 7                              6       0.0052                 0.9988
## 8                              7       0.0010                 0.9998
## 9                              8       0.0002                 1.0000
## 10                             9       0.0000                 1.0000
## 11                            10       0.0000                 1.0000
## 12                            11       0.0000                 1.0000
## 13                            12       0.0000                 1.0000
## 14                            13       0.0000                 1.0000
## 15                            14       0.0000                 1.0000
## 16                            15       0.0000                 1.0000
## 17                            16       0.0000                 1.0000
## 18                            17       0.0000                 1.0000
## 19                            18       0.0000                 1.0000

Se inicializan variables

x <- 0:18
n <- 18
exito <- 0.10

Se construye la tabla de distribución nuevamente mandando llamar la función.

resultado <- f.binom.all(n = n, exito = exito)
tabla <- resultado$tabla
tabla
##     x                  f.x       F.x
## 1   0 0.150094635296999096 0.1500946
## 2   1 0.300189270593998137 0.4502839
## 3   2 0.283512088894331660 0.7337960
## 4   3 0.168007163789233499 0.9018032
## 5   4 0.070002984912180641 0.9718061
## 6   5 0.021778706417122911 0.9935848
## 7   6 0.005243021915233281 0.9988279
## 8   7 0.000998670840996817 0.9998265
## 9   8 0.000152574711818958 0.9999791
## 10  9 0.000018836384175180 0.9999980
## 11 10 0.000001883638417518 0.9999998
## 12 11 0.000000152213205456 1.0000000
## 13 12 0.000000009865670724 1.0000000
## 14 13 0.000000000505931832 1.0000000
## 15 14 0.000000000020076660 1.0000000
## 16 15 0.000000000000594864 1.0000000
## 17 16 0.000000000000012393 1.0000000
## 18 17 0.000000000000000162 1.0000000
## 19 18 0.000000000000000001 1.0000000

Visualizar probabilidades

Se muestran las probabilidades de cada variable discreta usando directamente la variable resultado.

plot_grid(resultado$g.dens, resultado$g_all$dens  )

plot_grid(resultado$g_barra, resultado$g_all$acum )

Utilizando plotly que se encuentra en la variable resultado

resultado$g.hist.plotly 
resultado$g.acum.plotly

Probabilidad de que se encuentren exactamente 2 buses

\[ f(x=2) \]

x <- 2
prob <- dbinom(x = x, size = n, prob = exito)
paste ("La probabilidad de encontrar dos camiones contaminantes es de : ", prob)
## [1] "La probabilidad de encontrar dos camiones contaminantes es de :  0.283512088894332"

Probabilidad de menos de cuatro autobuses

Se requiere encontrar la probabilidad de cuando la variables tenga valores entre cero y cuatro.

\[ f(x=0) + f(x=1) + f(x=2) + f(x=3) + f(x=4) \]

o lo que es lo mismo

\[ P(x\leq 4) \]

o en términos de probabilidad acumulada

\[ F(x=4) \]

x <- 4
prob <- pbinom(q = x, size = n, prob = exito)
paste ("La probabilidad de encontrar menos de cuatro camiones es de: ", prob)
## [1] "La probabilidad de encontrar menos de cuatro camiones es de:  0.971806143486743"

Probabilidad de MAS de tres autobuses

Se requiere encontrar la probabilidad de cuando la variables tenga valores entre cuatro y dieciocho

\[ f(x=4) + f(x=5) + f(x=6) + f(x=7) ... + ...f(x=18) \]

o lo que es lo mismo

\[ P(x \geq 3) \]

o en términos de probabilidad acumulada

\[ 1 - F(x=4) \]

x1 <- 3
x2 <- 18
prob <- 1 - pbinom(q = x1, size = n, prob = exito)  
paste ("La probabilidad de encontrar mas de tres camiones es de: ", prob)
## [1] "La probabilidad de encontrar mas de tres camiones es de:  0.0981968414254375"

Se puede encontrar usando la expresión lower.tail = FALSE

pbinom(q = 3, size = n, prob = exito, lower.tail = FALSE)
## [1] 0.09819684

Valor esperado

VE <- resultado$VE
paste("El valor esperado es: ",VE)
## [1] "El valor esperado es:  1.8"

El valor esperado de 1.8 significa el valor medio de camiones que se pueden encontrar que contaminan

Varianza y desviación

Varianza

varianza <- resultado$varianza
paste ("La varianza es: ", round(varianza, 2))
## [1] "La varianza es:  1.62"

Desviación

desviacion.std <- resultado$desv.std
paste("La desviación std es: ", round(desviacion.std, 4))
## [1] "La desviación std es:  1.2728"

La varianza y de manera más específica la desviación significa que tanto varía (se aleja o se acerca) con respeto al valor medio o valor esperado VE el número de autobuses con probabilidad de encontrarse con partículas contaminantes.

Valores aleatorios

Se utiliza la función rbinom() para simular un estudio y generar valores aleatorios conforme a la distribución binomial.

El estudio o la simulación se hace con un experimento de 100 camiones, a partir del estudio previo de 18 camiones, es decir, se utiliza la misma probabilidad del 10% de éxito de encontrar camiones contaminantes.

n.muestra <- 100
x.muestra <- rbinom(n = n.muestra, size = n, prob = exito)
x.muestra
##   [1] 3 5 0 3 1 2 3 1 4 1 5 4 0 2 1 2 2 4 3 1 3 1 1 2 0 1 0 0 3 3 1 3 3 2 1 3 3
##  [38] 0 3 3 0 1 1 1 2 0 1 1 3 1 2 0 1 1 1 2 2 2 0 0 2 0 4 2 2 2 2 2 2 2 2 3 3 2
##  [75] 1 1 1 4 0 1 0 1 2 2 1 3 5 3 0 0 3 4 0 1 1 0 1 0 0 1

Calculando frecuencias relativas

Con la función table() se determina la frecuencia y con prop.table() se encuentra la frecuencia relativa.

table(x.muestra)
## x.muestra
##  0  1  2  3  4  5 
## 20 29 23 19  6  3
tabla.muestra <- data.frame(prob = prop.table(table(x.muestra)))
colnames(tabla.muestra) <- c("x", "f(x)" )
tabla.muestra
##   x f(x)
## 1 0 0.20
## 2 1 0.29
## 3 2 0.23
## 4 3 0.19
## 5 4 0.06
## 6 5 0.03

Se observa que los mayores valores probabilísticos está entre 1 y 3, entonces la muestra se relaciona con los valores probabilísticos del origen de los datos.

Encontrar valores de x a partir de f(x)

Con la función estadísticas qbinom() se pueden encontrar valores de x a partir de un valor de probabilidad binomial con la probabilidad de éxito

Ejemplo: Retomando los valores de el ejercicio de autobuses contaminantes

print("Datos de autobuses contaminantes")
## [1] "Datos de autobuses contaminantes"
print ("Variable aleatoria (x)")
## [1] "Variable aleatoria (x)"
print(x)
## [1] 4
print("Cantidad de la muestra (n)")
## [1] "Cantidad de la muestra (n)"
print(n)
## [1] 18
print("Probabilidad de éxito (p)")
## [1] "Probabilidad de éxito (p)"
print(exito)
## [1] 0.1

¿Cuál es el valor de x con una f(x) de 0.1859?

la función qbinom() es lo contrario a dbinom()

Aquí las probabilidades f(x) de 0 a 15

pbinom(q = x, size = n, prob = exito)
## [1] 0.9718061

Aquí el valor de x cuando

\[ f(x) = 0.45 \]

print("El valor de x es:")
## [1] "El valor de x es:"
qbinom(p = 0.45, size = n, prob = exito)
## [1] 1

Con la función plotly() la curva acumulada de F(x)

  g.plotly <- plot_ly(
    x = c(x),
    y = c(pbinom(q = x, size = n, prob = exito)),
    type = "scatter" ,
    mode = "lines") %>%
    layout(title = "Distribución binomial",
           xaxis = list(title = "x's"), 
           yaxis = list(title = "Función de Prob. f(X)")
    )
  g.plotly

Interpretación

Esta probabilidad mide cuán probable es encontrarse con una situación preocupante, donde 4 o más unidades contaminan. Si esta probabilidad es baja, significa que generalmente los controles funcionan.

En promedio, se espera encontrar 1.8 autobuses contaminantes por cada jornada de inspección. Sirve para planificar el control y los recursos.

La cantidad de autobuses contaminantes puede variar en promedio 1.27 unidades respecto a la media de 1.8. Muestra qué tan consistente es el patrón observado.

  • La distribución binomial modela adecuadamente este tipo de situación con variables discretas y binarias (contamina / no contamina).
  • El valor esperado y la desviación ayudan a estimar lo que usualmente se encuentra y cuánto puede variar.
  • La mayoría de los valores probabilísticos están concentrados entre 1 y 3 autobuses contaminantes, lo cual concuerda con los datos históricos.
  • Este tipo de análisis es útil para tomar decisiones preventivas: por ejemplo, si un día se detectan más de 5 autobuses contaminantes, se puede considerar una revisión más estricta o una investigación adicional.

Expresar con sus palabras ideas acerca del caso

Anderson, David R., Dennis J. Sweeney, and Thomas A. Williams. 2008. Estadística Para Administración y Economía. 10th ed. Australia • Brasil • Corea • España • Estados Unidos • Japón • México • Reino Unido • Singapur: Cengage Learning,.

Hernández, Freddy. 2021. “Manual de r. Distribuciones Discretas.” https://fhernanb.github.io/Manual-de-R/.

“La Distribución Binomial o de Bernoulli.” n.d. https://www.profesor10demates.com/2014/04/la-distribucion-binomial-o-de-bernoulli_3.html.

Mendenhall, William, Robert J. Beaver, and Barbara M. Beaver. 2006. Introducción a La Probabilidad y Estadística. 13a Edición.

Walpole, Ronald E., Raymond H. Myers, and Sharon L. Myers. 2012. Probabilidad y Estadística Para Ingeniería y Ciencias. Novena Edición. México: Pearson.