Nivelación matemática

Pre-cálculo, cálculo y fundamentos de probabilidad

Autor/a

Mauricio Bucca

Este documento reúne la nivelación matemática necesaria para comenzar el curso. Está diseñado para leerse en orden, de principio a fin: cada sección usa solamente conceptos definidos en las secciones anteriores.

La ruta es la siguiente:

  1. Pre-cálculo: funciones, exponenciales, logaritmos y sumatorias.
  2. Cálculo: límites, derivadas de una variable, derivadas parciales, gradiente e integrales.
  3. Probabilidad: experimentos aleatorios, eventos, reglas básicas, probabilidad condicional, Bayes, probabilidad total, independencia y simulación.

La meta no es reemplazar un curso completo de matemáticas, sino desarrollar con detalle el vocabulario, la notación y los procedimientos que se utilizarán después. Todos los conceptos necesarios para resolver los ejemplos se introducen antes de usarlos.

1. Pre-cálculo

Funciones

Una función \(f\) de un conjunto \(D\) (el dominio) a un conjunto \(Y\) (el codominio) es una regla que asigna un único elemento \(f(x) \in Y\) a cada elemento \(x \in D\):

\[f: D \to Y, \qquad x \mapsto f(x) \qquad (\text{``}y = f(x)\text{''})\]

El conjunto de todos los valores que efectivamente toma \(f(x)\) se llama recorrido (o rango) de la función, y puede ser un subconjunto propio del codominio.

Intuitivamente, una función es una máquina: entra \(x\), sale \(f(x)\), y cada entrada produce siempre la misma salida (aunque dos entradas distintas puedan compartir la misma salida).

Código
ggplot() +
  annotate("segment", x = 0, xend = 1.9, y = 1, yend = 1,
           arrow = arrow(length = unit(0.3, "cm")), linewidth = 1) +
  annotate("rect", xmin = 2, xmax = 4, ymin = 0.5, ymax = 1.5,
           fill = palette_curso[1], alpha = 0.15, color = palette_curso[1], linewidth = 1) +
  annotate("text", x = 3, y = 1, label = "f", size = 8, fontface = "bold", color = palette_curso[1]) +
  annotate("segment", x = 4.1, xend = 6, y = 1, yend = 1,
           arrow = arrow(length = unit(0.3, "cm")), linewidth = 1) +
  annotate("text", x = 1, y = 1.35, label = "x  (entrada, dominio)") +
  annotate("text", x = 5, y = 1.35, label = "f(x)  (salida, recorrido)") +
  xlim(-0.2, 6.2) + ylim(0.2, 1.8) +
  theme_void()

Una función como máquina: entra x, sale f(x)

Cuando una función se define con una fórmula y no se restringe el dominio explícitamente, se asume el dominio natural: el conjunto más grande de valores de \(x\) para los que la fórmula produce un número real. Para encontrarlo, la pregunta siempre es la misma: ¿qué valores de \(x\) “rompen” la fórmula? Hay dos culpables habituales:

  • Dividir por cero: si \(x\) aparece en un denominador, hay que excluir el valor que lo anula.
  • Raíz de un número negativo: si \(x\) aparece bajo una raíz par (\(\sqrt{\ }\)), lo de adentro no puede ser negativo.

Dos ejemplos paso a paso:

\(y = 1/x\). El único problema es dividir por cero. Preguntamos: ¿para qué \(x\) se anula el denominador? Para \(x=0\). Excluimos ese único punto: dominio \(= (-\infty,0)\cup(0,\infty)\). El recorrido se razona igual pero al revés: ¿qué valores de \(y\) nunca se alcanzan? Como \(1/x\) nunca da exactamente \(0\) (no existe \(x\) tal que \(1/x=0\)), el recorrido excluye el \(0\): \((-\infty,0)\cup(0,\infty)\).

\(y = \sqrt{4-x}\). El problema es la raíz: necesitamos que lo de adentro sea \(\ge 0\), es decir \(4-x \ge 0\), o sea \(x \le 4\). Dominio \(= (-\infty,4]\). El recorrido: una raíz cuadrada nunca es negativa, así que el recorrido es \([0,\infty)\).

Con la misma lógica se arman los otros tres casos:

Función Dominio Recorrido Razón del dominio
\(y = x^2\) \((-\infty,\infty)\) \([0,\infty)\) ningún valor de \(x\) rompe la fórmula
\(y = 1/x\) \((-\infty,0)\cup(0,\infty)\) \((-\infty,0)\cup(0,\infty)\) excluir \(x=0\) (división por cero)
\(y = \sqrt{x}\) \([0,\infty)\) \([0,\infty)\) necesita \(x \ge 0\) (raíz par)
\(y = \sqrt{4-x}\) \((-\infty,4]\) \([0,\infty)\) necesita \(4-x \ge 0\)
\(y = \sqrt{1-x^2}\) \([-1,1]\) \([0,1]\) necesita \(1-x^2 \ge 0\), es decir \(-1\le x\le 1\)
Tip

Ejercicio resuelto. Encontrar el dominio de \(g(x) = \sqrt{x^2-3x}\).

  1. Es una raíz par \(\Rightarrow\) necesitamos \(x^2-3x \ge 0\).
  2. Factorizamos: \(x(x-3) \ge 0\).
  3. Un producto de dos términos es \(\ge 0\) cuando ambos son positivos o ambos son negativos: eso pasa cuando \(x \le 0\) o \(x \ge 3\).
  4. Dominio: \((-\infty,0] \cup [3,\infty)\).

Ejemplo de evaluación directa: \(f(x) = 2x + 1\), evaluada en \(x=2\) da \(f(2) = 2(2)+1 = 5\).

Código
x_values <- seq(-5, 5, 0.1)
tibble(x = x_values, y = 2 * x_values + 1) %>%
  ggplot(aes(x, y)) +
  geom_line(color = palette_curso[1], linewidth = 1.3) +
  labs(x = "x", y = "f(x)")

f(x) = 2x + 1

Funciones comunes. Muchas de las funciones que aparecen en los ejemplos siguientes son casos particulares de unas pocas familias:

  • Lineal: \(f(x) = mx + b\).
  • Cuadrática / cúbica (casos de potencia, \(f(x) = x^n\)): capturan curvatura y asimetría.
  • Polinomios: sumas de potencias, \(p(x) = a_nx^n + \dots + a_1x + a_0\).
  • Racionales: cocientes de polinomios, \(f(x) = p(x)/q(x)\).
