
Como se menciona en la Guía 2.1, un Experimento aleatorio se puede definir como una acción que podemos repetir en iguales condiciones muchas veces y cuyo resultado no conocemos anticipadamente
Un ejemplo de ello es cuando estamos jugando parques y un jugador lanza dos dados, el resultado solo es posible de observar después de haber realizado la acción de lanzarlos.
Al conjunto de todos los posibles valores que puede tomar el experimento aleatorio se le denomina Espacio muestral, que se denota por la letra mayúscula S.
Si el resultado de interés es la suma de los dos dados, su espacio muestral es:
\[S=\{ 2,3,4,5,6,7,8,9,10,11,12
\}\]
Para simular el lanzamiento de un dado utilizaremos la función
sample(x, size, replace = FALSE, prob = NULL), con
parámetros: x : valores del espacio muestral;
size : tamaño de la muestra y replace : para
determinar si la selección se realiza con reemplazo o sin reemplazo.
sample(1:6,200, replace = TRUE), da un resultado una
muestra de 200 valores enteros entre 1 y 6, con repetición.
n=200
x=sample(1:6,n, replace = TRUE)
td1=prop.table(table(x))
barplot(td1, las=1, col = c31)

En este caso utilizamos la función sample() dos veces y
se obtienen dos vectores que representan los resultados del dado1 y del
dado2 respectivamente. Con estos resultados se construye una
data.frame() de dos columnas por n filas. En ella cada fila
de dos componentes conforma una muestra con dos valores.
Para obtener la suma de los valores de los dos dados, utilizamos la
función apply(X, MARGIN, FUN, ..., simplify = TRUE)
indicando con MARGIN=1 que la operación (siguiente
parámetro) se realizará por filas. Por último en el parámetro
FUN se asigna la función a realizar. En resumen :
suma=apply(dados, 1, sum)
n=200
d1=sample(1:6,n, replace = TRUE)
d2=sample(1:6,n, replace = TRUE)
dados=data.frame(d1,d2)
suma=apply(dados, 1, sum)
barplot(table(suma), las=1,cex.axis=0.7, col= c31)

data.frame(prop.table(table(suma)))
suma Freq
1 2 0.025
2 3 0.040
3 4 0.120
4 5 0.115
5 6 0.155
6 7 0.165
7 8 0.165
8 9 0.070
9 10 0.060
10 11 0.055
11 12 0.030
Procedimiento alternativo
t=sapply(1:200, function(x){sum(sample(1:6,2,replace = TRUE))})
barplot(table(t), las=1, cex.axis=0.7, col=c31)

Para simular la extracción de bolas de una urna, se utilizan las
funciones sample() y rep() mostradas en el
siguiente ejemplo :
sample(c(1,2,3),10,replace = TRUE,prob=c(3,5,4))
[1] 2 1 3 2 2 2 3 2 2 2
La misma simulación con palabras
sample(c("Blanca","Roja","Azul"),10,replace = TRUE,prob=c(3,5,4))
[1] "Roja" "Roja" "Azul" "Azul" "Blanca" "Roja" "Blanca" "Roja"
[9] "Azul" "Azul"
# set.seed(123)
# Extraer la muestra
muestra <- sample(
c("Blanca", "Roja", "Azul"),
size = 10,
replace = TRUE,
prob = c(3, 5, 4)
)
# Datos para el gráfico
df <- data.frame(
posicion = 1:10,
color = muestra
)
# Representación de la muestra
ggplot(df, aes(x = posicion, y = 1, fill = color)) +
geom_point(
shape = 21,
size = 14,
color = "#333333",
stroke = 1.2
) +
scale_fill_manual(
values = c(
"Blanca" = "white",
"Roja" = "red",
"Azul" = "blue"
)
) +
scale_x_continuous(
limits = c(0.5, 10.5),
expand = c(0, 0)
) +
coord_cartesian(
ylim = c(0.7, 1.3),
clip = "off"
) +
theme_void() +
theme(
legend.position = "none",
plot.margin = margin(5, 5, 5, 5)
)

