Apoyo - Clase 03 - Introducción a las probabilidades (Parte 01)

1. Introducción

En el estudio de la probabilidad, se analizan situaciones en las que el resultado de un experimento no se puede predecir con certeza, lo que se denomina un experimento aleatorio. Para entender estos resultados, es esencial definir el espacio muestral, que contiene todos los resultados posibles del experimento. Luego, se identifican eventos como subconjuntos de este espacio, permitiendo describir y calcular las probabilidades asociadas a cada uno de ellos.

2. Conceptos básicos

2.1 Experimentos Aleatorios

Un experimento aleatorio es un proceso donde los resultados individuales no se pueden predecir con certeza, aunque se conozcan las probabilidades de ocurrencia de todos los resultados posibles (Montgomery and Runger 2018). Aunque cada resultado sea incierto, es posible describir el comportamiento general del experimento mediante la distribución de probabilidad asociada a sus resultados. Ejemplo: el lanzamiento de un dado, donde cada cara tiene la misma probabilidad de ocurrencia, aunque no se sepa cuál saldrá en cada lanzamiento.

2.2 Espacio muestral

El espacio muestral es el conjunto que agrupa todos los resultados posibles de un experimento aleatorio y se denota como S. Dependiendo de sus características, puede clasificarse en:

  • Continuo: Se utiliza cuando los resultados pueden tomar cualquier valor dentro de un rango. Ejemplo: el peso corporal de los pacientes en un hospital.

  • Discreto: Se emplea cuando los resultados son finitos o enumerables. Ejemplo: las caras de un dado.

2.3 Eventos y espacio muestral

Un evento es un subconjunto del espacio muestral de un experimento aleatorio, que agrupa uno o varios resultados posibles. Por ejemplo:

a. Lanzamiento de una moneda
- Espacio muestral:
\(\Omega = \{ \text{Cara, Sello} \}\)
- Evento: Que ambas monedas caigan del mismo lado
- Subconjunto de interés:
\(E = \{\text{Cara Cara, Sello Sello}\}\)



b. Lanzamiento de un dado de 6 caras
- Espacio muestral:
\(\Omega = \{1, 2, 3, 4, 5, 6\}\)
- Evento: Obtener un número impar
- Subconjunto de interés:
\(E = \{1, 3, 5\}\)



3. Eventos equiprobables

Cuando todos los resultados de un espacio muestral tienen la misma probabilidad, se dice que son equiprobables. La probabilidad de cada uno se define como:

\[ P(x) = \frac{1}{N} \]

donde \(N\) es el número total de resultados posibles.

Ejemplo. En un dado no cargado de 6 caras, cada cara tiene una probabilidad de:

\[ P(x) = \frac{1}{6} \]

4. Probabilidad de un evento discreto

Para un espacio muestral discreto, la probabilidad de un evento \(E\) es la suma de las probabilidades de sus resultados:

\[ P(E) = \sum P(x) \quad \text{para } x \in E \]

Ejemplo: En un dado de 6 caras, si \(E\) es “obtener un número impar”, entonces:

\[ E = \{1, 3, 5\} \]

\[ P(E) = \frac{1}{6} + \frac{1}{6} + \frac{1}{6} = \frac{1}{2} \]

5. Axiomas de probabilidades

La probabilidad asignada a cada evento de un experimento aleatorio debe cumplir con los siguientes axiomas:

  1. \(P(S) = 1\): La probabilidad del espacio muestral completo es 1.

  2. \(0 \leq P(E) \leq 1\): La probabilidad de cualquier evento \(E\) siempre está entre 0 y 1.

  3. Si \(E_1\) y \(E_2\) son eventos mutuamente excluyentes (sin elementos en común), entonces:

\[ \begin{aligned} P(E_1 \cup E_2) &= P(E_1) + P(E_2) \end{aligned} \]

6. Lanzamiento de moneda: real vs fake

Durante la clase, los(as) estudiantes analizaron tres secuencias de 100 lanzamientos de monedas para determinar si eran reales o creadas por una persona (Gelman and Nolan 2017). Se observó que las secuencias generadas por humanos tienden a evitar largas rachas de caras o sellos, lo cual las hace sospechosas. Este análisis permite introducir conceptos como las distribuciones de probabilidad, que veremos más adelante en el curso.

a. Explicación

La racha más larga y el número total de rachas son claves para detectar secuencias falsas. En una moneda justa, la racha más larga esperada para 100 lanzamientos es aproximadamente 8, mientras que las secuencias generadas suelen tener rachas más cortas. El cálculo se realiza con la siguiente fórmula:

