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:
Pre-cálculo: funciones, exponenciales, logaritmos y sumatorias.
Cálculo: límites, derivadas de una variable, derivadas parciales, gradiente e integrales.
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}\).
Es una raíz par \(\Rightarrow\) necesitamos \(x^2-3x \ge 0\).
Factorizamos: \(x(x-3) \ge 0\).
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\).
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\).
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.
Al final del año 1: el monto es el capital más el interés, \(100 + 0.055\times 100 = 100(1.055)\).
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\).
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:10tibble(anio = anios, monto =100*1.055^anios)
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\).
Simplificamos: \((1.055)^x = 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\).
Usamos la regla de la potencia, \(\ln(x^r) = r\ln x\), para bajar el exponente: \(x \cdot \ln(1.055) = \ln 2\).
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).
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:
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^2x0 <-1hs <-c(1.4, 0.8, 0.3)secantes <-map_dfr(hs, function(h) { x1 <- x0 + h pendiente <- (f(x1) -f(x0)) / htibble(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\):
Dividimos por \(h\): \(\dfrac{2x_0h+h^2}{h} = 2x_0 + h\).
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^2f_prime <-function(x) 2* xx0 <-2pendiente <-f_prime(x0)y0 <-f_x(x0)tangente <-function(x) pendiente * (x - x0) + y0x_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)
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\).
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))\).
Derivamos la de afuera dejando la de adentro intacta: \(f'(u) = 2u \;\Rightarrow\; f'(g(x)) = 2(3x+1)\).
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^3f_prime <-function(x) 4* x +9* x^2x_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* tP_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+4x_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:
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^2u <-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,
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
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* xa <-1; b <-3; n <-6xs <-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.
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)}.\]
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:
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\)
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:
Por la regla del producto: \(\mathbb{P}(A\cap B)=\mathbb{P}(A\mid B)\mathbb{P}(B)\).
Como \(A\cap B=B\cap A\), también: \(\mathbb{P}(A\cap B)=\mathbb{P}(B\mid A)\mathbb{P}(A)\).
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\)):
En la fórmula usamos \(A=U\) y \(B=H\).
Reemplazamos en la fórmula: \(\mathbb{P}(U \mid H) = \dfrac{\mathbb{P}(H \mid U)\,\mathbb{P}(U)}{\mathbb{P}(H)}\).
Sustituimos los números: \(= \dfrac{0.75 \times 0.2}{0.45}\).
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\).
\(H\) y \(M\) forman una partición de la población.
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\).
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\).
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.