Código
x_values <- seq(-2, 2, length.out = 200)
tibble(x = x_values, Lineal = x_values, `Cuadrática` = x_values^2, `Cúbica` = x_values^3) %>%
  pivot_longer(-x, names_to = "función", values_to = "y") %>%
  ggplot(aes(x, y, color = función)) +
  geom_line(linewidth = 1.2) +
  scale_color_manual(values = palette_curso[1:3]) +
  coord_cartesian(ylim = c(-4, 4)) +
  labs(x = "x", y = "f(x)", color = NULL)

Funciones potencia: lineal, cuadrática y cúbica

Nótese la simetría: las funciones con potencia par (\(x^2\)) son simétricas respecto al eje \(y\); las de potencia impar (\(x^3\)) son simétricas respecto al origen.

Funciones exponenciales

Una función de la forma \(f(x) = a^x\), con base constante \(a > 0\), \(a \neq 1\), es una función exponencial. Su dominio es siempre \((-\infty,\infty)\) y su recorrido \((0,\infty)\) — una exponencial nunca vale cero ni es negativa.

Advertencia

No confundir \(2^x\) (exponencial, \(x\) en el exponente) con \(x^2\) (potencia, \(x\) en la base).

Reglas de exponentes (válidas para \(a,b>0\) y cualquier real \(x,y\)):

Regla Fórmula
Producto \(a^x \cdot a^y = a^{x+y}\)
Cociente \(a^x / a^y = a^{x-y}\)
Potencia de potencia \((a^x)^y = a^{xy}\)
Producto de bases \(a^x \cdot b^x = (ab)^x\)
Cociente de bases \(a^x / b^x = (a/b)^x\)
Código
x_values <- seq(-3, 3, length.out = 200)
tibble(x = x_values, `2^x` = 2^x_values, `e^x` = exp(x_values), `3^x` = 3^x_values) %>%
  pivot_longer(-x, names_to = "base", values_to = "y") %>%
  filter(y < 25) %>%
  ggplot(aes(x, y, color = base)) +
  geom_line(linewidth = 1.2) +
  scale_color_manual(values = palette_curso[1:3]) +
  labs(x = "x", y = "f(x)", color = NULL)

Funciones exponenciales con distintas bases

Una base especialmente importante es el número

\[e \approx 2.718281828.\]

En este material basta entenderlo como una constante, igual que \(\pi\): se puede elevar a cualquier potencia y define la función \(\exp(x)=e^x\). Su utilidad aparece naturalmente en procesos cuyo cambio es continuo, como el interés compuesto continuamente.

Crecimiento exponencial, paso a paso. ¿De dónde sale la fórmula \(y=y_0e^{kx}\)? Pensemos en \(\$100\) invertidos al 5.5% de interés anual, compuesto una vez al año.

  1. Al final del año 1: el monto es el capital más el interés, \(100 + 0.055\times 100 = 100(1.055)\).
  2. Al final del año 2: se vuelve a aplicar el 5.5% sobre el nuevo monto: \(100(1.055)\times 1.055 = 100(1.055)^2\).
  3. Repitiendo el proceso \(x\) veces, después de \(x\) años el monto es \(A = 100(1.055)^x\) — una función exponencial con base \(1.055\).
Código
anios <- 0:10
tibble(anio = anios, monto = 100 * 1.055^anios)
# A tibble: 11 × 2
    anio monto
   <int> <dbl>
 1     0  100 
 2     1  106.
 3     2  111.
 4     3  117.
 5     4  124.
 6     5  131.
 7     6  138.
 8     7  145.
 9     8  153.
10     9  162.
11    10  171.

Si el interés se compone continuamente en vez de una vez al año, el mismo razonamiento (llevado al límite) da la versión con \(e\): \(A = P e^{rt}\), con \(P\) el capital inicial, \(r\) la tasa anual y \(t\) los años transcurridos. Es la misma idea de “crecimiento proporcional al monto actual”, solo que la capitalización es instantánea en vez de anual.

Más en general, la familia \(y = y_0 e^{kx}\) modela crecimiento cuando \(k>0\) y decaimiento cuando \(k<0\) — el signo de \(k\) es lo único que distingue crecer de decaer. Un ejemplo de decaimiento: el carbono-14 se modela como \(y = y_0 e^{-rt}\) (\(r>0\)), usado para datar restos orgánicos — cada año que pasa queda una fracción constante del carbono-14 del año anterior, igual que cada año de interés multiplica el capital por un factor constante.

Funciones logarítmicas

Toda función exponencial \(f(x) = a^x\) es uno-a-uno (entradas distintas dan salidas distintas), por lo que tiene una función inversa: el logaritmo en base \(a\), \(y = \log_a x\), definido por

\[\log_a x = y \iff a^y = x.\]

El dominio de \(\log_a x\) es \((0,\infty)\) (el recorrido de \(a^x\)); su recorrido es \((-\infty,\infty)\) (el dominio de \(a^x\)).

El caso más importante es la base \(e\): el logaritmo natural, \(\ln x = \log_e x\), que satisface

\[\ln x = y \iff e^y = x, \qquad \ln e = 1.\]

Código
x_exp <- seq(-2, 2.5, length.out = 300)
x_log <- seq(0.05, 12, length.out = 300)

ggplot() +
  geom_line(data = tibble(x = x_exp, y = exp(x_exp)), aes(x, y, color = "e^x"), linewidth = 1.2) +
  geom_line(data = tibble(x = x_log, y = log(x_log)), aes(x, y, color = "ln(x)"), linewidth = 1.2) +
  geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "grey60") +
  scale_color_manual(values = c("e^x" = palette_curso[1], "ln(x)" = palette_curso[2])) +
  coord_cartesian(xlim = c(-2, 6), ylim = c(-2, 6)) +
  labs(x = "x", y = "f(x)", color = NULL)

e^x y ln(x) son funciones inversas: sus gráficos son simétricos respecto a la recta y = x

Propiedades algebraicas (para \(b, x > 0\)):

Regla Fórmula
Producto \(\ln(bx) = \ln b + \ln x\)
Cociente \(\ln(b/x) = \ln b - \ln x\)
Recíproco \(\ln(1/x) = -\ln x\)
Potencia \(\ln(x^r) = r\ln x\)
Inversa (base \(a\)) \(a^{\log_a x} = x, \quad \log_a(a^x) = x\)
Inversa (base \(e\)) \(e^{\ln x} = x, \quad \ln(e^x) = x\)
Cambio de base \(\log_a x = \dfrac{\ln x}{\ln a}\)

