4 votos

¿Cómo tratar los efectos fijos multiplicativos y aditivos constantes?

De Nick Huntington-Klein, El efecto :

Los efectos fijos son un método para controlar todas las variables, ya sean observadas o no, siempre que se mantengan constantes dentro de alguna categoría mayor. ¿Cómo podemos hacerlo? Muy sencillo. Simplemente controlamos la categoría categoría mayor, y al hacerlo controlamos todo lo que es constante dentro de esa categoría.11 Si lo prefiere, estamos controlando una variable más arriba en la jerarquía de nuestros datos jerárquicos.

¿Qué significa que una variable sea "constante dentro de una categoría mayor"? categoría"? Por ejemplo, digamos que estamos analizando el efecto de que las ciudades rurales pueblos rurales que reciben electricidad en su productividad. Una puerta trasera obvia es la geografía. Los pueblos rurales situados en las laderas de las montañas serán más difícil de electrificar, y también podrían ser diferentes en su productividad por otras razones.

Supongamos que tengo un conjunto de datos en el que tengo efectos fijos que entran de forma multiplicativa y aditiva.

Por ejemplo, digamos que intento ver la relación entre las manzanas consumidas y los ingresos. Observo las manzanas del hogar, y sospecho que Bob informa mal de sus manzanas consumidas. El valor es siempre 0,5 veces las manzanas reales. Mientras que, por otro lado, los datos de la encuesta de Alice son siempre precisos, sin error de medición. Esto es multiplicativamente constante en toda la categoría "individual".

Además, para los años posteriores al 2000, salió una nueva encuesta, y sospecho que ahora a todas las medidas de manzanas de las encuestas de hogares se les añadió un 0,3 a cada medida. Esto es aditivamente constante a través de la categoría "año".

Si conociera estos números (+0,3 y 0,5x), podría restarlos de mis datos. Pero, digamos que no conocer estos números, y sólo tengo la sospecha de que algunos de mis datos tienen tanto multiplicativo y aditivo efectos que pueden confundir cualquier estimación.

Además, digamos que la verdadera relación entre los ingresos y las manzanas consumidas viene dada por

$$\log(\text{income}) = 0.3 \log(\text{apples})$$

¿Cómo puedo estimar la verdadera relación, dado que observo $$\text{observed apples} = \left(\text{apples} + 0.3 * \text{I}(\text{year}>=2000)\right)*\begin{cases}0.5 & ID = Bob\\1 & ID \ne Bob\end{cases}$$

Si el efecto fuera multiplicativo, entonces podría utilizar una regresión de efecto fijo típica. Si el efecto fijo fuera aditivo, entonces podría simplemente desproporcionar las observaciones y ejecutar la regresión de esa manera. Pero como esto tiene ambos, si utilizo un modelo log-log con efectos fijos, entonces el efecto aditivo constante ya no es constante en el tiempo.

Este es el código que he utilizado. ¡Muchas gracias de antemano!

library(data.table)
library(fixest)
library(modelsummary)

DT <- CJ(ID = c("Bob", "Alice"),
         year = 1992:2020)

# make observations
DT[, truth := runif(nrow(DT))]

# create fixed effects
DT[, ID_FE := ifelse(ID == "Bob", 0.5, 1)]
DT[, year_FE := ifelse(year >= 2000, 0.3, 0)]

# create observed variable:
DT[, observed := (truth + year_FE) * ID_FE]

# create additive means
DT[, ID_mean := mean(observed), by = .(ID)]
DT[, year_mean := mean(observed), by = .(year)]

# create multiplicative means
DT[, ID_log_mean := mean(log(observed)), by = .(ID)]
DT[, year_log_mean := mean(log(observed)), by = .(year)]
DT[, ln_observed := log(observed)]

# create differences for manual FE estimation
DT[, diff_ln_observed := ln_observed - ID_log_mean - year_log_mean]
DT[, diff_observed := observed - ID_mean - year_mean]