\[ \begin{aligned} L &= \log_{1/p}(n(1-p)) + 1 \end{aligned} \]

Donde:
- \(L\) = Longitud esperada de la racha
- \(n\) = Número de lanzamientos
- \(p\) = Probabilidad de éxito (1/2 para una moneda justa)

Ejemplo: Para \(n = 100\) y \(p = 1/2\), se espera una racha de 8 con un intervalo entre 5 y 11.

Si la racha más larga de una secuencia es menor a 5 o mayor a 11, la secuencia es sospechosa y podría ser fabricada. Este método ayuda a diferenciar eventos aleatorios de aquellos generados con intención.

b. Conceptos

  • Rachas largas: Identificación y significado.
  • Número de rachas: Evaluación de patrones.
  • Distribuciones de probabilidad: Análisis de comportamiento.

A modo de curiosidad, el código y las simulaciones asociados a este ejemplo, mostrados en clase con 5,000 repeticiones, se presentan a continuación. Han sido ordenados y comentados utilizando GPT-4.

# -------------------------------------------------------------------
# Instalar y cargar las librerías necesarias
# -------------------------------------------------------------------

# Instalar los paquetes si no están instalados
# install.packages("ggplot2")
# install.packages("plotly")

# Cargar las librerías
library(ggplot2)
library(plotly)

# -------------------------------------------------------------------
# Simulación de lanzamientos de moneda
# -------------------------------------------------------------------

# Fijar la semilla para reproducibilidad
set.seed(14)

# Número de simulaciones y lanzamientos por simulación
n_simulaciones <- 5000
n_lanzamientos <- 100

# Inicializar vectores para almacenar los resultados
rachas_largas <- numeric(n_simulaciones)
numero_rachas <- numeric(n_simulaciones)

# Simulación de lanzamientos de moneda
for (i in 1:n_simulaciones) {
  # Simular lanzamientos de moneda (0 y 1)
  lanzamientos <- sample(c(0, 1), n_lanzamientos, replace = TRUE)
  
  # Calcular las rachas (usando rle para obtener la longitud de las rachas)
  rachas <- rle(lanzamientos)$lengths
  
  # Guardar la racha más larga
  rachas_largas[i] <- max(rachas)
  
  # Guardar el número total de rachas
  numero_rachas[i] <- length(rachas)
}

# -------------------------------------------------------------------
# Crear secuencias manuales y calcular sus rachas
# -------------------------------------------------------------------

# Función para imprimir detalles de la secuencia
imprimir_detalles_secuencia <- function(secuencia, nombre) {
  rachas <- rle(secuencia)
  racha_mas_larga <- max(rachas$lengths)
  valor_racha_mas_larga <- rachas$values[which.max(rachas$lengths)]
  num_rachas <- length(rachas$lengths)
  
  cat(nombre, "- Número de 1's:", sum(secuencia == 1), "\n")
  cat(nombre, "- Número de 0's:", sum(secuencia == 0), "\n")
  cat(nombre, "- Racha más larga:", racha_mas_larga, "(", ifelse(valor_racha_mas_larga == 1, "1's", "0's"), ")\n")
  cat(nombre, "- Número de rachas:", num_rachas, "\n\n")
}

# Secuencia 1 - Generada aleatoriamente
secuencia_1 <- sample(c(0, 1), n_lanzamientos, replace = TRUE)
imprimir_detalles_secuencia(secuencia_1, "Secuencia 1")
## Secuencia 1 - Número de 1's: 52 
## Secuencia 1 - Número de 0's: 48 
## Secuencia 1 - Racha más larga: 7 ( 0's )
## Secuencia 1 - Número de rachas: 48
# Calcular racha más larga y número de rachas para secuencia 1
racha_larga_1 <- max(rle(secuencia_1)$lengths)
numero_rachas_1 <- length(rle(secuencia_1)$lengths)

