3  Modelos para Datos Censurados: el Modelo Tobit

3.1 El problema: variables continuas con restricciones en el rango

Los capítulos anteriores trataron los casos en que la variable dependiente es discreta. Pero hay una familia importante de situaciones en las que \(y_i\) es continua y en principio podría tomar cualquier valor positivo — el gasto mensual en seguros, las donaciones a organizaciones benéficas, las horas de formación — y sin embargo una fracción sustancial de la muestra presenta exactamente el valor cero. Este cero no es un error de medida ni una anomalía: refleja una decisión económica genuina. La familia que no contrata ningún seguro no tiene un gasto negativo en seguros: simplemente no gasta nada porque su “demanda óptima” es nula dado su nivel de renta y sus preferencias.

Estamos ante lo que en el capítulo introductorio definimos como datos censurados por la izquierda: existe una variable latente \(y_i^*\) que representa la “demanda óptima” o el “gasto deseado”, pero cuando esta demanda es no positiva, lo que observamos es el valor de censura \(y_i = 0\). El problema econométrico es que MCO aplicado a los datos observados produce estimaciones sesgadas, porque trata los ceros como si fueran valores reales del proceso continuo subyacente. El modelo Tobit, desarrollado por James Tobin en 1958 (Tobin 1958), resuelve este problema estimando correctamente el mecanismo que genera simultáneamente los ceros y los valores positivos.

3.2 El modelo Tobit tipo I

3.2.1 La estructura del modelo

El modelo Tobit clásico (se le denomina también Tipo I) parte, como el Probit y el Logit, del enfoque de variable latente. Existe un proceso continuo subyacente:

\[y_i^* = \mathbf{x}_i'\boldsymbol{\beta} + u_i, \qquad u_i \sim N(0, \sigma^2)\]

Lo que diferencia al Tobit de los modelos de elección discreta es la regla de observación: en lugar de observar solo si \(y_i^* > 0\) o no, observamos el valor exacto de \(y_i^*\) siempre que sea positivo:

\[y_i = \begin{cases} y_i^* = \mathbf{x}_i'\boldsymbol{\beta} + u_i & \text{si } y_i^* > 0 \\ 0 & \text{si } y_i^* \leq 0 \end{cases}\]

El parámetro \(\sigma\) es la desviación típica del término de error, que también se estima. Esto distingue al Tobit del Probit: en el Probit, \(\sigma\) se normaliza a 1 porque solo observamos la decisión dicotómica; en el Tobit, al observar los valores exactos de \(y_i^*\) cuando es positivo, podemos identificar \(\sigma\) por separado.

Code
set.seed(2031)
n <- 300; x <- runif(n, 0, 10)
y_star <- -8 + 2.5*x + rnorm(n, 0, 4)
y_obs  <- pmax(y_star, 0)
sel    <- y_star > 0

par(mfrow=c(1,2), mar=c(4.5,4.5,1.5,0.5))

# Panel 1: variable latente
plot(x, y_star, pch=ifelse(sel,16,1), col=ifelse(sel,gray(0.20),gray(0.65)),
     xlab="x", ylab=expression(y^"*"~(variable~latente)),
     main="Variable latente")
abline(h=0, lty=2, col=gray(0.45))
abline(-8, 2.5, lwd=2, lty=1)
legend("topleft", legend=c(expression(y^"*">0), expression(y^"*"<=0)),
       pch=c(16,1), col=c(gray(0.20),gray(0.65)), bty="n", cex=0.8)

# Panel 2: variable observada con MCO
plot(x, y_obs, pch=ifelse(sel,16,1), col=ifelse(sel,gray(0.20),gray(0.65)),
     xlab="x", ylab="y (observada, censurada en 0)",
     main="Variable observada")
abline(h=0, lty=2, col=gray(0.45))
abline(lm(y_obs ~ x), lwd=2, lty=1)
abline(-8, 2.5, lwd=2, lty=2)
legend("topleft", legend=c("MCO (sesgado)","Pendiente verdadera"),
       lty=c(1,2), lwd=2, bty="n", cex=0.8)

par(mfrow=c(1,1))
Figure 3.1: Estructura del modelo Tobit. Panel izquierdo: la variable latente y* es continua y puede tomar valores negativos, pero lo que observamos (panel derecho) es y = max(y, 0). Los puntos rellenos corresponden a observaciones con y > 0 y los huecos a los censurados en 0. La recta MCO (línea sólida) queda sesgada respecto a la pendiente verdadera de y* (línea discontinua).

La Figure 3.1 ilustra el sesgo de MCO con datos censurados. En el panel derecho, la recta MCO (sólida) tiene pendiente claramente inferior a la de la relación verdadera (discontinua) porque los ceros “tiran hacia abajo” la estimación.

En el caso del modelo Tobit son clave los supuestos de normalidad, homocedasticidad e independencia del error. A diferencia de MCO, donde la heterocedasticidad causa ineficiencia pero no inconsistencia, en el Tobit la violación de normalidad o homocedasticidad produce inconsistencia. Esto tiene implicaciones directas para el diagnóstico, que desarrollaremos más adelante.

3.2.2 Proporción de censura

Antes de interpretar cualquier resultado, el primer dato que debe calcularse es la proporción de censura de la muestra. Se define como la fracción de observaciones en las que la variable dependiente se encuentra en el límite de censura:

\[\text{Proporción de censura} = \frac{\text{Número de observaciones con } y_i = c}{n}\]

Por ejemplo, si en una muestra de 500 individuos hay 150 con \(y_i = 0\) (horas trabajadas = 0), la proporción de censura es \(150/500 = 0{,}30\) (un 30%). En R, este cálculo es inmediato: mean(datos$y == 0) devuelve directamente la proporción.

Este dato es fundamental porque condiciona la magnitud de la diferencia entre el coeficiente \(\beta_j\) y el efecto marginal sobre la variable observada. Cuanto mayor sea la proporción de censura, mayor será la discrepancia entre ambos, y más imprescindible resulta el cálculo explícito de los efectos marginales.

3.2.3 La reparametrización de Olsen (1978)

La estimación del modelo Tobit por máxima verosimilitud requiere que un algoritmo numérico encuentre los valores de \(\boldsymbol{\beta}\) y \(\sigma\) que maximizan la función \(\ln L(\boldsymbol{\beta}, \sigma)\). A diferencia de MCO, donde existe una fórmula cerrada \((\mathbf{X}'\mathbf{X})^{-1}\mathbf{X}'\mathbf{y}\), en el Tobit no hay solución analítica: la presencia simultánea de \(\Phi(\cdot)\) y \(\phi(\cdot)\) en la log-verosimilitud impide despejar los parámetros. Por tanto, se recurre a métodos iterativos como Newton-Raphson o BFGS, que parten de unos valores iniciales y los van refinando hasta alcanzar el máximo.

En la práctica, la maximización directa con respecto a \((\boldsymbol{\beta}, \sigma)\) puede presentar dificultades numéricas. Los parámetros \(\boldsymbol{\beta}\) y \(\sigma\) operan en escalas muy diferentes (los coeficientes pueden valer 0.5 mientras que \(\sigma\) vale 3), lo que dificulta la convergencia del algoritmo. Además, cuando la proporción de observaciones censuradas es alta o la varianza es pequeña, la superficie de la log-verosimilitud puede ser muy plana en algunas direcciones, provocando que el algoritmo avance lentamente o se detenga antes de alcanzar el óptimo.

Olsen (1978) propuso una transformación que resuelve estas dificultades de forma elegante. En lugar de estimar directamente \((\boldsymbol{\beta}, \sigma)\), se definen dos nuevos parámetros:

\[ \gamma = \frac{\boldsymbol{\beta}}{\sigma}, \qquad \lambda = \frac{1}{\sigma} \]

La ventaja de esta transformación es que los nuevos parámetros \((\gamma, \lambda)\) operan en escalas más similares entre sí, lo que facilita el trabajo del algoritmo de optimización. La superficie de la log-verosimilitud expresada en términos de \((\gamma, \lambda)\) tiene una curvatura más regular, lo que permite que el algoritmo converja más rápidamente y con mayor estabilidad numérica.

Con esta reparametrización, la log-verosimilitud se reescribe como:

\[ \ln L(\gamma, \lambda) = \sum_{y_i = 0} \ln\!\left[\Phi\!\left(-\mathbf{x}_i\gamma\right)\right] + \sum_{y_i > 0} \left\{\ln(\lambda) - \frac{\lambda^2}{2}(y_i - \mathbf{x}_i\gamma/\lambda)^2\right\} \]

Una vez que el algoritmo encuentra los valores óptimos \((\hat{\gamma}, \hat{\lambda})\), la recuperación de los parámetros originales es inmediata:

\[ \hat{\sigma} = \frac{1}{\hat{\lambda}}, \qquad \hat{\boldsymbol{\beta}} = \frac{\hat{\gamma}}{\hat{\lambda}} \]

En la práctica, el usuario no necesita preocuparse de esta transformación: los paquetes de software (como censReg o AER en R) la implementan internamente de forma transparente. El usuario especifica el modelo y obtiene directamente las estimaciones de \(\hat{\boldsymbol{\beta}}\) y \(\hat{\sigma}\), ya reconvertidas a la escala original.

Desde una perspectiva histórica, la reparametrización de Olsen fue un avance importante en los años setenta, cuando la capacidad de cálculo era muy limitada. James Tobin había propuesto el modelo en 1958, pero su estimación práctica no fue viable hasta que Olsen resolvió los problemas numéricos. Hoy, aunque los ordenadores son incomparablemente más potentes, la reparametrización sigue siendo el método estándar porque mejora de forma significativa la velocidad y la fiabilidad de la convergencia.

3.2.4 Por qué MCO es inconsistente con datos censurados

El sesgo de MCO no es simplemente un problema de eficiencia que desaparece con muestras grandes: es una inconsistencia. Para verlo, consideremos la esperanza condicional de la variable observada:

\[E[y_i \mid \mathbf{x}_i] = P(y_i^* > 0) \cdot E[y_i^* \mid y_i^* > 0, \mathbf{x}_i] = \Phi(z_i) \cdot \left(\mathbf{x}_i'\boldsymbol{\beta} + \sigma\,\frac{\phi(z_i)}{\Phi(z_i)}\right)\]

donde \(z_i = \mathbf{x}_i'\boldsymbol{\beta}/\sigma\). Esta esperanza es no lineal en \(\mathbf{x}_i\), de modo que el coeficiente que MCO estima converge a una combinación ponderada de los efectos estructurales, no a \(\boldsymbol{\beta}\) directamente. La magnitud del sesgo depende de la fracción de observaciones censuradas: a mayor proporción de ceros, mayor es el sesgo hacia cero de los coeficientes MCO.

3.2.5 La función de verosimilitud del Tobit

La función de verosimilitud del Tobit combina dos componentes: la probabilidad de observar un cero (contribución discreta de las observaciones censuradas) y la densidad de \(y_i\) dado que \(y_i > 0\) (contribución continua de las observaciones no censuradas):

\[L(\boldsymbol{\beta}, \sigma) = \prod_{i:\,y_i=0} P(y_i^* \leq 0) \cdot \prod_{i:\,y_i>0} f(y_i \mid \mathbf{x}_i)\]

Desarrollando con la normal:

\[L(\boldsymbol{\beta},\sigma) = \prod_{i:\,y_i=0}\!\!\left[1-\Phi\!\left(\frac{\mathbf{x}_i'\boldsymbol{\beta}}{\sigma}\right)\right] \cdot \prod_{i:\,y_i>0}\frac{1}{\sigma}\phi\!\left(\frac{y_i-\mathbf{x}_i'\boldsymbol{\beta}}{\sigma}\right)\]

Tomando logaritmos:

\[\boxed{\ell(\boldsymbol{\beta},\sigma) = \sum_{i:\,y_i=0}\ln\!\left[1-\Phi\!\left(\tfrac{\mathbf{x}_i'\boldsymbol{\beta}}{\sigma}\right)\right] + \sum_{i:\,y_i>0}\left[-\ln\sigma + \ln\phi\!\left(\tfrac{y_i-\mathbf{x}_i'\boldsymbol{\beta}}{\sigma}\right)\right]}\]

El estimador Tobit \((\hat{\boldsymbol{\beta}}, \hat{\sigma})\) maximiza esta log-verosimilitud. No existe forma cerrada: la maximización es numérica. El estimador es consistente y asintóticamente normal, y en R se obtiene con tobit(y ~ x1 + x2, left=0, data=df) del paquete AER.

3.3 Efectos marginales en el modelo Tobit

Los coeficientes \(\hat{\boldsymbol{\beta}}\) del Tobit tienen una interpretación directa: son los efectos de \(\mathbf{x}_j\) sobre la variable latente \(y^*\). Pero en la mayoría de aplicaciones interesa el efecto sobre la variable observada \(y\). McDonald y Moffitt (1980) demostraron que el efecto marginal sobre \(E[y|\mathbf{x}]\) se descompone de forma elegante:

\[\frac{\partial E[y \mid \mathbf{x}]}{\partial x_j} = \underbrace{\Phi(z)}_{\text{prob. no censurado}} \cdot \beta_j\]

donde \(z = \mathbf{x}'\boldsymbol{\beta}/\hat{\sigma}\). Esta expresión dice que el efecto marginal sobre el valor esperado observado es el coeficiente \(\beta_j\) atenuado por la probabilidad de que la observación no esté censurada. En los puntos donde casi todas las observaciones son positivas (\(\Phi(z) \approx 1\)), el efecto marginal se aproxima a \(\beta_j\); donde la censura es elevada (\(\Phi(z)\) pequeño), el efecto es mucho menor.

Adicionalmente, McDonald y Moffitt descomponen el efecto total en dos canales:

\[\frac{\partial E[y \mid \mathbf{x}]}{\partial x_j} = \underbrace{P(y>0) \cdot \frac{\partial E[y \mid y>0, \mathbf{x}]}{\partial x_j}}_{\text{efecto intensivo}} + \underbrace{E[y \mid y>0, \mathbf{x}] \cdot \frac{\partial P(y>0)}{\partial x_j}}_{\text{efecto extensivo}}\]

El efecto extensivo captura cómo un cambio en \(x_j\) altera la probabilidad de tener un valor positivo (si aumenta el porcentaje de personas que pasan de cero a positivo). El efecto intensivo captura cómo cambia el nivel esperado dado que ya es positivo. Ambos efectos son siempre del mismo signo que \(\beta_j\).

Code
beta <- 2; sigma <- 4
x_val <- seq(-4, 10, length.out=200)
xb    <- -5 + beta*x_val
z_val <- xb/sigma

# Efecto sobre E[y|x] (McDonald-Moffitt)
ef_total    <- pnorm(z_val) * beta
# Efecto intensivo: P(y>0) * dE[y|y>0]/dx
ef_intens   <- pnorm(z_val) * beta * (1 - z_val*dnorm(z_val)/pnorm(z_val) -
                                       (dnorm(z_val)/pnorm(z_val))^2)
# Efecto extensivo: E[y|y>0] * dP(y>0)/dx
ey_pos  <- xb + sigma*dnorm(z_val)/pnorm(z_val)
dP_dx   <- dnorm(z_val) * beta / sigma
ef_ext  <- ey_pos * dP_dx

par(mar=c(4.5,4.5,0.5,1))
ylim_r <- range(c(ef_total, ef_intens, ef_ext))
plot(x_val, ef_total, type="l", lwd=3, lty=1,
     xlab="x", ylab="Efecto marginal sobre E[y|x]",
     ylim=ylim_r)
lines(x_val, ef_intens, lwd=2, lty=2)
lines(x_val, ef_ext,    lwd=2, lty=3)
abline(h=beta, lty=3, col=gray(0.5))
abline(h=0, lty=1, col=gray(0.7))
text(9, beta*1.03, expression(beta), cex=0.85)
legend("topleft",
       legend=c("Efecto total E[y|x]","Efecto intensivo","Efecto extensivo"),
       lty=c(1,2,3), lwd=c(3,2,2), bty="n", cex=0.85)
Figure 3.2: Descomposición de McDonald-Moffitt de los efectos marginales del Tobit. El efecto total sobre E[y|x] (línea sólida gruesa) se compone del efecto intensivo (línea discontinua) y el extensivo (línea punteada). Cuando toda la muestra está por encima del umbral de censura (derecha del gráfico), el efecto total converge al coeficiente beta.

3.4 Modelo ilustrativo: gasto en seguros médicos

Para desarrollar el análisis completo trabajaremos con el dataset de gasto en seguros médicos privados (T03_CP01_gasto_seguros.RData), que recoge 600 hogares. La variable dependiente gasto_seguros es el gasto mensual en seguros (€), censurada en cero para los hogares sin seguro privado. El 33.8% de los hogares no tiene ningún seguro (gasto = 0). Las covariables son: renta mensual del hogar (€ miles), edad del cabeza de familia, número de miembros, años de educación del cabeza de familia, indicador de zona urbana y presencia de enfermedad crónica.

3.4.1 Análisis exploratorio

Antes de estimar el Tobit es imprescindible diagnosticar la estructura de los datos. La Figure 3.3 muestra los patrones clave.

Code
library(kableExtra)
load("data/T03_CP01_gasto_seguros.RData")

par(mfrow=c(1,3), mar=c(4.5,4.5,1.8,0.5), cex.main=0.88)

# Panel 1: distribución con masa en 0
n_c <- sum(seguros$gasto_seguros==0)
hist(seguros$gasto_seguros, breaks=30, col=gray(0.70), border="white",
     main="Distribución gasto", xlab="€/mes", ylab="Frecuencia")
rect(par("usr")[1], 0, 0.8, n_c, col=gray(0.25), border=NA)
text(1, n_c*0.65, sprintf("%d hogares\nsin seguro\n(%.1f%%)",
     n_c, 100*n_c/nrow(seguros)), pos=4, cex=0.72, font=2)

# Panel 2: gasto vs renta
plot(seguros$renta, seguros$gasto_seguros,
     pch=ifelse(seguros$gasto_seguros>0,16,1),
     col=ifelse(seguros$gasto_seguros>0,gray(0.25),gray(0.65)),
     xlab="Renta (€ miles)", ylab="Gasto seguros (€)",
     main="Gasto vs Renta")
abline(h=0, lty=2, col=gray(0.45))
abline(lm(gasto_seguros~renta, data=seguros), lwd=2, lty=1)
legend("topleft", legend=c("Gasto>0","Gasto=0","MCO"),
       pch=c(16,1,NA), lty=c(NA,NA,1), lwd=c(NA,NA,2),
       col=c(gray(0.25),gray(0.65),"black"), bty="n", cex=0.75)

# Panel 3: boxplot por cronicidad
boxplot(gasto_seguros ~ cronico, data=seguros,
        names=c("Sin crónico","Con crónico"),
        col=gray(c(0.80,0.45)), border=gray(0.2),
        xlab="", ylab="Gasto seguros (€)", main="Gasto por cronicidad")

par(mfrow=c(1,1))
Figure 3.3: Análisis exploratorio del gasto en seguros. Panel izquierdo: distribución con masa discreta en 0 (33.8% de hogares). Panel central: el gasto crece con la renta, pero la recta MCO subestima la pendiente verdadera por el sesgo de censura. Panel derecho: los hogares con enfermedad crónica gastan considerablemente más en seguros.

3.4.2 Estimación del modelo Tobit y comparación con MCO

Code
library(AER)
fml_s <- gasto_seguros ~ renta + edad + num_miembros + educacion + zona_urbana + cronico
mco_s  <- lm(fml_s, data=seguros)
tob_s  <- tobit(fml_s, left=0, data=seguros)

# Extraer coeficientes
coef_mco <- coef(summary(mco_s))
coef_tob <- coef(summary(tob_s))

vars_s  <- c("renta","edad","num_miembros","educacion","zona_urbana","cronico")
labs_s  <- c("Renta (€m)","Edad","Miembros hogar","Educ. (años)","Zona urbana","Crónico")

df_est_s <- data.frame(
  Variable = labs_s,
  MCO = paste0(sprintf("%.3f", coef_mco[vars_s,"Estimate"]),
               ifelse(coef_mco[vars_s,"Pr(>|t|)"]<0.001,"***",
               ifelse(coef_mco[vars_s,"Pr(>|t|)"]<0.01,"**",
               ifelse(coef_mco[vars_s,"Pr(>|t|)"]<0.05,"*","")))),
  Tobit = paste0(sprintf("%.3f", coef_tob[vars_s,"Estimate"]),
               ifelse(coef_tob[vars_s,"Pr(>|z|)"]<0.001,"***",
               ifelse(coef_tob[vars_s,"Pr(>|z|)"]<0.01,"**",
               ifelse(coef_tob[vars_s,"Pr(>|z|)"]<0.05,"*","")))),
  `Ratio T/M` = sprintf("%.2f", coef_tob[vars_s,"Estimate"] /
                                 coef_mco[vars_s,"Estimate"]),
  check.names=FALSE
)
kbl(df_est_s, booktabs=TRUE, row.names=FALSE, align=c("l","r","r","r"),
    col.names=c("Variable","MCO","Tobit","Ratio Tobit/MCO")) |>
  kable_styling(latex_options=c("hold_position","scale_down"),
                bootstrap_options=c("condensed","striped"), full_width=FALSE) |>
  footnote(general="***p<.001, **p<.01, *p<.05. Tobit: coefs. sobre y*.",
           general_title="Nota:", footnote_as_chunk=FALSE)
Table 3.1: Estimación comparada MCO vs Tobit para el gasto en seguros. Los coeficientes MCO son consistentemente menores que los Tobit porque la censura sesga las estimaciones hacia cero. La diferencia es especialmente marcada en las variables más potentes (renta, cronico).
Variable MCO Tobit Ratio Tobit/MCO
Renta (€m) 0.436*** 0.505*** 1.16
Edad 0.029 0.038 1.31
Miembros hogar 0.990*** 1.499*** 1.51
Educ. (años) 0.429*** 0.704*** 1.64
Zona urbana 2.154*** 3.403*** 1.58
Crónico 4.195*** 5.895*** 1.41
Nota:
***p<.001, **p<.01, *p<.05. Tobit: coefs. sobre y*.

La Table 3.1 pone de manifiesto el sesgo de MCO: todos los coeficientes del Tobit son mayores en valor absoluto que los de MCO (ratio > 1). La diferencia es especialmente pronunciada para renta (ratio 1.16) y cronico (ratio 1.41). Cuanto mayor es la proporción de observaciones censuradas, mayor es el sesgo hacia cero de MCO.

3.4.3 Efectos marginales AME (McDonald-Moffitt)

Code
beta_s  <- coef(tob_s)
sig_s   <- tob_s$scale
xb_s    <- predict(tob_s, newdata=seguros, type="lp")
z_s     <- xb_s / sig_s
phi_s   <- dnorm(z_s); Phi_s <- pnorm(z_s)
imr_s   <- phi_s / Phi_s  # inverse Mills ratio

# E[y|y>0]
ey_pos_s <- as.numeric(xb_s) + sig_s * as.numeric(imr_s)

# AME sobre E[y|x] = Phi(z)*beta
ame_obs <- mean(Phi_s) * beta_s[vars_s]

# AME condicional en y>0
ame_cond <- mean(1 - z_s*imr_s - imr_s^2) * beta_s[vars_s]

# Efecto extensivo
ame_ext <- mean(ey_pos_s) * (dnorm(z_s)/sig_s) * 1  # escalado por beta
# Simplificado: extensivo = ame_obs - intensivo*Phi
ame_int <- mean(Phi_s) * ame_cond / mean(1 - z_s*imr_s - imr_s^2) * (1 - z_s*imr_s - imr_s^2) * 0
# Re-do: intensivo = Phi * dE[y|y>0]/dx; extensivo = E[y|y>0]*dPhi/dx * beta/sigma
ame_intensivo <- mean(as.numeric(Phi_s) * (1 - as.numeric(z_s)*as.numeric(imr_s) -
                                            as.numeric(imr_s)^2)) * beta_s[vars_s]
ame_extensivo <- ame_obs - ame_intensivo

df_ame_s <- data.frame(
  Variable       = labs_s,
  `AME obs.`     = sprintf("%.3f", ame_obs),
  `AME cond.`    = sprintf("%.3f", ame_cond),
  Intensivo      = sprintf("%.3f", ame_intensivo),
  Extensivo      = sprintf("%.3f", ame_extensivo),
  check.names=FALSE
)
kbl(df_ame_s, booktabs=TRUE, row.names=FALSE,
    col.names=c("Variable","AME E[y|x]","AME E[y|y>0]","Intensivo","Extensivo")) |>
  kable_styling(latex_options=c("hold_position","scale_down"),
                bootstrap_options=c("condensed","striped"), full_width=FALSE) |>
  footnote(general="Valores en €/mes. AME obs. = efecto sobre gasto esperado total.",
           general_title="Nota:", footnote_as_chunk=FALSE)
Table 3.2: Efectos marginales AME del Tobit (McDonald-Moffitt). Se muestra el efecto sobre E[y|x] (observada), sobre E[y|y>0,x] (condicional en positivo) y la descomposición en efecto intensivo y extensivo.
Variable AME E[y|x] AME E[y|y>0] Intensivo Extensivo
Renta (€m) 0.340 0.298 0.246 0.094
Edad 0.025 0.022 0.018 0.007
Miembros hogar 1.008 0.884 0.730 0.278
Educ. (años) 0.473 0.415 0.343 0.130
Zona urbana 2.289 2.007 1.658 0.631
Crónico 3.965 3.478 2.872 1.093
Nota:
Valores en €/mes. AME obs. = efecto sobre gasto esperado total.

La Table 3.2 revela que un incremento de €1.000 en la renta mensual aumenta el gasto esperado en seguros en 0.34€/mes (AME sobre \(E[y|\mathbf{x}]\)). La presencia de enfermedad crónica aumenta el gasto esperado en 3.97€/mes. En ambos casos, el efecto extensivo (más hogares contratando seguro) supera al intensivo (mayor gasto entre quienes ya tenían seguro), lo que indica que estas variables operan principalmente a través de la decisión de asegurarse, no tanto del nivel de cobertura contratado.

3.5 Interpretación de los coeficientes: las tres preguntas

En regresión lineal, \(\beta_j\) es el efecto marginal. En el Tobit, no. La censura introduce una no linealidad, y el efecto de \(x_j\) depende de qué pregunta nos hacemos. Hay tres posibilidades.

3.5.1 Efecto sobre la variable latente: \(E(y^* \mid \mathbf{x})\)

\[\frac{\partial E(y^* \mid \mathbf{x})}{\partial x_j} = \beta_j\]

Es el efecto sobre el «deseo» subyacente. Idéntico a MCO, pero se refiere a una variable que no siempre observamos. Útil cuando la pregunta es sobre el proceso latente: «¿cómo afecta la educación al deseo de trabajar?»

3.5.2 Efecto sobre los no censurados: \(E(y \mid \mathbf{x}, y > 0)\)

\[E(y \mid \mathbf{x}, y > 0) = \mathbf{x}\boldsymbol{\beta} + \sigma \cdot \frac{\phi(\mathbf{x}\boldsymbol{\beta}/\sigma)}{\Phi(\mathbf{x}\boldsymbol{\beta}/\sigma)}\]

\[\frac{\partial E(y \mid \mathbf{x}, y > 0)}{\partial x_j} = \beta_j \left[1 - \lambda(z)(z + \lambda(z))\right]\]

El factor entre corchetes siempre está entre 0 y 1. Responde al margen intensivo: «dado que ya trabaja, ¿cuántas horas más por año de educación?»

3.5.3 Efecto sobre toda la muestra: \(E(y \mid \mathbf{x})\)

\[\boxed{E(y \mid \mathbf{x}) = \Phi\!\left(\frac{\mathbf{x}\boldsymbol{\beta}}{\sigma}\right) \cdot \left[\mathbf{x}\boldsymbol{\beta} + \sigma \cdot \frac{\phi(\mathbf{x}\boldsymbol{\beta}/\sigma)}{\Phi(\mathbf{x}\boldsymbol{\beta}/\sigma)}\right]}\]

\[\frac{\partial E(y \mid \mathbf{x})}{\partial x_j} \approx \beta_j \cdot \Phi\!\left(\frac{\mathbf{x}\boldsymbol{\beta}}{\sigma}\right)\]

El factor \(\Phi(\mathbf{x}\boldsymbol{\beta}/\sigma)\) es la probabilidad de no estar censurado. Si casi todos están censurados (\(\Phi \approx 0\)), el efecto es casi nulo. Si casi nadie lo está (\(\Phi \approx 1\)), el efecto es prácticamente \(\beta_j\). Es el efecto más usado en la práctica: combina el margen extensivo (pasar de censurado a no censurado) con el intensivo (cambio en la cantidad).

Resumen de las tres medias condicionales del modelo Tobit
Media Nombre Efecto marginal Pregunta que responde Ejemplo
\(E(y^* \mid \mathbf{x})\) Variable latente \(\beta_j\) ¿Cómo cambia el deseo latente? Efecto de educación sobre deseo de trabajar
\(E(y \mid \mathbf{x},\, y > 0)\) No censuradas (truncada) \(\beta_j \times [1 - \lambda(z + \lambda)]\) Dado que ya trabaja, ¿cuánto más? Si ya trabaja, ¿cuántas horas más por año de educación?
\(E(y \mid \mathbf{x})\) Toda la muestra \(\beta_j \times \Phi(\mathbf{x}\boldsymbol{\beta}/\sigma)\) ¿Cuánto cambia para TODOS? Efecto total sobre horas trabajadas (incluye los que no trabajan)

La relación entre las tres: Siempre se cumple que el efecto sobre \(E(y^*)\) > efecto sobre \(E(y \mid y > 0)\) > efecto sobre \(E(y)\). En la práctica, reporta siempre los AME (efectos marginales promedio) sobre \(E(y)\).

3.6 Contrastes de especificación

El modelo Tobit descansa en dos supuestos sobre el término de error que deben verificarse empíricamente:

1. Normalidad. El supuesto \(u_i \sim N(0,\sigma^2)\) es más fuerte que en MCO: en MCO la normalidad es solo necesaria para la inferencia en muestras finitas, pero en el Tobit es necesaria para la consistencia del estimador. Si los errores no son normales, el Tobit MLE es inconsistente incluso en muestras grandes. El test estándar es el de Jarque-Bera sobre los residuos.

2. Homocedasticidad. Si \(\sigma^2\) depende de \(\mathbf{x}_i\), el estimador también es inconsistente. Esto lo diferencia de MCO, donde la heterocedasticidad solo afecta a la eficiencia. El test de Breusch-Pagan aplicado a los residuos ordinarios da una señal informal útil.

Code
library(lmtest)

# Residuos del Tobit: y_i - E[y_i|x_i]
e_hat <- seguros$gasto_seguros - as.numeric(Phi_s) *
         (as.numeric(xb_s) + sig_s * as.numeric(imr_s))

# Jarque-Bera sobre residuos
n_s <- length(e_hat)
skew_r <- mean(((e_hat - mean(e_hat))/sd(e_hat))^3)
kurt_r  <- mean(((e_hat - mean(e_hat))/sd(e_hat))^4)
jb_stat <- n_s/6 * (skew_r^2 + (kurt_r-3)^2/4)
jb_pval <- 1 - pchisq(jb_stat, 2)

# Breusch-Pagan informal: regresión de e^2 sobre x
bp_aux  <- lm(e_hat^2 ~ renta + edad + educacion + zona_urbana + cronico,
              data=seguros)
bp_stat <- summary(bp_aux)$r.squared * n_s
bp_pval <- 1 - pchisq(bp_stat, 5)

df_tests <- data.frame(
  Test      = c("Jarque-Bera (normalidad)","Breusch-Pagan (homoced.)"),
  Estadístico = c(sprintf("%.3f", jb_stat), sprintf("%.3f", bp_stat)),
  `g.l.`   = c("2","5"),
  `p-valor` = c(sprintf("%.4f", jb_pval), sprintf("%.4f", bp_pval)),
  Decisión  = c(ifelse(jb_pval>0.05,"No rechazar H₀ (normalidad OK)",
                       "Rechazar H₀ (no normalidad)"),
                ifelse(bp_pval>0.05,"No rechazar H₀ (homoced. OK)",
                       "Rechazar H₀ (heteroced.)")),
  check.names=FALSE
)
kbl(df_tests, booktabs=TRUE, row.names=FALSE,
    col.names=c("Test","Estadístico","g.l.","p-valor","Decisión")) |>
  kable_styling(latex_options=c("hold_position","scale_down"),
                bootstrap_options=c("condensed","striped"), full_width=FALSE) |>
  footnote(general="H₀ Jarque-Bera: normalidad. H₀ Breusch-Pagan: homocedasticidad.",
           general_title="Nota:", footnote_as_chunk=FALSE)
Table 3.3: Contrastes de especificación del modelo Tobit. Los residuos se calculan como y - E[y|x] donde E[y|x] usa la fórmula de McDonald-Moffitt. Un p-valor alto en el test de Jarque-Bera indica que no se rechaza la normalidad; un p-valor bajo en Breusch-Pagan sugiere heterocedasticidad.
Test Estadístico g.l. p-valor Decisión
Jarque-Bera (normalidad) 51.717 2 0.0000 Rechazar H₀ (no normalidad)
Breusch-Pagan (homoced.) 54.000 5 0.0000 Rechazar H₀ (heteroced.)
Nota:
H₀ Jarque-Bera: normalidad. H₀ Breusch-Pagan: homocedasticidad.

3.7 Casos prácticos

Los tres casos prácticos de este capítulo aplican el análisis Tobit a contextos económicos distintos: donaciones benéficas (elevada fracción de no donantes), gasto en formación profesional (personas que no invierten en formación), y el mismo dataset ilustrativo de seguros (CP01). En cada caso el alumno debe identificar la fracción de censura, comparar MCO y Tobit, calcular los efectos marginales de McDonald-Moffitt y verificar los supuestos.

3.7.1 Caso práctico 1: Gasto en seguros médicos

El Caso Práctico 1 coincide con el modelo ilustrativo desarrollado en las secciones anteriores, que el alumno puede reproducir íntegramente con el siguiente script:

T03_CP01_mECO_Tobit_Seguros.R

3.7.2 Caso práctico 2: Donaciones benéficas

Contexto. El dataset CP02 recoge 500 observaciones sobre donaciones anuales a organizaciones benéficas (en €). El 46.4% de los encuestados declara no haber realizado ninguna donación en el último año. Entre los que sí donaron, el importe medio fue de 15.3€. Las covariables son: ingreso anual bruto, edad, índice de religiosidad (0-5), educación, indicador de tener hijos y sexo.

Code
par(mfrow=c(1,2), mar=c(4.5,4.5,1.8,0.5), cex.main=0.88)

n_cd <- sum(donaciones$donacion==0)
hist(donaciones$donacion, breaks=30, col=gray(0.70), border="white",
     main="Distribución donaciones",
     xlab="Donación anual (€)", ylab="Frecuencia")
rect(par("usr")[1], 0, 0.8, n_cd, col=gray(0.25), border=NA)
text(1, n_cd*0.65,
     sprintf("%d no donan\n(%.1f%%)", n_cd, 100*n_cd/nrow(donaciones)),
     pos=4, cex=0.75, font=2)

# Donación media por ingreso y religiosidad (agrupado)
donaciones$ing_g <- cut(donaciones$ingreso, breaks=c(14,30,50,150),
                         labels=c("Bajo","Medio","Alto"))
donaciones$relig_g <- ifelse(donaciones$religiosidad>=3,"Alta","Baja")
med_don <- tapply(donaciones$donacion, list(donaciones$ing_g, donaciones$relig_g), mean)

bp_d <- barplot(t(med_don), beside=TRUE,
        col=gray(c(0.75,0.35)), border="white",
        ylim=c(0,max(med_don)*1.25),
        names.arg=c("Bajo","Medio","Alto"),
        xlab="Nivel de ingreso", ylab="Donación media (€)",
        main="Donación por ingreso y religiosidad",
        legend.text=c("Rel. baja","Rel. alta"),
        args.legend=list(bty="n", cex=0.8, x="topleft"))
abline(h=0)

par(mfrow=c(1,1))
Figure 3.4: Gasto en donaciones benéficas (CP02). Panel izquierdo: la distribución muestra la masa discreta en 0 (46.4%) y la distribución continua de los valores positivos. Panel derecho: los donantes tienen mayor nivel de religiosidad que los no donantes en todos los grupos de ingreso, lo que confirma que la religiosidad es el predictor más importante.
Code
load("data/T03_CP02_donaciones.RData")
fml_d <- donacion ~ ingreso + edad + religiosidad + educacion + tiene_hijos + sexo
tob_d <- tobit(fml_d, left=0, data=donaciones)
mco_d <- lm(fml_d, data=donaciones)

ct_d  <- coef(summary(tob_d))
vars_d <- c("ingreso","edad","religiosidad","educacion","tiene_hijos","sexo")
labs_d <- c("Ingreso (€m)","Edad","Religiosidad (0-5)","Educación (años)","Con hijos","Mujer")

beta_d <- coef(tob_d); sig_d <- tob_d$scale
xb_d   <- predict(tob_d, newdata=donaciones, type="lp")
Phi_d  <- pnorm(xb_d/sig_d)
ame_d  <- mean(Phi_d) * beta_d[vars_d]

df_cp02 <- data.frame(
  Variable  = labs_d,
  `Coef. Tobit` = paste0(sprintf("%.3f", beta_d[vars_d]),
    ifelse(ct_d[vars_d,"Pr(>|z|)"]<0.001,"***",
    ifelse(ct_d[vars_d,"Pr(>|z|)"]<0.01,"**",
    ifelse(ct_d[vars_d,"Pr(>|z|)"]<0.05,"*","")))),
  `AME (€/año)` = sprintf("%.3f", ame_d),
  check.names=FALSE
)
kbl(df_cp02, booktabs=TRUE, row.names=FALSE, align=c("l","r","r"),
    col.names=c("Variable","Coef. Tobit","AME (€/año)")) |>
  kable_styling(latex_options=c("hold_position","scale_down"),
                bootstrap_options=c("condensed","striped"), full_width=FALSE) |>
  footnote(general=sprintf("n=%d | Ceros: %.1f%% | sigma=%.2f. ***p<.001, **p<.01.",
                           nrow(donaciones), 100*mean(donaciones$donacion==0),
                           tob_d$scale),
           general_title="Nota:", footnote_as_chunk=FALSE)
Table 3.4: Modelo Tobit para donaciones benéficas (CP02). La religiosidad es el predictor más potente.
Variable Coef. Tobit AME (€/año)
Ingreso (€m) 0.302*** 0.164
Edad 0.003 0.002
Religiosidad (0-5) 4.168*** 2.262
Educación (años) 1.467*** 0.797
Con hijos -0.226 -0.123
Mujer 2.967** 1.611
Nota:
n=500 | Ceros: 46.4% | sigma=10.72. ***p<.001, **p<.01.

La religiosidad emerge como el predictor más potente: cada punto adicional en el índice (0-5) aumenta la donación esperada en 2.26€/año (AME). El efecto del ingreso es positivo pero moderado: cada €1.000 adicionales de ingreso aumenta la donación esperada en 0.16€/año. El alumno puede reproducir este análisis con el siguiente script:

T03_CP02_mECO_Tobit_Donaciones.R

3.7.3 Caso práctico 3: Gasto mensual en formación profesional

Contexto. El dataset CP03 recoge la inversión mensual en formación profesional (cursos, certificaciones, libros técnicos) de 600 trabajadores. El 39.3% no invierte nada en formación. Entre quienes sí invierten, el gasto medio es de 42.6€/mes. Las covariables son: ingreso mensual, edad, educación, trabajar en sector privado, haber estado desempleado previamente, sexo y antigüedad laboral.

Code
load("data/T03_CP03_gasto_formacion.RData")
fml_f <- gasto_formacion ~ educacion + ingreso + edad + sector_privado +
          desempleo_previo + sexo + antiguedad
tob_f <- tobit(fml_f, left=0, data=formacion)
mco_f <- lm(fml_f, data=formacion)

ct_f   <- coef(summary(tob_f))
vars_f <- c("educacion","ingreso","edad","sector_privado","desempleo_previo","sexo","antiguedad")
labs_f <- c("Educación (años)","Ingreso (€m)","Edad","Sector privado","Desempleo previo","Mujer","Antigüedad")

beta_f <- coef(tob_f); sig_f <- tob_f$scale
xb_f   <- predict(tob_f, newdata=formacion, type="lp")
Phi_f  <- pnorm(xb_f/sig_f)
ame_f  <- mean(Phi_f) * beta_f[vars_f]

df_cp03 <- data.frame(
  Variable = labs_f,
  `Coef. Tobit` = paste0(sprintf("%.3f", beta_f[vars_f]),
    ifelse(ct_f[vars_f,"Pr(>|z|)"]<0.001,"***",
    ifelse(ct_f[vars_f,"Pr(>|z|)"]<0.01,"**",
    ifelse(ct_f[vars_f,"Pr(>|z|)"]<0.05,"*","")))),
  `Coef. MCO` = sprintf("%.3f", coef(mco_f)[vars_f]),
  `AME (€/mes)` = sprintf("%.3f", ame_f),
  check.names=FALSE
)
kbl(df_cp03, booktabs=TRUE, row.names=FALSE, align=c("l","r","r","r"),
    col.names=c("Variable","Coef. Tobit","Coef. MCO","AME (€/mes)")) |>
  kable_styling(latex_options=c("hold_position","scale_down"),
                bootstrap_options=c("condensed","striped"), full_width=FALSE) |>
  footnote(general=sprintf("n=%d | Ceros: %.1f%% | sigma=%.2f. ***p<.001, **p<.01, *p<.05.",
                           nrow(formacion), 100*mean(formacion$gasto_formacion==0),
                           tob_f$scale),
           general_title="Nota:", footnote_as_chunk=FALSE)
Table 3.5: Modelo Tobit para gasto en formación profesional (CP03). Trabajar en el sector privado y haber estado desempleado previamente son los predictores con mayor efecto, lo que refleja la mayor presión competitiva y la motivación de reinserción.
Variable Coef. Tobit Coef. MCO AME (€/mes)
Educación (años) 0.014 -4.814 0.008
Ingreso (€m) -0.024 0.011 -0.014
Edad 2.529 6.394 1.541
Sector privado 48.581*** 26.916 29.608
Desempleo previo 35.652*** 25.287 21.728
Mujer -10.248** -6.700 -6.245
Antigüedad -3.066 -6.743 -1.869
Nota:
n=600 | Ceros: 39.3% | sigma=36.08. ***p<.001, **p<.01, *p<.05.

Los trabajadores del sector privado invierten 29.61€/mes más en formación que los del sector público (AME), lo que refleja la mayor presión competitiva del mercado privado. Haber pasado previamente por el desempleo también aumenta la inversión en formación, posiblemente como estrategia preventiva ante nuevos episodios de desempleo. El alumno puede reproducir y extender este análisis con el siguiente script:

T03_CP03_mECO_Tobit_Formacion.R

3.8 Guía de comandos R para este capítulo

3.8.1 tobit() — Estimación del modelo Tobit (paquete AER)

El modelo Tobit se estima con la función tobit() del paquete AER. A diferencia de lm() o glm(), tobit() utiliza MLE para estimar simultáneamente los coeficientes \(\boldsymbol{\beta}\) y el parámetro de escala \(\sigma\), teniendo en cuenta de forma correcta tanto las observaciones censuradas como las no censuradas.

library(AER)
tob <- tobit(gasto ~ renta + edad + educacion + zona_urbana,
             left = 0, data = seguros)

Los parámetros esenciales son: la fórmula y ~ x1 + x2 + ... especifica la variable dependiente y las covariables; left = 0 indica el punto de censura por la izquierda (el más habitual, cuando la variable no puede ser negativa); right = valor se usaría para censura por la derecha; data es el dataframe. Los coeficientes estimados se extraen con coef(tob) y el parámetro sigma con tob$scale.

3.8.2 predict(tob, type = “lp”) — Predictor lineal del Tobit

Para calcular los efectos marginales del Tobit es necesario obtener el predictor lineal \(\mathbf{x}_i'\hat{\boldsymbol{\beta}}\) para cada observación. La función predict() con el argumento type = "lp" devuelve directamente ese vector, evitando el cálculo manual mediante multiplicación matricial.

xb   <- predict(tob, newdata = seguros, type = "lp")
z    <- xb / tob$scale       # índice normalizado z = x'β / σ
Phi  <- pnorm(z)             # probabilidad de no estar censurado

type = "lp" (linear predictor) devuelve el índice lineal sin aplicar ninguna transformación. newdata puede ser el dataset original o un nuevo dataframe para predicciones fuera de la muestra. El cociente xb / tob$scale produce el argumento normalizado \(z\) que entra en la función \(\Phi\) para calcular efectos marginales.

3.8.3 Efectos marginales McDonald-Moffitt — Cálculo manual

El efecto marginal del Tobit sobre el valor esperado observado \(E[y|\mathbf{x}]\) no es simplemente \(\beta_j\), sino \(\beta_j\) multiplicado por la probabilidad de estar por encima del umbral de censura. Este es el resultado fundamental de McDonald y Moffitt (1980).

# Elementos necesarios
beta <- coef(tob)
sig  <- tob$scale
xb   <- predict(tob, newdata = datos, type = "lp")
Phi  <- pnorm(xb / sig)
imr  <- dnorm(xb / sig) / Phi     # inverse Mills ratio

# AME sobre E[y|x]: efecto sobre el gasto esperado total
ame_obs  <- mean(Phi) * beta["renta"]

# AME sobre E[y|y>0]: efecto sobre el gasto esperado dado que es positivo
ame_cond <- mean(1 - (xb/sig)*imr - imr^2) * beta["renta"]

pnorm(xb/sig) es la probabilidad de que la observación no esté censurada (\(\Phi(z)\)). dnorm(xb/sig)/Phi es el inverse Mills ratio (IMR), que aparece en la esperanza condicional truncada. El AME observado multiplica \(\Phi\) promedio por \(\beta_j\); el AME condicional aplica la corrección adicional por la no linealidad de la esperanza truncada.

3.8.4 jb_test y bp_test — Contrastes de especificación sobre los residuos

El modelo Tobit exige normalidad y homocedasticidad del término de error para ser consistente. Los residuos del Tobit se definen como \(e_i = y_i - E[y_i|\mathbf{x}_i]\), donde \(E[y_i|\mathbf{x}_i]\) usa la fórmula de McDonald-Moffitt. Sobre estos residuos se aplican el test de Jarque-Bera (normalidad) y el de Breusch-Pagan (homocedasticidad).

# Residuos del Tobit
e_hat <- datos$y - as.numeric(Phi) * (as.numeric(xb) + sig * as.numeric(imr))

# Test de Jarque-Bera (normalidad)
s <- mean(((e_hat - mean(e_hat))/sd(e_hat))^3)   # asimetría
k <- mean(((e_hat - mean(e_hat))/sd(e_hat))^4)   # curtosis
JB <- length(e_hat)/6 * (s^2 + (k - 3)^2 / 4)
p_JB <- 1 - pchisq(JB, df = 2)

# Test de Breusch-Pagan informal (homocedasticidad)
aux <- lm(e_hat^2 ~ x1 + x2 + x3, data = datos)
BP  <- summary(aux)$r.squared * length(e_hat)
p_BP <- 1 - pchisq(BP, df = 3)

El estadístico Jarque-Bera (\(JB\)) combina la asimetría \(s\) y la curtosis \(k\) en un único test \(\chi^2_2\). Un \(p\)-valor pequeño rechaza la normalidad. El test de Breusch-Pagan regresa los cuadrados de los residuos sobre las covariables: un \(R^2\) elevado indica que la varianza no es constante (heterocedasticidad).

Los scripts de este capítulo están disponibles en la carpeta scripts/ del repositorio del manual, en:

github.com/carlanta/MicroEconometrics

Cada script realiza el ciclo completo: EDA, estimación MCO y Tobit, comparación de coeficientes, efectos marginales de McDonald-Moffitt y contrastes de especificación.

McDonald, John F., and Robert A. Moffitt. 1980. “The Uses of Tobit Analysis.” The Review of Economics and Statistics 62 (2): 318–21.
Tobin, James. 1958. “Estimation of Relationships for Limited Dependent Variables.” Econometrica 26 (1): 24–36.