¿Para qué sirve, en la práctica? El logaritmo es la herramienta para “bajar” una \(x\) que está atrapada en un exponente. Ejemplo: ¿cuánto hay que esperar para que \(\$100\) invertidos al 5.5% anual se dupliquen? Necesitamos resolver \(100(1.055)^x = 200\) para \(x\).

  1. Simplificamos: \((1.055)^x = 2\).
  2. Aplicamos \(\ln\) a ambos lados (si dos números son iguales, sus logaritmos también lo son): \(\ln\big((1.055)^x\big) = \ln 2\).
  3. Usamos la regla de la potencia, \(\ln(x^r) = r\ln x\), para bajar el exponente: \(x \cdot \ln(1.055) = \ln 2\).
  4. Despejamos: \(x = \dfrac{\ln 2}{\ln(1.055)}\).
Código
log(2) / log(1.055)
[1] 12.95

Es decir, la inversión tarda unos 13 años en duplicarse. Este patrón — “aplicar \(\ln\), bajar el exponente con la regla de la potencia, despejar” — es el mismo que se usa para resolver cualquier ecuación donde la incógnita está en el exponente.

Dos consecuencias inmediatas de las reglas anteriores:

  • El logaritmo permite despejar exponentes, como en el ejemplo de la inversión.
  • El logaritmo convierte productos en sumas. Por ejemplo, \(\ln(2\cdot3\cdot5)=\ln 2+\ln 3+\ln 5\). Esto puede simplificar cálculos con muchos factores positivos.

Sumatorias

La sumatoria \(\Sigma\) es notación para sumar una secuencia de términos:

\[\sum_{i=1}^{n} a_i = a_1 + a_2 + \dots + a_n\]

donde \(i\) es el índice y \(n\) el límite superior (cuántos términos sumar).

Código
tibble(i = factor(1:5), termino = 1:5) %>%
  ggplot(aes(i, termino)) +
  geom_col(fill = palette_curso[1], width = 0.6) +
  geom_text(aes(label = termino), vjust = -0.4) +
  labs(x = "i", y = expression(a[i])) +
  theme(panel.grid.minor = element_blank())

Σ acumula cada término, uno tras otro

Dos propiedades útiles:

\[\sum_{i=1}^{n} c = c \cdot n \qquad \text{(suma de una constante)}\]

Por ejemplo, \(\sum_{i=1}^{5} 1 = 1+1+1+1+1 = 5\): sumar la constante \(1\) cinco veces es lo mismo que \(1 \times 5\).

\[\sum_{i=1}^{n} i = \frac{n(n+1)}{2} \qquad \text{(suma de los primeros } n \text{ naturales)}\]

Verifiquemos la fórmula con \(n=5\), expandiendo la suma término a término y comparando con la fórmula:

Código
n <- 5
suma_expandida <- 1 + 2 + 3 + 4 + 5
suma_formula <- n * (n + 1) / 2
c(expandida = suma_expandida, formula = suma_formula)
expandida   formula 
       15        15 

Ambas dan 15 — la fórmula no es magia, es solo un atajo para no tener que escribir todos los términos cuando \(n\) es grande.

Aplicación. Ventas diarias de una empresa durante una semana:

Día Ventas
Lunes 1500
Martes 1200
Miércoles 1800
Jueves 1300
Viernes 1400
Sábado 2000
Domingo 1700
Código
ventas_diarias <- c(1500, 1200, 1800, 1300, 1400, 2000, 1700)
sum(ventas_diarias)
[1] 10900

El total semanal es, literalmente, \(\sum_{i=1}^{7} \text{ventas}_i\).

2. Cálculo

Límites

Un límite describe el valor al que se acerca una función cuando su entrada se aproxima a un punto. La notación

\[\lim_{x\to a} f(x)=L\]

se lee: “el límite de \(f(x)\) cuando \(x\) tiende a \(a\) es \(L\)”. Significa que podemos hacer que \(f(x)\) quede tan cerca de \(L\) como queramos tomando valores de \(x\) suficientemente cercanos a \(a\).

Por ejemplo, si \(f(x)=2x+1\), entonces

\[\lim_{x\to 3}(2x+1)=7,\]

porque al acercar \(x\) a \(3\), el valor \(2x+1\) se acerca a \(7\):

\(x\) \(2x+1\)
2.9 6.8
2.99 6.98
3.01 7.02
3.1 7.2

En este ejemplo también se puede evaluar directamente \(f(3)=7\). Sin embargo, el límite se refiere a lo que ocurre cerca del punto, no necesariamente en el punto. Por ejemplo,

\[g(x)=\frac{x^2-1}{x-1}\]

no está definida en \(x=1\), porque allí se divide por cero. Para \(x\neq1\) podemos factorizar \(x^2-1=(x-1)(x+1)\) y simplificar:

\[g(x)=\frac{(x-1)(x+1)}{x-1}=x+1.\]

Por eso, aunque \(g(1)\) no exista,

\[\lim_{x\to1}\frac{x^2-1}{x-1}=2.\]

Esta idea permite definir una pendiente en un solo punto: calculamos pendientes entre dos puntos y hacemos que la distancia entre ellos tienda a cero.

Derivadas de una variable

La derivada de \(f\) en un punto \(x_0\) mide cuánto y en qué dirección cambia \(f\) ante un cambio infinitesimal de \(x\): es la pendiente de la recta tangente en ese punto.

Antes de la fórmula, recordemos qué es una pendiente: cuánto sube (o baja) una recta por cada unidad que avanza hacia la derecha.

\[\text{pendiente} = \frac{\text{cambio en } y}{\text{cambio en } x} = \frac{\Delta y}{\Delta x}\]

Código
ggplot() +
  geom_segment(aes(x = 1, xend = 4, y = 1, yend = 3), color = palette_curso[1], linewidth = 1.3) +
  geom_segment(aes(x = 1, xend = 4, y = 1, yend = 1), linetype = "dashed", color = "grey50") +
  geom_segment(aes(x = 4, xend = 4, y = 1, yend = 3), linetype = "dashed", color = "grey50") +
  geom_point(data = tibble(x = c(1, 4), y = c(1, 3)), aes(x, y), size = 3) +
  annotate("text", x = 2.5, y = 0.75, label = "Δx") +
  annotate("text", x = 4.25, y = 2, label = "Δy", hjust = 0) +
  coord_equal(xlim = c(0.5, 5), ylim = c(0.5, 3.5)) +
  theme_void()