# get actual Y
DT[, Y := truth ^ 0.3]
DT[, ln_Y := log(Y)]

# run regression
true_relationship <- lm(ln_Y~log(truth),data = DT)
m1 <- lm(ln_Y ~ diff_ln_observed, data = DT)
twfe <-feols(ln_Y ~ log(observed) |as.factor(ID) + as.factor(year),data = DT)
msummary(list(true_relationship, m1, twfe))

3voto

Carl Puntos 2229

Sin el término aleatorio, este ejercicio está más cerca de la resolución de ecuaciones no lineales que de la econometría. Si la verdadera relación entre los ingresos y las manzanas es $$ \log( y_{nt} ) = \gamma \log( x_{nt}),$$ pero en lugar de observar ${x_{nt}}$ el econometrista observa en realidad $$x^*_{nt}= \delta_n (x_{nt} + u_t), $$ entonces, utilizando las variables observadas, tenemos $$ \log( y_{nt} ) = \gamma \log( \beta_{0t} + \beta_{1n} x^*_{nt} )$$ con $$ \beta_{0t} := - u_t $$ $$ \beta_{1n} := \frac{1}{\delta_n}. $$

Si hay más observaciones que parámetros: $NT>N+T+1,$ que es el caso de su ejemplo, todos los parámetros pueden calcularse exactamente, utilizando un solucionador no lineal que minimice (por ejemplo): $$ \left( \log( y ) - f(\gamma,\{\beta_{0t}\}_{t=1}^T,\{\beta_{1n}\}_{n=1}^N; x^* \right)^T\left( \log( y ) - f(\gamma,\{\beta_{0t}\}_{t=1}^T,\{\beta_{1n}\}_{n=1}^N; x^* \right) $$ en $(\gamma, \{\beta_{0t}\}_{t=1}^T,\{\beta_{1n}\}_{n=1}^N ).$

Nótese que es un poco extraño que las manzanas (el consumo...) determinen la renta, normalmente es al revés. Con esta especificación, los individuos tienen un incentivo para comprar manzanas con el fin de aumentar sus ingresos,... indefinidamente si las manzanas son lo suficientemente baratas: la endogeneidad ocurre, pero no es un problema aquí, ya que no hay ningún término aleatorio.

Aquí hay un código R que ilustra la afirmación:

# -------------------------
library(optimx)

dat_dum_T = rbind(1,1) %x% matrix( c( rep( 0, 8 ), rep( 1, 21 )), ncol=1 ) 
dat_dum_N = diag(1,nrow=2) %x% rep( 1, 29 )

colnames( dat_dum_N ) <- c( paste0("dum_N_", 1:2 ) )

#
# This function computes the sum of squared residuals for different 
# parameter values
#
SSR_f = function( param, Data=DT ){

  gamma = param[1]
  par_dum_N = matrix( param[2:3], ncol=1 )
  par_dum_T = param[4]

  rownames( par_dum_N ) = paste0( "beta_N_", seq(1:2))

  ln_y = Data[,"ln_Y"]
  x_obs = Data[,"observed"]

  dum_N = par_dum_N[1]*dat_dum_N[,1] + par_dum_N[2]*dat_dum_N[,2] 
  dum_T = par_dum_T*dat_dum_T

  # The observed and true x are related by 
  # x_nt = x_obs_nt/dum_n + par_dum_t

  SSR = as.numeric( sum( ( ln_y - gamma*( log( x_obs/dum_N - dum_T ) ) )^2 ) )
  return( SSR )
}

true_val = c( 0.3, 1, 0.5, 0.3 )
SSR_f( true_val, DT )

par_0 = c( 0.5, 0.5, 1, 0 )
names(par_0) = c( "gamma","dum_N_1","dum_N_2", "dum_T" )

# check if starting values are admissible (and cause no numerical problem)
SSR_f( par_0, DT )

# The nonlinear numerical minimization procedure
optimx( par=par_0, fn=SSR_f, method="Nelder-Mead", control = list( trace=4, maxit=1000 ) )

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X