Probabilidades básicas

Qué es la probabilidad, reglas fundamentales y cómo simular experimentos aleatorios con JavaScript.

La probabilidad mide la certeza de que ocurra un evento. Es el puente entre la estadística descriptiva (describir lo que ya ocurrió) y la inferencial (predecir lo que puede ocurrir).


Vocabulario básico

  • Experimento aleatorio: resultado impredecible (lanzar un dado, sacar una carta)
  • Espacio muestral (Ω): conjunto de todos los resultados posibles
  • Evento (A): subconjunto del espacio muestral que nos interesa
  • Probabilidad P(A): número entre 0 y 1 que mide la posibilidad de A
// Experimento: lanzar un dado de 6 caras
const espacioMuestral = [1, 2, 3, 4, 5, 6];

// Evento A: sacar un número par
const eventoA = espacioMuestral.filter((n) => n % 2 === 0); // [2, 4, 6]

// Probabilidad clásica: casos favorables / casos posibles
const P_A = eventoA.length / espacioMuestral.length;
console.log(P_A); // 0.5

Reglas fundamentales

Complementario

La probabilidad de que NO ocurra A es 1 - P(A):

const P_no_A = 1 - P_A;
console.log(P_no_A); // 0.5 — probabilidad de sacar impar

Unión (A o B)

La probabilidad de que ocurra A o B:

// P(A ∪ B) = P(A) + P(B) - P(A ∩ B)

// A: sacar par → [2, 4, 6]
// B: sacar mayor que 4 → [5, 6]
// A ∩ B (par y mayor que 4) → [6]

const P_B = 2 / 6;
const P_interseccion = 1 / 6; // solo el 6 cumple ambas

const P_union = P_A + P_B - P_interseccion;
console.log(P_union.toFixed(4)); // 0.6667

Eventos mutuamente excluyentes

Si A y B no pueden ocurrir a la vez, P(A ∩ B) = 0:

// A: sacar 1  |  B: sacar 6  →  no pueden ser simultáneos
const P_1 = 1 / 6;
const P_6 = 1 / 6;
const P_1_o_6 = P_1 + P_6; // 0.333...

Probabilidad frecuentista: simulación

La probabilidad teórica asume que todos los resultados son igualmente probables. En la práctica, a veces se estima con experimentos repetidos:

function simularDado(lanzamientos) {
  let paresObtenidos = 0;

  for (let i = 0; i < lanzamientos; i++) {
    const resultado = Math.floor(Math.random() * 6) + 1;
    if (resultado % 2 === 0) paresObtenidos++;
  }

  return paresObtenidos / lanzamientos;
}

console.log(simularDado(100));      // ~0.50 (varía)
console.log(simularDado(10_000));   // ~0.500 (más estable)
console.log(simularDado(1_000_000)); // ~0.5000 (converge a la teórica)

Ley de los grandes números: cuanto más repetimos el experimento, la frecuencia relativa se aproxima a la probabilidad teórica.


Probabilidad condicional

A veces queremos saber la probabilidad de A dado que ya sabemos que B ocurrió. Esto se llama probabilidad condicional y reduce el espacio muestral al evento conocido.

// En un grupo de 100 personas:
// - 60 programan en JS
// - 40 programan en Python
// - 20 programan en ambos

const total = 100;
const P_JS = 60 / total;      // 0.6
const P_Python = 40 / total;  // 0.4
const P_ambos = 20 / total;   // 0.2

// P(Python | JS): probabilidad de usar Python dado que usa JS
const P_Python_dado_JS = P_ambos / P_JS;
console.log(P_Python_dado_JS); // 0.333... — 1 de cada 3 programadores JS también usa Python

Simulación Monte Carlo: estimar π

Un clásico que muestra el poder de la probabilidad computacional. Si lanzamos puntos aleatorios en un cuadrado de lado 1, la proporción que cae dentro del círculo inscrito se aproxima a π/4:

function estimarPi(muestras) {
  let dentroCirculo = 0;

  for (let i = 0; i < muestras; i++) {
    const x = Math.random(); // entre 0 y 1
    const y = Math.random();
    if (x * x + y * y <= 1) {
      dentroCirculo++;
    }
  }

  return 4 * (dentroCirculo / muestras);
}

console.log(estimarPi(1_000).toFixed(4));     // ~3.14xx
console.log(estimarPi(1_000_000).toFixed(4)); // ~3.1416

Con esto completamos el Curso de Estadística con JavaScript. Has aprendido a describir datos con frecuencias y distribuciones, calcular medidas centrales, visualizar resultados en el navegador y razonar sobre la incertidumbre con probabilidades. La estadística inferencial (intervalos de confianza, tests de hipótesis) es el siguiente nivel natural.