# -------------------------------------------------------------------
# Secuencia 2 - Secuencia manual con rachas controladas
secuencia_2 <- c(1,1,0,0,0,1,0,1,0,1,
                 sample(c(1,1,0,0,0,1,0,1,0,1)),
                 sample(c(1,1,0,0,0,1,0,1,0,1)),
                 sample(c(1,1,0,0,0,1,0,1,0,1)),
                 sample(c(1,1,0,0,0,1,0,1,0,1)),
                 sample(c(1,1,0,0,0,1,0,1,0,1)),
                 sample(c(1,1,0,0,0,1,0,1,0,1)),
                 sample(c(1,1,0,0,0,1,0,1,0,1)),
                 sample(c(1,1,0,0,0,1,0,1,0,1)),
                 sample(c(1,1,0,0,0,1,0,1,0,1)),
                 sample(c(1,1,0,0,0,1,0,1,0,1))
)
imprimir_detalles_secuencia(secuencia_2, "Secuencia 2")
## Secuencia 2 - Número de 1's: 55 
## Secuencia 2 - Número de 0's: 55 
## Secuencia 2 - Racha más larga: 5 ( 0's )
## Secuencia 2 - Número de rachas: 67
# Calcular racha más larga y número de rachas para secuencia 2
racha_larga_2 <- max(rle(secuencia_2)$lengths)
numero_rachas_2 <- length(rle(secuencia_2)$lengths)

# -------------------------------------------------------------------
# Secuencia 3 - Secuencia manual con un patrón distinto
secuencia_3 <- c(1,0,0,0,1,0,0,0,0,1,
                 sample(c(1,1,1,0,1,0,0,0,0,1)),
                 sample(c(1,1,1,0,1,0,0,0,0,1)),
                 sample(c(1,1,1,0,1,0,0,0,0,1)),
                 sample(c(1,1,1,0,1,0,0,0,0,1)),
                 sample(c(1,1,1,0,1,0,0,0,0,1)),
                 sample(c(1,1,1,0,1,0,0,0,0,1)),
                 sample(c(1,1,1,0,1,0,0,0,0,1)),
                 sample(c(1,1,1,0,1,0,0,0,0,1)),
                 sample(c(1,1,1,0,1,0,0,0,0,1)),
                 sample(c(1,1,1,0,1,0,0,0,0,1)),
                 sample(c(1,1,1,0,1,0,0,0,0,1))
)
imprimir_detalles_secuencia(secuencia_3, "Secuencia 3")
## Secuencia 3 - Número de 1's: 58 
## Secuencia 3 - Número de 0's: 62 
## Secuencia 3 - Racha más larga: 5 ( 1's )
## Secuencia 3 - Número de rachas: 65
# Calcular racha más larga y número de rachas para secuencia 3
racha_larga_3 <- max(rle(secuencia_3)$lengths)
numero_rachas_3 <- length(rle(secuencia_3)$lengths)

# -------------------------------------------------------------------
# Crear DataFrame para ggplot
# -------------------------------------------------------------------

# Crear un dataframe con los resultados simulados de la moneda
df <- data.frame(
  numero_rachas = numero_rachas,
  racha_larga = rachas_largas
)

# Crear un dataframe con las secuencias destacadas (A, B y C)
secuencias_df <- data.frame(
  numero_rachas = c(numero_rachas_1, numero_rachas_2, numero_rachas_3),
  racha_larga = c(racha_larga_1, racha_larga_2, racha_larga_3),
  secuencia = c("Secuencia A", "Secuencia B", "Secuencia C")
)

# -------------------------------------------------------------------
# Graficar usando ggplot
# -------------------------------------------------------------------

# Crear gráfico de dispersión básico con las simulaciones
ggplot_base <- ggplot(df, aes(x = numero_rachas, y = racha_larga)) +
  
  # Puntos base para las simulaciones de lanzamientos de monedas
  geom_point(color = 'dimgray', alpha = 0.5, size = 1) +
  
  # Agregar las secuencias destacadas A, B y C con diferentes colores
  geom_point(data = secuencias_df, aes(color = secuencia), size = 3) +
  
  # Etiquetas y estilo del gráfico
  labs(
    title = "Simulación de Lanzamientos de Moneda",
    x = "Número de rachas",
    y = "Racha más larga",
    color = "Secuencias"  # Título de la leyenda cambiado a "Secuencias"
  ) +
  theme_minimal() +
  
  # Ajustar el tamaño del texto en los ejes
  theme(
    axis.title = element_text(size = 14),
    axis.text = element_text(size = 12),
    plot.title = element_text(size = 16, face = "bold")
  )

# Convertir el gráfico de ggplot a plotly para hacerlo interactivo
ggplot_interactivo <- ggplotly(ggplot_base)

# Mostrar el gráfico interactivo
ggplot_interactivo

7. Bibliografía

Gelman, Andrew, and Deborah Nolan. 2017. Applied Statistics and Probability. 2nd ed. Oxford, UK: Oxford University Press.
Montgomery, Douglas C., and George C. Runger. 2018. Applied Statistics and Probability for Engineers. 7th ed. Hoboken, NJ: Wiley.