Pendiente = Δy / Δx

El problema es que esta idea de pendiente solo tiene sentido entre dos puntos distintos — necesitamos “estirar” el mismo cálculo hasta un único punto. Ahí es donde entra el límite:

\[f'(x_0) = \lim_{h \to 0} \frac{f(x_0+h)-f(x_0)}{h}\]

El cociente \(\frac{f(x_0+h)-f(x_0)}{h}\) es la pendiente de la recta que une los puntos \((x_0, f(x_0))\) y \((x_0+h, f(x_0+h))\) — una secante. La derivada es lo que le pasa a esa pendiente cuando \(h\) se hace cada vez más chico, es decir, cuando el segundo punto se acerca al primero hasta casi tocarlo: la secante se convierte en tangente.

Código
f <- function(x) x^2
x0 <- 1
hs <- c(1.4, 0.8, 0.3)

secantes <- map_dfr(hs, function(h) {
  x1 <- x0 + h
  pendiente <- (f(x1) - f(x0)) / h
  tibble(h = paste0("h = ", h), x = c(x0 - 0.3, x1 + 0.3),
         y = f(x0) + pendiente * (c(x0 - 0.3, x1 + 0.3) - x0))
})

curva <- tibble(x = seq(-0.3, 3, 0.05), y = f(x))
tangente_real <- tibble(x = c(0.4, 2.2), y = f(x0) + 2 * x0 * (c(0.4, 2.2) - x0))

ggplot() +
  geom_line(data = curva, aes(x, y), color = "grey40", linewidth = 1) +
  geom_line(data = secantes, aes(x, y, color = h, group = h), linewidth = 1) +
  geom_line(data = tangente_real, aes(x, y), color = "black", linetype = "dashed", linewidth = 1) +
  geom_point(aes(x = x0, y = f(x0)), size = 3) +
  scale_color_manual(values = palette_curso[c(4, 2, 1)], name = NULL) +
  labs(x = "x", y = "f(x)")

A medida que h se achica, la secante se acerca a la tangente

La línea negra punteada es la tangente verdadera en \(x_0=1\) (pendiente \(2\)); las secantes de colores, con \(h\) cada vez más chico, se le acercan.

De dónde sale la regla de la potencia, paso a paso. Apliquemos la definición a \(f(x) = x^2\):

  1. \(f(x_0+h) = (x_0+h)^2 = x_0^2 + 2x_0h + h^2\).
  2. \(f(x_0+h) - f(x_0) = (x_0^2 + 2x_0h + h^2) - x_0^2 = 2x_0h + h^2\).
  3. Dividimos por \(h\): \(\dfrac{2x_0h+h^2}{h} = 2x_0 + h\).
  4. Tomamos el límite cuando \(h\to 0\): \(2x_0 + h \to 2x_0\).

Es decir, \(f'(x_0) = 2x_0\) — exactamente lo que predice la regla de la potencia, \(\frac{d}{dx}x^n = nx^{n-1}\), con \(n=2\). La regla general se obtiene repitiendo este mismo álgebra para cualquier \(n\).

Código
f_x <- function(x) x^2
f_prime <- function(x) 2 * x
x0 <- 2
pendiente <- f_prime(x0)
y0 <- f_x(x0)
tangente <- function(x) pendiente * (x - x0) + y0

x_values <- seq(-1, 4, 0.05)
tibble(x = x_values, f = f_x(x_values), t = tangente(x_values)) %>%
  ggplot(aes(x)) +
  geom_line(aes(y = f), color = palette_curso[1], linewidth = 1.3) +
  geom_line(aes(y = t), color = palette_curso[2], linewidth = 1.1, linetype = "dashed") +
  geom_point(aes(x = x0, y = y0), size = 3) +
  coord_cartesian(ylim = c(-2, 12)) +
  labs(x = "x", y = "f(x)")

f(x) = x², tangente en x = 2 (pendiente f’(2) = 4)

Reglas básicas:

Regla Fórmula
Constante \(\dfrac{d}{dx}c=0\)
Potencia \(\dfrac{d}{dx} x^n = n x^{n-1}\)
Exponencial \(\dfrac{d}{dx} e^x = e^x\)
Logaritmo \(\dfrac{d}{dx} \ln x = \dfrac{1}{x}\)
Múltiplo constante \(\dfrac{d}{dx}\big(cg(x)\big)=c\,g'(x)\)
Suma \(\dfrac{d}{dx}\big(g(x)+h(x)\big) = g'(x) + h'(x)\)
Producto \(\dfrac{d}{dx}\big(g(x)h(x)\big)=g'(x)h(x)+g(x)h'(x)\)
Cociente \(\dfrac{d}{dx}\dfrac{g(x)}{h(x)}=\dfrac{g'(x)h(x)-g(x)h'(x)}{[h(x)]^2}\)
Regla de la cadena \(\dfrac{d}{dx} f(g(x)) = f'(g(x))\cdot g'(x)\)

Aquí \(c\) representa una constante y, en la regla del cociente, se requiere \(h(x)\neq0\).

Regla de la cadena, paso a paso. Sirve para derivar una función compuesta: una función “de afuera” aplicada a una función “de adentro”. Ejemplo: derivar \(h(x) = (3x+1)^2\).

  1. Identificamos las dos capas: la de afuera es “elevar al cuadrado”, \(f(u) = u^2\); la de adentro es \(g(x) = 3x+1\). Entonces \(h(x) = f(g(x))\).
  2. Derivamos la de afuera dejando la de adentro intacta: \(f'(u) = 2u \;\Rightarrow\; f'(g(x)) = 2(3x+1)\).
  3. Derivamos la de adentro: \(g'(x) = 3\).
  4. Multiplicamos: \(h'(x) = f'(g(x))\cdot g'(x) = 2(3x+1)\cdot 3 = 6(3x+1) = 18x+6\).

La idea esencial es siempre la misma: derivar la capa exterior, conservar la capa interior en su lugar y multiplicar por la derivada de la capa interior.

Ejemplo de la regla de la suma: si \(f(x) = 2x^2 + 3x^3\), entonces \(f'(x) = 4x + 9x^2\) (se deriva cada término por separado y se suman los resultados).

Código
f <- function(x) 2 * x^2 + 3 * x^3
f_prime <- function(x) 4 * x + 9 * x^2
x_values <- seq(-3, 3, 0.05)

tibble(x = x_values, fx = f(x_values), dfx = f_prime(x_values)) %>%
  pivot_longer(-x, names_to = "curva", values_to = "y") %>%
  mutate(curva = recode(curva, fx = "f(x) = 2x² + 3x³", dfx = "f'(x) = 4x + 9x²")) %>%
  ggplot(aes(x, y, color = curva)) +
  geom_line(linewidth = 1.2) +
  scale_color_manual(values = palette_curso[1:2]) +
  coord_cartesian(ylim = c(-50, 50)) +
  labs(x = "x", y = NULL, color = NULL)

Regla de la suma: f(x) = g(x) + h(x) ⟹ f’(x) = g’(x) + h’(x)

Aplicación. Si la población de un país en el año \(t\) es \(P(t) = 500 + 20t^2\), su tasa de cambio es \(P'(t) = 40t\):

Código
P_prime <- function(t) 40 * t
P_prime(10)
[1] 400

En \(t=10\), la población crece a razón de 400 personas por año.

Puntos críticos. Si una función derivable tiene un máximo o un mínimo en un punto interior \(x^*\), la tangente allí es horizontal:

\[f'(x^*)=0.\]

La condición es necesaria, pero no suficiente: que \(f'(x^*)=0\) identifica un punto crítico, que luego hay que examinar para decidir si es un máximo, un mínimo o ninguno de los dos. Por ejemplo, \(f(x)=x^3\) tiene \(f'(0)=0\), pero sigue creciendo a ambos lados de \(0\).

Código
f <- function(x) -(x - 1)^2 + 4
x_values <- seq(-2, 4, length.out = 200)
tibble(x = x_values, y = f(x_values)) %>%
  ggplot(aes(x, y)) +
  geom_line(color = palette_curso[1], linewidth = 1.2) +
  geom_hline(yintercept = 4, linetype = "dashed", color = "grey60") +
  geom_point(aes(x = 1, y = 4), color = palette_curso[2], size = 3) +
  annotate("text", x = 1.5, y = 4.3, label = "f'(x*) = 0") +
  labs(x = "x", y = "f(x)")

Máximo de f: la tangente es horizontal

Esta observación permite resolver problemas de optimización, es decir, problemas en los que se busca el valor de \(x\) que hace a una función lo más grande o lo más pequeña posible: se encuentran sus puntos críticos y luego se comparan sus valores y su comportamiento.

Derivadas parciales

Hasta ahora estudiamos funciones con una entrada, \(y=f(x)\). Una función de dos variables recibe dos entradas y produce una salida:

\[z=f(x,y).\]

Por ejemplo,

\[f(x,y)=x^2+2y^2\]

asigna un número a cada par \((x,y)\). En el punto \((1,1)\), su valor es

\[f(1,1)=1^2+2(1)^2=3.\]

Como hay dos entradas que pueden cambiar, hay dos preguntas distintas:

  • ¿Cómo cambia \(f\) si cambia \(x\) y mantenemos \(y\) fija?
  • ¿Cómo cambia \(f\) si cambia \(y\) y mantenemos \(x\) fija?

Cada respuesta es una derivada parcial. Su definición usa el mismo límite que una derivada ordinaria, pero mantiene fija la otra variable:

\[ \frac{\partial f}{\partial x}(x_0,y_0) = \lim_{h\to0} \frac{f(x_0+h,y_0)-f(x_0,y_0)}{h}, \]

\[ \frac{\partial f}{\partial y}(x_0,y_0) = \lim_{h\to0} \frac{f(x_0,y_0+h)-f(x_0,y_0)}{h}. \]

Calculemos ambas para \(f(x,y)=x^2+2y^2\).

  1. Respecto a \(x\): tratamos \(y\) como una constante. La derivada de \(x^2\) es \(2x\) y la de \(2y^2\) respecto a \(x\) es \(0\):

    \[\frac{\partial f}{\partial x}(x,y)=2x.\]

  2. Respecto a \(y\): ahora tratamos \(x\) como una constante. La derivada de \(x^2\) respecto a \(y\) es \(0\) y la de \(2y^2\) es \(4y\):

    \[\frac{\partial f}{\partial y}(x,y)=4y.\]

  3. En \((1,1)\):

    \[\frac{\partial f}{\partial x}(1,1)=2, \qquad \frac{\partial f}{\partial y}(1,1)=4.\]

La primera pendiente se ve al cortar la superficie fijando \(y=1\); la segunda, al fijar \(x=1\). Los dos paneles siguientes representan la misma función y el mismo punto del ejemplo:

Código
f_dos <- function(x, y) x^2 + 2 * y^2
u <- seq(-1, 3, length.out = 300)

cortes <- bind_rows(
  tibble(
    variable = "Variar x; fijar y = 1",
    u = u,
    z = f_dos(u, 1),
    tangente = 3 + 2 * (u - 1)
  ),
  tibble(
    variable = "Variar y; fijar x = 1",
    u = u,
    z = f_dos(1, u),
    tangente = 3 + 4 * (u - 1)
  )
)

puntos_corte <- tibble(
  variable = c("Variar x; fijar y = 1", "Variar y; fijar x = 1"),
  u = 1,
  z = 3
)

ggplot(cortes, aes(u, z)) +
  geom_line(color = palette_curso[1], linewidth = 1.2) +
  geom_line(aes(y = tangente), color = palette_curso[2],
            linewidth = 1, linetype = "dashed") +
  geom_point(data = puntos_corte, size = 3) +
  facet_wrap(~variable) +
  coord_cartesian(ylim = c(0, 18)) +
  labs(x = "Variable que cambia", y = "f(x,y)")

Derivadas parciales de f(x,y) = x² + 2y² en (1,1): cada panel fija una variable y cambia la otra

En ambos paneles, la curva azul es el corte de \(f(x,y)=x^2+2y^2\) y la recta naranja es la tangente en \((1,1)\). La pendiente es \(2\) cuando cambia \(x\) y \(4\) cuando cambia \(y\). Por eso, cerca de ese punto, un cambio pequeño en \(y\) produce aproximadamente el doble de cambio en \(f\) que un cambio del mismo tamaño en \(x\).

Gradiente

El gradiente reúne todas las derivadas parciales en un vector, es decir, en una lista ordenada de números. Para una función de dos variables,

\[ \nabla f(x,y) = \left( \frac{\partial f}{\partial x}(x,y), \frac{\partial f}{\partial y}(x,y) \right). \]

Continuemos con la misma función:

\[f(x,y)=x^2+2y^2.\]

Como ya calculamos sus dos derivadas parciales,

\[\nabla f(x,y)=(2x,4y).\]

En el punto \((1,1)\),

\[\nabla f(1,1)=(2,4).\]

El primer componente, \(2\), describe el cambio en la dirección de \(x\); el segundo, \(4\), describe el cambio en la dirección de \(y\). Juntos forman una flecha que apunta en la dirección en la que \(f\) aumenta más rápidamente.

Código
grid <- expand_grid(x = seq(-3, 3, 0.12), y = seq(-3, 3, 0.12)) %>%
  mutate(z = x^2 + 2 * y^2)
punto <- tibble(x = 1, y = 1)

ggplot(grid, aes(x, y, z = z)) +
  geom_contour_filled(alpha = 0.75, bins = 10, show.legend = FALSE) +
  geom_point(data = punto, aes(x, y), inherit.aes = FALSE,
             size = 3, color = "white") +
  geom_segment(
    data = punto,
    aes(x = x, y = y, xend = x + 2 * 0.18, yend = y + 4 * 0.18),
    inherit.aes = FALSE,
    arrow = arrow(length = unit(0.25, "cm")),
    color = "white",
    linewidth = 1.1
  ) +
  coord_equal() +
  labs(x = "x", y = "y")

La misma función f(x,y) = x² + 2y²: el gradiente ∇f(1,1) = (2,4) apunta hacia el crecimiento más rápido

Las curvas de color unen puntos donde \(f\) tiene el mismo valor. La flecha blanca parte de \((1,1)\) y tiene la dirección de \((2,4)\); cruza esas curvas hacia valores cada vez mayores.

Para reducir una función, se avanza en la dirección contraria al gradiente. Este procedimiento se llama descenso de gradiente. Con un tamaño de paso \(\alpha>0\), la actualización es

\[ (x_{\text{nuevo}},y_{\text{nuevo}}) = (x,y)-\alpha\nabla f(x,y), \]

donde la resta se hace componente a componente. Desde \((1,1)\), con \(\alpha=0.1\):

\[ (x_{\text{nuevo}},y_{\text{nuevo}}) =(1,1)-0.1(2,4) =(0.8,0.6). \]

En efecto, \(f(1,1)=3\) y \(f(0.8,0.6)=0.8^2+2(0.6)^2=1.36\): el valor disminuyó.

Integrales

Así como la derivada mide una pendiente, la integral mide un área acumulada bajo la curva de \(f\) entre \(a\) y \(b\):

\[\int_a^b f(x)\, dx = \text{área bajo } f \text{ entre } a \text{ y } b\]

De dónde sale la idea, intuitivamente. Para aproximar el área bajo \(f\) entre \(a\) y \(b\), se puede dividir el intervalo en \(n\) rectángulos angostos de ancho \(\Delta x\), con altura \(f(x_i)\) en cada uno, y sumarlos — exactamente la sumatoria \(\sum_{i=1}^n f(x_i)\,\Delta x\) que vimos en Pre-cálculo.

Código
f <- function(x) 2 * x
a <- 1; b <- 3; n <- 6
xs <- seq(a, b, length.out = n + 1)
rects <- tibble(xmin = xs[-length(xs)], xmax = xs[-1], ymin = 0, ymax = f(xs[-length(xs)]))
curva <- tibble(x = seq(a - 0.2, b + 0.2, 0.02), y = f(x))

ggplot() +
  geom_rect(data = rects, aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax),
            fill = palette_curso[1], alpha = 0.4, color = "white") +
  geom_line(data = curva, aes(x, y), color = palette_curso[2], linewidth = 1.2) +
  labs(x = "x", y = "f(x)")

Aproximando el área bajo f(x) = 2x con rectángulos (suma de Riemann)

A medida que los rectángulos se hacen más angostos (\(\Delta x \to 0\), \(n\to\infty\)), esa suma se acerca cada vez más al área real bajo la curva. La integral \(\int_a^b f(x)\,dx\) es, literalmente, el límite de esa sumatoria. Por suerte, el Teorema Fundamental del Cálculo (más abajo) nos evita tener que sumar infinitos rectángulos a mano.

Propiedades:

\[\int c \cdot f(x)\, dx = c \int f(x)\, dx \qquad \text{(linealidad)}\] \[\int \big(f(x)+g(x)\big)\, dx = \int f(x)\, dx + \int g(x)\, dx \qquad \text{(aditividad)}\] \[\int_a^b f(x)\, dx = -\int_b^a f(x)\, dx \qquad \text{(invertir el intervalo)}\]

Ejemplo: el área bajo \(f(x) = 2x\) entre \(x=1\) y \(x=3\) es \(\int_1^3 2x\, dx = \big[x^2\big]_1^3 = 9 - 1 = 8\).

Código
x_values <- seq(0, 3.5, 0.02)
ggplot(tibble(x = x_values, y = 2 * x_values), aes(x, y)) +
  geom_line(color = palette_curso[1], linewidth = 1.2) +
  geom_ribbon(data = tibble(x = seq(1, 3, 0.02)) %>% mutate(y = 2 * x),
              aes(x, ymin = 0, ymax = y), fill = palette_curso[1], alpha = 0.3) +
  labs(x = "x", y = "f(x)")

∫₁³ 2x dx = 8: área bajo f(x) = 2x entre x = 1 y x = 3

Teorema Fundamental del Cálculo. Conecta derivación e integración:

  1. Si \(F(x) = \int_a^x f(t)\, dt\), entonces \(F'(x) = f(x)\).
  2. Si \(F\) es una antiderivada de \(f\), entonces \(\int_a^b f(x)\, dx = F(b) - F(a)\).

La segunda parte es la que usamos en la práctica: encontrar una antiderivada y evaluarla en los extremos.

Ejemplo, paso a paso. \(f(x) = 2x^2+3\) en \([1,2]\).

  1. Buscamos una antiderivada \(F\) (una función cuya derivada sea \(f\)): \(F(x) = \dfrac{2x^3}{3}+3x\). Verificación rápida: \(F'(x) = 2x^2 + 3 = f(x)\). ✓.
  2. Evaluamos en el límite superior: \(F(2) = \dfrac{2(2)^3}{3}+3(2) = \dfrac{16}{3}+6\).
  3. Evaluamos en el límite inferior: \(F(1) = \dfrac{2(1)^3}{3}+3(1) = \dfrac{2}{3}+3\).
  4. Restamos (superior menos inferior): \(F(2)-F(1) = \left(\tfrac{16}{3}+6\right) - \left(\tfrac{2}{3}+3\right) = \tfrac{23}{3}\).

\[\int_1^2 (2x^2+3)\,dx = \tfrac{23}{3}\]

Código
x_values <- seq(0.5, 3, 0.01)
ggplot(tibble(x = x_values, y = 2 * x_values^2 + 3), aes(x, y)) +
  geom_line(color = palette_curso[1], linewidth = 1.2) +
  geom_ribbon(data = tibble(x = seq(1, 2, 0.01)) %>% mutate(y = 2 * x^2 + 3),
              aes(x, ymin = 0, ymax = y), fill = palette_curso[2], alpha = 0.4) +
  labs(x = "x", y = "f(x)")

∫₁² (2x² + 3) dx = 23/3

Aplicación. Si la tasa de cambio de una población es \(p(t) = 3t^2\) (miles de personas por año, \(t\) en años desde 2020), el cambio total de población entre 2020 y 2023 es

\[\int_0^3 3t^2\, dt = \big[t^3\big]_0^3 = 27\]

Código
integrate(function(t) 3 * t^2, 0, 3)
27 with absolute error < 0.0000000000003

La población aumentó en 27 mil personas en esos 3 años — y integrate() (integración numérica) confirma el resultado analítico.

3. Introducción a probabilidad

Experimentos aleatorios y espacio muestral

Un experimento aleatorio es un proceso —real o hipotético— cuyo resultado concreto no se conoce antes de realizarlo, aunque sí se conocen sus posibles resultados.

Experimento: tirar un dado. Posibles resultados: números enteros entre 1 y 6.

Cada posible resultado individual se llama resultado elemental. El conjunto de todos ellos se llama espacio muestral, \(\Omega\):

\[\Omega = \{1,2,3,4,5,6\}\]

Eventos

Un evento es un subconjunto bien definido de los posibles resultados de un experimento.

\(A\): “obtener un 1 o un 5” \(\to A=\{1,5\}\).

Código
circ_a <- circle_df(0, 0, 1.3)

ggplot() +
  annotate("rect", xmin = -2.2, xmax = 2.2, ymin = -1.8, ymax = 1.8,
           fill = NA, color = "grey40", linewidth = 1) +
  geom_polygon(data = circ_a, aes(x, y), fill = palette_curso[1], alpha = 0.4, color = palette_curso[1]) +
  annotate("text", x = -1.9, y = 1.55, label = "Ω", size = 6, hjust = 0) +
  annotate("text", x = 0, y = 0, label = "A", size = 6, fontface = "bold") +
  coord_equal() + theme_void()

Un evento A es un subconjunto del espacio muestral Ω

Operaciones con eventos

Sean \(A\) y \(B\) dos eventos:

  • La intersección, \(A\cap B\), contiene los resultados que pertenecen a \(A\) y a \(B\).
  • La unión, \(A\cup B\), contiene los resultados que pertenecen a \(A\), a \(B\) o a ambos. Este “o” es inclusivo.
  • El complemento, \(A^c\), contiene los resultados del espacio muestral que no pertenecen a \(A\).
  • El conjunto vacío, \(\varnothing\), representa un evento imposible.

Dos eventos son mutuamente excluyentes si no pueden ocurrir al mismo tiempo, es decir, si \(A\cap B=\varnothing\). Una colección de eventos forma una partición de \(\Omega\) si sus eventos son mutuamente excluyentes y, al unirlos, cubren todo el espacio muestral.

Ejemplo con un dado:

\[A=\{1,3,5\}\quad\text{(resultado impar)},\qquad B=\{4,5,6\}\quad\text{(resultado mayor que 3)}.\]

Entonces,

\[A\cap B=\{5\},\qquad A\cup B=\{1,3,4,5,6\},\qquad A^c=\{2,4,6\}.\]

Probabilidad y reglas básicas

A cada evento se le asocia un número que cuantifica su probabilidad de ocurrencia: \(\mathbb{P}(A) \in [0,1]\).

Cuando los resultados elementales son igualmente probables,

\[ \mathbb{P}(A) = \frac{\text{número de resultados favorables a }A} {\text{número total de resultados}}. \]

Con un dado justo, los seis resultados son igualmente probables. Si \(A=\{1,5\}\), entonces \(\mathbb{P}(A)=2/6=1/3\).

Reglas básicas:

  1. Rango: \(0 \le \mathbb{P}(A) \le 1\).
  2. Evento seguro e imposible: \(\mathbb{P}(\Omega)=1\) y \(\mathbb{P}(\varnothing)=0\).
  3. Complemento: \(\mathbb{P}(A^c)=1-\mathbb{P}(A)\).
  4. Unión: \(\mathbb{P}(A\cup B)=\mathbb{P}(A)+\mathbb{P}(B)-\mathbb{P}(A\cap B)\).
  5. Unión de eventos mutuamente excluyentes: si \(A\cap B=\varnothing\), entonces \(\mathbb{P}(A\cup B)=\mathbb{P}(A)+\mathbb{P}(B)\).
Código
circ_a <- circle_df(-0.6, 0, 1.3)
circ_b <- circle_df(0.6, 0, 1.3)

ggplot() +
  annotate("rect", xmin = -2.6, xmax = 2.6, ymin = -1.8, ymax = 1.8,
           fill = NA, color = "grey40", linewidth = 1) +
  geom_polygon(data = circ_a, aes(x, y), fill = palette_curso[1], alpha = 0.45, color = palette_curso[1]) +
  geom_polygon(data = circ_b, aes(x, y), fill = palette_curso[2], alpha = 0.45, color = palette_curso[2]) +
  annotate("text", x = -2.3, y = 1.55, label = "Ω", size = 6, hjust = 0) +
  annotate("text", x = -1.1, y = 0, label = "A", size = 6, fontface = "bold") +
  annotate("text", x = 1.1, y = 0, label = "B", size = 6, fontface = "bold") +
  annotate("text", x = 0, y = -1.55, label = "A y B (traslape)", size = 4) +
  coord_equal() + theme_void()

P(A o B) = P(A) + P(B) − P(A y B): la zona de traslape (A y B) no se cuenta dos veces

Ejemplo (regla 4): con \(A=\{1,5\}\) y \(B=\{5,6\}\), tenemos \(\mathbb{P}(A)=2/6\), \(\mathbb{P}(B)=2/6\) y \(\mathbb{P}(A\cap B)=1/6\). Por lo tanto, \(\mathbb{P}(A\cup B)=2/6+2/6-1/6=3/6\). Restamos una vez la probabilidad del resultado \(5\) porque había sido contado en ambos eventos.

Probabilidad condicional

La probabilidad de \(A\) una vez que sabemos que ocurrió \(B\) es la probabilidad condicional de \(A\) dado \(B\):

\[\mathbb{P}(A \mid B) = \frac{\mathbb{P}(A\cap B)}{\mathbb{P}(B)},\qquad \mathbb{P}(B)>0.\]

Condicionar en \(B\) significa restringir el espacio de resultados posibles a \(B\) y preguntar qué fracción de ese nuevo espacio también pertenece a \(A\).

Ejemplo: dado justo, \(A=\{4,5,6\}\) (“cuatro o más”) y \(B=\{2,4,6\}\) (“par”). Una vez que sabemos que el resultado es par, los únicos resultados posibles son \(\{2,4,6\}\); dos de ellos, \(\{4,6\}\), también pertenecen a \(A\). Por eso, \(\mathbb{P}(A\mid B)=\dfrac{2/6}{3/6}=\dfrac{2}{3}\).

Al despejar el numerador se obtiene la regla del producto:

\[\mathbb{P}(A\cap B)=\mathbb{P}(A\mid B)\,\mathbb{P}(B).\]

Ejemplo resuelto. En una población simplificada en dos grupos exhaustivos, \(M\) (mujeres) y \(H\) (hombres), un 5% son mujeres con estudios universitarios completos (\(U\)); las mujeres son 55% de la población y 20% de la población tiene estudios universitarios completos.

  • \(\mathbb{P}(U \mid M) = 0.05 / 0.55 \approx 0.09\)
  • \(\mathbb{P}(M \mid U) = 0.05 / 0.20 = 0.25\)
  • \(\mathbb{P}(H \mid U) = 1 - \mathbb{P}(M \mid U) = 0.75\) (H = hombre)

En general, \(\mathbb{P}(A\mid B)\neq\mathbb{P}(B\mid A)\). El teorema de Bayes entrega una forma sistemática de pasar de un orden de condicionamiento al otro.

Teorema de Bayes

La idea: ya sabemos calcular \(\mathbb{P}(A\mid B)\) a partir de \(\mathbb{P}(A\cap B)\). Bayes usa la misma intersección escrita mediante la regla del producto en los dos órdenes posibles.

Derivación, paso a paso:

  1. Por la regla del producto: \(\mathbb{P}(A\cap B)=\mathbb{P}(A\mid B)\mathbb{P}(B)\).
  2. Como \(A\cap B=B\cap A\), también: \(\mathbb{P}(A\cap B)=\mathbb{P}(B\mid A)\mathbb{P}(A)\).
  3. Igualamos ambas expresiones: \(\mathbb{P}(A\mid B)\mathbb{P}(B)=\mathbb{P}(B\mid A)\mathbb{P}(A)\).
  4. Dividimos por \(\mathbb{P}(B)\), suponiendo \(\mathbb{P}(B)>0\):

\[ \mathbb{P}(A\mid B) = \frac{\mathbb{P}(B\mid A)\,\mathbb{P}(A)} {\mathbb{P}(B)}. \]

Aplicado al ejemplo anterior, paso a paso (queremos \(\mathbb{P}(U\mid H)\), y ya conocemos \(\mathbb{P}(H\mid U)=0.75\), \(\mathbb{P}(U)=0.2\), \(\mathbb{P}(H)=1-0.55=0.45\)):

  1. En la fórmula usamos \(A=U\) y \(B=H\).
  2. Reemplazamos en la fórmula: \(\mathbb{P}(U \mid H) = \dfrac{\mathbb{P}(H \mid U)\,\mathbb{P}(U)}{\mathbb{P}(H)}\).
  3. Sustituimos los números: \(= \dfrac{0.75 \times 0.2}{0.45}\).
  4. Calculamos: \(= \dfrac{0.15}{0.45} \approx 0.33\).
Código
(0.75 * 0.2) / 0.45
[1] 0.3333

Ley de probabilidad total

Si \(\{B_1,\dots,B_n\}\) particiona \(\Omega\) en subconjuntos mutuamente excluyentes, entonces

\[\mathbb{P}(A) = \sum_{i=1}^n \mathbb{P}(A \mid B_i)\,\mathbb{P}(B_i)\]

La intuición: si queremos \(\mathbb{P}(A)\) pero no la conocemos directamente, la separamos según cada posible “camino” hacia \(A\) (uno por cada \(B_i\)), calculamos la probabilidad de cada camino por separado, y las sumamos.

Continuación del mismo ejemplo. Podemos recuperar \(\mathbb{P}(U)=0.20\) separando la población en los grupos \(H\) y \(M\).

  1. \(H\) y \(M\) forman una partición de la población.
  2. Del ejemplo anterior, \(\mathbb{P}(U\mid H)=1/3\) y \(\mathbb{P}(H)=0.45\). Este camino aporta \((1/3)(0.45)=0.15\).
  3. También calculamos \(\mathbb{P}(U\mid M)=0.05/0.55=1/11\), y sabemos que \(\mathbb{P}(M)=0.55\). Este camino aporta \((1/11)(0.55)=0.05\).
  4. Sumamos ambos caminos: \(\mathbb{P}(U)=0.15+0.05=0.20\).
Código
(1 / 3) * 0.45 + (1 / 11) * 0.55
[1] 0.2

Independencia estadística

Dos eventos \(A\) y \(B\) son independientes si la ocurrencia de uno no afecta la probabilidad del otro. Si \(\mathbb{P}(B)>0\):

\[\mathbb{P}(A \mid B) = \mathbb{P}(A) \quad\iff\quad \mathbb{P}(A\cap B) = \mathbb{P}(A)\,\mathbb{P}(B)\]

Ejemplo: dos monedas justas, \(A\) = “cara en la primera” y \(B\) = “sello en la segunda”. Entonces \(\mathbb{P}(A)=\mathbb{P}(B)=1/2\) y \(\mathbb{P}(A\cap B)=1/4=\mathbb{P}(A)\mathbb{P}(B)\); por lo tanto, son independientes.