if (!require("pacman")) install.packages("pacman") # solo la primera vez
::p_load(lme4,
pacman
reghelper,
haven,
stargazer,# gráficos
ggplot2, # tablas de regresion (screenreg)
texreg, # manipulacion de datos
dplyr, # paquetes a cargar
equatiomatic)
= read_dta("http://www.stata-press.com/data/mlmus3/hsb.dta")
mlm
= mlm %>%
mlm select(minority,female,ses,mathach,size,sector,pracad,disclim,himinty,mnses,schoolid) %>%
as.data.frame()
MathJax
Correspondiente a la sesión del viernes, 13 de junio de 2025
MathJax es una biblioteca de JavaScript que permite mostrar notación matemática escrita en LaTeX, MathML o AsciiMath directamente en páginas web. Fue creada para que las expresiones matemáticas se vean bien, sean accesibles y funcionen en todos los navegadores modernos sin necesidad de software adicional.
En Quarto, MathJax se utiliza automáticamente para renderizar fórmulas matemáticas cuando el formato de salida es HTML o Reveal.js. No tienes que instalar nada extra ni importar manualmente
Formato de ecuaciones con MathJax
Para representar ecuaciones en la misma línea de texto, se deben escribir dentro de un par de signos ‘$’. Ejemplo:
Este texto contiene la siguiente ecuación: $E = mc^2$
genera:
- Este texto contiene la siguiente ecuación: \(E = mc^2\)
Para visualizar las ecuaciones en una siguiente línea, centrado, van dos pares del signo ‘$’. Ejemplo:
$$
E = mc^2
$$
genera:
\[ E = mc^2 \]
Elementos de MathJax
Fracciones
$$
\frac{1}{2}
$$
\[ \frac{1}{2} \]
Subíndice y exponenciales
$$
Y = X_1 + X_2
$$
\[ Y = X_1 + X_2 \]
$$
a^2 + b^2 = c^2
$$
\[ a^2 + b^2 = c^2 \]
Raíz cuadrada
$$
\sqrt{p}
$$
\[ \sqrt{p} \]
$$
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
$$
\[ x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} \]
Sumatoria
$$
\sum_{i = 1}^{n}{(\bar{x} - x_i)^2}
$$
\[ \sum_{i = 1}^{n}{(\bar{x} - x_i)^2} \]
Modelo lineal
$$
Y \sim X\beta_0 + X\beta_1 + \epsilon
$$
\[ Y \sim X\beta_0 + X\beta_1 + \epsilon \]
y como todo en R… ya casi todo se puede automatizar
Equatiomatic
<- lm(mathach~ses+female+sector+minority, data=mlm)
reg_lineal
extract_eq(reg_lineal)
\[ \operatorname{mathach} = \alpha + \beta_{1}(\operatorname{ses}) + \beta_{2}(\operatorname{female}) + \beta_{3}(\operatorname{sector}) + \beta_{4}(\operatorname{minority}) + \epsilon \]
Sin embargo, aún no disponible para estimaciones con lmer
= lmer(mathach ~ 1 + ses + female + sector + mnses + (1 | schoolid), data = mlm)
results_3 extract_eq(results_3)
\[ \begin{aligned} \operatorname{mathach}_{i} &\sim N \left(\alpha_{j[i]} + \beta_{1}(\operatorname{ses}) + \beta_{2}(\operatorname{female}), \sigma^2 \right) \\ \alpha_{j} &\sim N \left(\gamma_{0}^{\alpha} + \gamma_{1}^{\alpha}(\operatorname{sector}) + \gamma_{2}^{\alpha}(\operatorname{mnses}), \sigma^2_{\alpha_{j}} \right) \text{, for schoolid j = 1,} \dots \text{,J} \end{aligned} \]
Por lo tanto, se deben hacer manualmente:
$$
y_{ij} = \gamma_{00} + \gamma_{01} \text{ses} + \gamma_{02} \text{female} + \gamma_{03} \text{sector} + \gamma_{04} \text{mnses} + u_{0j} + r_{ij}
$$
\[ mathach_{ij} = \gamma_{00} + \gamma_{01} \text{ses} + \gamma_{02} \text{female} + \gamma_{03} \text{sector} + \gamma_{04} \text{mnses} + u_{0j} + r_{ij} \]
un intento de solución:
<- function(model, response_name = "y_{ij}") {
lmer_to_mathjax # Extrae los términos del modelo
<- attr(terms(model), "term.labels")
terms_fixed <- lme4::findbars(formula(model)[[3]])
re_terms
# Construye la parte fija de la ecuación
<- paste0("\\gamma_{0", seq_along(terms_fixed), "} \\text{", terms_fixed, "}")
gamma_terms <- "\\gamma_{00}"
gamma_0 <- paste(c(gamma_0, gamma_terms), collapse = " + ")
fixed_part
# Construye la parte aleatoria
<- c()
random_parts for (re in re_terms) {
<- as.character(re[[2]])
var_name if (length(re[[2]]) == 1) {
<- c(random_parts, paste0("u_{0j}"))
random_parts else {
} <- c(random_parts, paste0("u_{1j}"))
random_parts
}
}<- paste(unique(random_parts), collapse = " + ")
random_part
# Ruido
<- "r_{ij}"
noise_part
# Construcción final
<- paste(c(fixed_part, random_part, noise_part), collapse = " + ")
rhs <- paste0("$$\n", response_name, " = ", rhs, "\n$$")
equation
cat(equation)
}
# Generate MathJax
cat(lmer_to_mathjax(results_3))
\[ y_{ij} = \gamma_{00} + \gamma_{01} \text{ses} + \gamma_{02} \text{female} + \gamma_{03} \text{sector} + \gamma_{04} \text{mnses} + u_{0j} + r_{ij} \]