Las tablas de contingencia o tablas cruzadas resumen conjuntamente dos variables cualitativas. Primero construimos una tabla con sus frecuencias conjuntas.
frecuencias <- c(20, 60, 100, 30, 140, 50)
m <- matrix(frecuencias, ncol = 2)
rownames(m) <- c("Administrativo", "Operativo", "Vendedor")
colnames(m) <- c("Mujer", "Hombre")
m
Mujer Hombre
Administrativo 20 30
Operativo 60 140
Vendedor 100 50
A continuación se adicionan las frecuencias marginales
addmargins(m)
Mujer Hombre Sum
Administrativo 20 30 50
Operativo 60 140 200
Vendedor 100 50 150
Sum 180 220 400
Para convertirlas en probabilidades utilizamos la función
prop.table()
prop.table(m)
Mujer Hombre
Administrativo 0.05 0.075
Operativo 0.15 0.350
Vendedor 0.25 0.125
Esta función también se utiliza para calcular las probabilidades condicionales por filas
prop.table(m,1)
Mujer Hombre
Administrativo 0.4000000 0.6000000
Operativo 0.3000000 0.7000000
Vendedor 0.6666667 0.3333333
o las probabilidades condicionales por columnas
prop.table(m,2)
Mujer Hombre
Administrativo 0.1111111 0.1363636
Operativo 0.3333333 0.6363636
Vendedor 0.5555556 0.2272727
Supongamos que tenemos una enfermedad rara que afecta al 1% de la población. También sabemos que una prueba médica tiene una precisión del 95% para detectar la enfermedad cuando está presente, pero también puede dar falsos positivos en un 3% de los casos en los que la enfermedad no está presente. Se desea calcular la probabilidad de que una persona tenga la enfermedad dado que la prueba dio positivo.
Primero, establezcamos algunas notaciones:
A: La persona tiene la enfermedad. B: La prueba da positivo.
Queremos calcular \(P(A|B)\), es decir, la probabilidad de que la persona tenga la enfermedad dado que la prueba dio positivo.
Para dar solución al problema empleamos el Teorema de Bayes
\[P(A|B) = \dfrac{P(B|A) . P(A)}{P(B)}\]
Donde
Para calcular \(P(B)\) usamos la regla de probabilidad total:
\[P(B) = P(B|A) . P(A) + P(B|A'). P(A')\]
# Probabilidades dadas
Prob_A <- 0.01 # Probabilidad de tener la enfermedad
Prob_B_dado_A <- 0.95 # Precisión de la prueba (dar positivo dado que tiene la enfermedad)
Prob_B_dado_noA <- 0.03 # Falsos positivos (dar positivo dado que no tiene la enfermedad)
# Calculamos P(not A)
Prob_noA <- 1 - Prob_A
# Calculamos P(B)
Prob_B <- Prob_B_dado_A * Prob_A + Prob_B_dado_noA * Prob_noA
# Calculamos P(A|B) usando el Teorema de Bayes
Prob_A_dado_B <- (Prob_B_dado_A * Prob_A) / Prob_B
# Imprimimos el resultado
cat("Probabilidad de tener la enfermedad dado que la prueba dio positivo:", Prob_A_dado_B, "\n")
Probabilidad de tener la enfermedad dado que la prueba dio positivo: 0.2423469
Tabla cruzada
# Crear la tabla cruzada
tabla_cruzada <- matrix(c(0.95 * 0.01, 0.03 * 0.99, 0.05 * 0.01, 0.97 * 0.99), nrow = 2, byrow = TRUE)
colnames(tabla_cruzada) <- c("Enfermedad", "No Enfermedad")
rownames(tabla_cruzada) <- c("Prueba Positiva", "Prueba Negativa")
# Imprimir la tabla cruzada con estilo
tabla_estilizada <- knitr::kable(tabla_cruzada) |>
kableExtra::kable_styling(bootstrap_options = "striped", full_width = FALSE)
tabla_estilizada
| Enfermedad | No Enfermedad | |
|---|---|---|
| Prueba Positiva | 0.0095 | 0.0297 |
| Prueba Negativa | 0.0005 | 0.9603 |
En el siguiente problema, exploraremos cómo la probabilidad de obtener una suma de 7 al lanzar dos dados converge a su valor teórico a medida que aumentamos el número de lanzamientos. Se sabe que cuando se lanzan dos dados equilibrados, la suma más probable es 7.
\[\dfrac{6}{36} = \frac{1}{6} \approx 0.1667\]
Simulación: Utilizaremos R para simular lanzamientos de dos dados y calcular la probabilidad de obtener una suma de \(7\). Luego, graficaremos cómo esta probabilidad converge a su valor teórico a medida que aumentamos el número de lanzamientos.
Reto: Ejecutar la simulación con diferentes tamaños de muestra y observar cómo la probabilidad de obtener una suma de \(7\) cambia. Luego, crea un gráfico que muestre esta convergencia. ¿En qué punto la probabilidad simulada se acerca al valor teórico?
# Una sola simulación permite calcular la frecuencia acumulada
# para todos los tamaños de muestra.
tamanos_muestra <- seq(100, 100000, by = 100)
max_lanzamientos <- max(tamanos_muestra)
dado_1 <- sample(1:6, max_lanzamientos, replace = TRUE)
dado_2 <- sample(1:6, max_lanzamientos, replace = TRUE)
es_suma_7 <- dado_1 + dado_2 == 7
probabilidades <- cumsum(es_suma_7)[tamanos_muestra] / tamanos_muestra
plot(
tamanos_muestra, probabilidades,
type = "l",
xlab = "Tamaño de muestra",
ylab = "Probabilidad de suma 7",
main = "Convergencia de la probabilidad de suma 7 al lanzar dos dados",
las = 1
)
abline(h = 1 / 6, col = "red", lwd = 2)
