viernes, 10 de noviembre de 2017

Modelos multinivel no lineales de efectos mixtos

Blog de Stata en Español
Por: Houssein Assaad, Estadístico Senior y Desarrollador de Software.
Este es una traducción realizada por MultiON Consulting de la publicación original de StataCorp.
Tienes un modelo que no es lineal en los parámetros. Tal vez sea un modelo del crecimiento de los árboles y, por tanto, es asintótico a un valor máximo. Tal vez es un modelo de concentraciones séricas de un medicamento que aumenta rápidamente a una concentración máxima y luego decae exponencialmente. Bastante fácil, se usa una regresión no lineal ([R] nl) para ajustar el modelo. Pero… ¿qué pasa si se tienen medidas repetidas para cada árbol o niveles de suero sanguíneo repetidos para cada paciente? Es posible que usted desee explicar la correlación intra árbol o paciente.
El comando menl introducido en Stata 15, ajusta modelos de efectos mixtos no lineales (NLME). Los modelos no lineales clásicos asumen que hay una observación por sujeto y que los sujetos son independientes. Se puede pensar en los modelos NLME como una extensión los modelos no lineales para el caso donde se pueden tomar múltiples medidas sobre un sujeto y estas observaciones intra sujeto están correlacionadas. Asimismo se puede pensar en los modelos NLME como una generalización de los modelos lineales de efectos mixtos donde algunos o todos los efectos aleatorios ingresan al modelo de una forma no lineal. Independientemente de la forma de verlos, los modelos NLME se usan para describir una variable respuesta como una función (no lineal) de las covariables, explicándose la correlación entre observaciones del mismo sujeto.
En este blog, los conduciré a través distintos ejemplos de modelos no lineales de efectos mixtos que se ajustan usando menl. Primero ajustaré un modelo no lineal a los datos sobre el crecimiento de los árboles, ignorando la correlación entre las mediciones del mismo árbol. Luego, demostraré distintas maneras de explicar esta correlación y cómo incorporar efectos aleatorios en los parámetros del modelo para dar a los parámetros la interpretación especifica del árbol.
Tenemos datos (Draper y Smith 1998) sobre la circunferencia del tronco de cinco naranjos diferentes donde se midió la circunferencia del tronco (en mm) en siete ocasiones diferentes, durante un periodo de crecimiento de aproximadamente cuatro años. Queremos modelar el crecimiento de los naranjos. Primero, vamos a graficar los datos.
      . webuse orange
      . twoway scatter circumf age, connect(L) ylabel(#6)
    
Hay algo de variación en las curvas de crecimiento, pero se observa la misma forma general para todos los árboles. En particular, el crecimiento tiende a nivelarse hacia el final. Pinheiro y Bates (2000) sugieren el siguiente modelo de crecimiento no lineal para estos datos:
\[
{\mathsf{circumf}}_{ij}=\frac{\phi_{1}}{1+\exp\left\{ -\left( {\mathsf{age}}_{ij}-\phi_{2}\right)/\phi_{3}\right\}} + \epsilon_{ij}, \quad j=1,\dots,5; i=1,\dots,7
\]
Los parámetros de los modelos NLME a menudo tienen interpretaciones científicamente significativas y forman la base de las preguntas de investigación. En este modelo, \(\phi_{1}\) es la circunferencia asintótica promedio de los árboles mientras \(\mathsf{age}_{ij} \to \infty\), \(\phi_{2}\) es la edad promedio a la cual el árbol alcanza la mitad de la circunferencia asintótica \(\phi_{1}\) (vida media), y \(\phi_{3}\) es un parámetro de escala.
Por ahora, vamos a ignorar las repercusiones (estimaciones menos precisas de la incertidumbre en las estimaciones de los parámetros, pruebas de hipótesis menos potentes, y estimaciones de intervalos menos precisas) de no tener en cuenta la correlación y la posible heterogeneidad entre las observaciones. En su lugar, trataremos todas las observaciones como i.i.d. Podemos usar nl para ajustar el modelo anterior, pero aquí usaremos menl(A partir del 15.1, menl ya no requiere que se incluyan los efectos aleatorios en la especificación del modelo.)
      . menl circumf = {phi1}/(1+exp(-(age-{phi2})/{phi3})), stddeviations

      Obtaining starting values:

      NLS algorithm:

      Iteration 0:   residual SS =  17480.234
      Iteration 1:   residual SS =  17480.234

      Computing standard errors:

      Mixed-effects ML nonlinear regression           Number of obs     =         35
      Log Likelihood = -158.39871
      ------------------------------------------------------------------------------
      circumf |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
      -------------+----------------------------------------------------------------
      /phi1 |   192.6876   20.24411     9.52   0.000     153.0099    232.3653
      /phi2 |   728.7564   107.2984     6.79   0.000     518.4555    939.0573
      /phi3 |   353.5337   81.47184     4.34   0.000     193.8518    513.2156
      ------------------------------------------------------------------------------

      ------------------------------------------------------------------------------
      Random-effects Parameters  |   Estimate   Std. Err.     [95% Conf. Interval]
      -----------------------------+------------------------------------------------
      sd(Residual) |   22.34805   2.671102      17.68079    28.24734
      ------------------------------------------------------------------------------
    
La opción stddeviations indica a menl que reporte la desviación estándar del término de error en lugar de la varianza. Debido a que una curva de crecimiento se usa para todos los árboles, las diferencias individuales como se muestran en el gráfico anterior se incorporan en los residuales, inflando así la desviación estándar de los residuales.
Tenemos múltiples observaciones del mismo árbol que probablemente estén correlacionadas. Una forma de explicar la dependencia entre observaciones dentro del mismo árbol es incluir un efecto aleatorio, \(u_j\), compartido por todas las observaciones dentro del \(j\)-ésimo árbol. Por lo tanto, nuestro modelo se convierte
$$
\mathsf{circumf}_{ij}=\frac{\phi_{1}}{1+\exp\left\{ -\left( \mathsf{age}_{ij}-\phi_{2}\right)/\phi_{3}\right\}} + u_j + \epsilon_{ij}, \quad j=1,\dots,5; i=1,\dots,7
$$
Este modelo puede ajustarse escribiendo
      . menl circumf = {phi1}/(1+exp(-(age-{phi2})/{phi3}))+{U[tree]}, stddev

      Obtaining starting values by EM:

      Alternating PNLS/LME algorithm:

      Iteration 1:    linearization log likelihood = -147.631786
      Iteration 2:    linearization log likelihood = -147.631786

      Computing standard errors:

      Mixed-effects ML nonlinear regression           Number of obs     =         35
      Group variable: tree                            Number of groups  =          5

      Obs per group:
      min =          7
      avg =        7.0
      max =          7
      Linearization log likelihood = -147.63179
      ------------------------------------------------------------------------------
      circumf |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
      -------------+----------------------------------------------------------------
      /phi1 |   192.2526   17.06127    11.27   0.000     158.8131    225.6921
      /phi2 |   729.3642   68.05493    10.72   0.000      595.979    862.7494
      /phi3 |    352.405   58.25042     6.05   0.000     238.2363    466.5738
      ------------------------------------------------------------------------------

      ------------------------------------------------------------------------------
      Random-effects Parameters  |   Estimate   Std. Err.     [95% Conf. Interval]
      -----------------------------+------------------------------------------------
      tree: Identity               |
      sd(U) |   17.65093   6.065958      8.999985    34.61732
      -----------------------------+------------------------------------------------
      sd(Residual) |    13.7099    1.76994      10.64497    17.65728
      ------------------------------------------------------------------------------
    
Las estimaciones de efectos fijos son similares en ambos modelos, pero sus errores estándar son más pequeños en el modelo anterior. La desviación estándar residual también es menor porque algunas de las diferencias individuales ahora se explican por el efecto aleatorio. Sean \(y_{sj}\) and \(y_{tj}\) dos observaciones del \(j\)j-ésimo árbol. La inclusión del efecto aleatorio \(u_j\) implica que la \({\rm Cov}(y_{sj},y_{tj}) > 0\) (de hecho, es igual a \({\rm Var}(u_j)\)). Por lo tanto, \(u_j\) induce una correlación positiva sobre dos observaciones cualesquiera dentro del mismo árbol.
Hay otra forma de explicar la correlación entre observaciones dentro de un grupo. Puedes modelar la estructura de la covarianza residual explícitamente usando opción rescovariance() de menl. Por ejemplo, el modelo no lineal de intercepto aleatorio anterior es equivalente a un modelo marginal no lineal con una matriz de covarianzas intercambiable. Técnicamente, los dos modelos son equivalentes sólo cuando la correlación de las observaciones dentro del grupo es positiva.
      . menl circumf = {phi1}/(1+exp(-(age-{phi2})/{phi3})),
      rescovariance(exchangeable, group(tree)) stddev

      Obtaining starting values:

      Alternating GNLS/ML algorithm:

      Iteration 1:    log likelihood = -147.632441
      Iteration 2:    log likelihood = -147.631786
      Iteration 3:    log likelihood = -147.631786
      Iteration 4:    log likelihood = -147.631786

      Computing standard errors:

      Mixed-effects ML nonlinear regression           Number of obs     =         35
      Group variable: tree                            Number of groups  =          5

      Obs per group:
      min =          7
      avg =        7.0
      max =          7
      Log Likelihood = -147.63179
      ------------------------------------------------------------------------------
      circumf |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
      -------------+----------------------------------------------------------------
      /phi1 |   192.2526   17.06127    11.27   0.000     158.8131    225.6921
      /phi2 |   729.3642   68.05493    10.72   0.000      595.979    862.7494
      /phi3 |    352.405   58.25042     6.05   0.000     238.2363    466.5738
      ------------------------------------------------------------------------------

      ------------------------------------------------------------------------------
      Random-effects Parameters  |   Estimate   Std. Err.     [95% Conf. Interval]
      -----------------------------+------------------------------------------------
      Residual: Exchangeable       |
      sd |   22.34987    4.87771      14.57155    34.28026
      corr |   .6237137   .1741451      .1707327    .8590478
      ------------------------------------------------------------------------------
    
La proporción de efectos fijos de la salida es idéntica en ambos modelos. Estos dos modelos también producen la misma estimación de la matriz de covarianza marginal. Puede verificar esto al ejecutar estat wcorrelation después de cada modelo. Aunque ambos modelos son equivalentes, al incluir un efecto aleatorio en árboles, no podemos sólo explicar la dependencia de las observaciones dentro de los árboles, sino también estimar la variabilidad entre los árboles y predecir los efectos específicos del árbol después de la estimación.
Los dos modelos anteriores implican que las curvas de crecimiento para todos los árboles tienen la misma forma y solo se diferencian por un desplazamiento vertical que es igual a \(u_j\). Esta puede ser una suposición demasiado fuerte en la práctica. Si miramos hacia atrás en el gráfico, notaremos que hay una variabilidad creciente en las circunferencias del tronco de los árboles a medida que se acercan a su altura límite. Por lo tanto, puede ser más razonable permitir que \(\phi_1\) varíe entre árboles. Esto también dará a nuestros parámetros de interés una interpretación específica de árbol. Es decir, asumimos.
$$
\mathsf{circumf}_{ij}=\frac{\phi_{1}}{1+\exp\left\{ -\left( \mathsf{age}_{ij}-\phi_{2}\right)/\phi_{3}\right\}} + \epsilon_{ij}
$$
Con
$$
\phi_1 = \phi_{1j} = \beta_1 + u_j
$$
Se puede interpretar \(\beta_1\) como la altura asintótica promedio y \(u_j\) omo una desviación aleatoria del promedio que es especifico del \(j\)-ésimo árbol. El modelo anterior puede ajustarse de la siguiente manera:
      . menl circumf = ({b1}+{U1[tree]})/(1+exp(-(age-{phi2})/{phi3}))

      Obtaining starting values by EM:

      Alternating PNLS/LME algorithm:

      Iteration 1:    linearization log likelihood = -131.584579

      Computing standard errors:

      Mixed-effects ML nonlinear regression           Number of obs     =         35
      Group variable: tree                            Number of groups  =          5

      Obs per group:
      min =          7
      avg =        7.0
      max =          7
      Linearization log likelihood = -131.58458
      ------------------------------------------------------------------------------
      circumf |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
      -------------+----------------------------------------------------------------
      /b1 |    191.049   16.15403    11.83   0.000     159.3877    222.7103
      /phi2 |    722.556   35.15082    20.56   0.000     653.6616    791.4503
      /phi3 |   344.1624   27.14739    12.68   0.000     290.9545    397.3703
      ------------------------------------------------------------------------------

      ------------------------------------------------------------------------------
      Random-effects Parameters  |   Estimate   Std. Err.     [95% Conf. Interval]
      -----------------------------+------------------------------------------------
      tree: Identity               |
      var(U1) |   991.1514   639.4636      279.8776    3510.038
      -----------------------------+------------------------------------------------
      var(Residual) |   61.56371   15.89568      37.11466    102.1184
      ------------------------------------------------------------------------------
    
Si se desea, también podemos modelar la estructura de covarianza del error intra árbol utilizando, por ejemplo, una estructura intercambiable:
      . menl circumf = ({b1}+{U1[tree]})/(1+exp(-(age-{phi2})/{phi3})),
      rescovariance(exchangeable)

      Obtaining starting values by EM:

      Alternating PNLS/LME algorithm:

      Iteration 1:    linearization log likelihood = -131.468559
      Iteration 2:    linearization log likelihood = -131.470388
      Iteration 3:    linearization log likelihood = -131.470791
      Iteration 4:    linearization log likelihood = -131.470813
      Iteration 5:    linearization log likelihood = -131.470813

      Computing standard errors:

      Mixed-effects ML nonlinear regression           Number of obs     =         35
      Group variable: tree                            Number of groups  =          5

      Obs per group:
      min =          7
      avg =        7.0
      max =          7
      Linearization log likelihood = -131.47081
      ------------------------------------------------------------------------------
      circumf |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
      -------------+----------------------------------------------------------------
      /b1 |   191.2005   15.59015    12.26   0.000     160.6444    221.7566
      /phi2 |   721.5232   35.66132    20.23   0.000     651.6283    791.4182
      /phi3 |   344.3675   27.20839    12.66   0.000     291.0401     397.695
      ------------------------------------------------------------------------------

      ------------------------------------------------------------------------------
      Random-effects Parameters  |   Estimate   Std. Err.     [95% Conf. Interval]
      -----------------------------+------------------------------------------------
      tree: Identity               |
      var(U1) |   921.3895    582.735      266.7465    3182.641
      -----------------------------+------------------------------------------------
      Residual: Exchangeable       |
      var |   54.85736   14.16704      33.06817    91.00381
      cov |  -9.142893   2.378124     -13.80393   -4.481856
      ------------------------------------------------------------------------------
    
No especificamos la opción group() en el ejemplo pasado porque, en presencia de efectos aleatorios, rescovariance() automáticamente determina el grupo de nivel más bajo en función de los efectos aleatorios especificados.
Los modelos NLME hasta ahora son todos lineales en el efecto aleatorio. En los modelos NLME, los efectos aleatorios pueden ingresar al modelo de forma no lineal, al igual que los efectos fijos, y a menudo lo hacen. Por ejemplo, además de \(\phi_1\), podemos permitir que otros parámetros varíen entre árboles y tener sus propios efectos aleatorios:
      . menl circumf = {phi1:}/(1+exp(-(age-{phi2:})/{phi3:})),
      define(phi1:{b1}+{U1[tree]})
      define(phi2:{b2}+{U2[tree]})
      define(phi3:{b3}+{U3[tree]})
      (output omitted)
    
El modelo anterior es muy complicado para nuestros datos que contienen sólo cinco árboles y se incluye únicamente con fines de demostración. Pero a partir de este ejemplo, se puede ver que la opción define() es útil cuando se tiene una expresión no lineal complicada, y se prefiere dividirla en partes más pequeñas. Los parámetros especificados dentro de define() también pueden predecirse para cada árbol después de la estimación. Por ejemplo, una vez que ajustamos nuestro modelo, podemos desear predecir la altura asintótica \(\phi_{1j}\), para cada árbol \(j\). A continuación, solicitamos construir una variable llamada phi1 que contenga los valores predichos para la expresión {phi1:}:
      . predict (phi1 = {phi1:})
      (output omitted)
    
Si tuviéramos más árboles, también podríamos haber especificado una estructura de covarianza para estos efectos aleatorios de la siguiente manera:
      . menl circumf = {phi1:}/(1+exp(-(age-{phi2:})/{phi3:})),
      define(phi1:{b1}+{U1[tree]})
      define(phi2:{b2}+{U2[tree]})
      define(phi3:{b3}+{U3[tree]})
      covariance(U1 U2 U3, unstructured)
      (output omitted)
    
Demostré solo algunos modelos en este artículo, pero menl cpuede hacer mucho más. Por ejemplo, menl cpuede incorporar niveles más altos de anidación, como modelos de tres niveles (por ejemplo, observaciones repetidas anidadas dentro de árboles y árboles anidados dentro de zonas de plantación). Vea [ME] menl para más ejemplos.
Referencias
- Draper, N., and H. Smith. 1998. Applied Regression Analysis. 3rd ed. New York: Wiley.
- Pinheiro, J. C., and D. M. Bates. 2000. Mixed-Effects Models in S and S-PLUS. New York: Springer.
Este blog es administrado por MultiON Consulting S.A. de C.V.

miércoles, 23 de agosto de 2017

Estimación de parámetros de modelos DSGE

Introducción
Los modelos de equilibrio general dinámico estocástico (DSGE) se utilizan en la macroeconomía para modelar el comportamiento conjunto de series de tiempo agregadas, como la inflación, las tasas de interés y el desempleo. A través de esta metodología, se pueden analizar políticas y resolver preguntas como: “Cuál es el efecto de un alza repentina de las tasas de interés sobre el producto?” Para responder esta pregunta, necesitamos un modelo de la relación que hay entre las tasas de interés, la inflación y el producto. A diferencia de otros modelos de múltiples series de tiempo, los modelos DSGE están muy vinculados a la teoría económica. Las teorías macroeconómicas son sistemas de ecuaciones que se surgen de modelar las decisiones de los hogares, las empresas, los hacedores de política, y otros agentes. Estas ecuaciones son los componentes de un modelo DSGE y, puesto que el modelo DSGE surge de la teoría, sus parámetros tienen una interpretación directa en términos de dicha teoría.
En esta entrada, construiremos un pequeño modelo DSGE que es similar a los modelos que se utilizan para el análisis de política monetaria. Mostraremos cómo estimar los parámetros de este modelo utilizando el nuevo comando dsge de Stata 15. Después, aplicaremos un choque al modelo (una contracción de la política monetaria) y graficaremos la respuesta de las demás variables a este choque.

Un pequeño modelo DSGE
Los modelos DSGE comienzan con una descripción de los sectores de la economía que se van a modelar. El modelo que describiremos aquí está relacionado a los modelos que desarrollaron Clarida, Galí, y Gertler (1999) y Woodford (2003). Es una versión más pequeña de los modelos que se utilizan en la banca central y en la academia para hacer análisis de política monetaria. El modelo abarca a tres sectores: hogares, empresas y el banco central.
  • Los hogares consumen el producto. Su toma de decisiones está resumida en una ecuación de demanda de producto que relaciona la demanda actual de producto a la demanda futura esperada y a la tasa de interés real.
  • Las empresas determinan los precios y generan el producto para satisfacer la demanda a estos precios. Su toma de decisiones se resume en una ecuación de precios que relaciona la inflación actual (es decir, el cambio de los precios) a la inflación futura esperada y a la demanda actual. El parámetro que cuantifica la dependencia entre inflación y demanda tiene un papel clave en este modelo.
  • El banco central responde a la inflación determinando la tasa de interés nominal. El banco aumenta la tasa de interés cuando la inflación sube y recorta la tasa cuando la inflación baja.
El modelo se puede resumir en tres ecuaciones,
\begin{align}
x_t &= E_t(x_{t+1}) – \{r_t – E_t(\pi_{t+1}) – z_t\} \\
\pi_t &= \beta E_t(\pi_{t+1}) + \kappa x_t \\
r_t &= \frac{1}{\beta} \pi_t + u_t
\end{align}

La variable \(x_t\) es la brecha del producto. La brecha del producto mide la diferencia entre el producto y su nivel natural de largo plazo. La notación \(E_t(x_{t+1})\) se refiere al valor esperado, dada la información disponible en el periodo \(t\), de la brecha del producto en el periodo \(t+1\). La tasa de interés nominal es \(r_t\), y la tasa de inflación es \(\pi_t\). La Ecuación 1 dice que la brecha del producto actual tiene una relación positiva con la brecha del producto esperada, \(E_t(x_{t+1})\), y una relación inversa con la brecha de la tasa de interés, \(\{r_t – E_t(\pi_{t+1}) – z_t\}\). La segunda ecuación es donde las empresas determinan sus precios; expresa la manera en que la inflación está relacionada con la inflación esperada y la brecha del producto. El parámetro \(\kappa\) determina qué tanto depende la inflación de la brecha del producto. Por último, la tercera ecuación resume el comportamiento del banco central; relaciona la tasa de interés a la inflación y a otros factores, que en conjunto se denominan \(u_t\).
Las variables endógenas \(x_t\), \(\pi_t\), y \(r_t\) son determinadas por dos variables exógenas: \(z_t\) y \(u_t\). Según la teoría, \(z_t\) es la tasa natural de interés. Si la tasa real de interés es igual a la tasa natural y se espera que mantenga ese nivel en el futuro, entonces la brecha del producto es cero. La variable exógena \(u_t\) representa todos los movimientos de la tasa de interés ocasionados por factores que no son la inflación. A veces se denomina el componente sorpresa de la política monetaria.

Aquí modelaremos las dos variables exógenas como procesos autorregresivos de primer orden, 
\begin{align}
z_{t+1} &= \rho_z z_t + \varepsilon_{t+1} \\
u_{t+1} &= \rho_u u_t + \xi_{t+1}
\end{align}
tal como usualmente se hace.

En la jerga macroeconométrica, las variables endógenas se denominan variables de control, y las exógenas variables de estado. Cada periodo, los valores de las variables de control son determinados por el sistema de ecuaciones. Las variables de control pueden ser observables o no observables. Las variables de estado están fijas al comienzo de un periodo y son no observables. El sistema de ecuaciones determina el valor que tendrán las variables de estado el siguiente periodo.
Nos gustaría usar este modelo para responder preguntas de política. ¿Qué impacto tendrá sobre las variables del modelo si el banco central aumenta su tasa inesperadamente? Podemos responder esta pregunta aplicando un impulso \(\xi_t\) y siguiendo su efecto a través del tiempo.
Antes de cualquier análisis de política, sin embargo, debemos asignar valores a los parámetros del modelo. Estimaremos los parámetros de nuestro modelo con el comando dsge de Stata, utilizando datos estadounidenses de inflación y tasas de interés.

Especificación del DSGE con dsge
En un modelo DSGE, podemos tener tantas variables observables de control como tengamos choques. En nuestro ejemplo, puesto que tenemos dos choques, tenemos dos variables observables de control. Las variables de un modelo DSGE linealizado son estacionarias y se miden en desviaciones del nivel de equilibrio. En la práctica, esto significa que los datos tienen que estar en desviaciones de la media antes de realizar la estimación. El comando dsge calculará estas desviaciones automáticamente.
Utilizaremos la base usmacro2, que se tomó de la Reserva Federal de St. Louis.
. webuse usmacro2
Para especificarle el modelo a Stata, sólo tenemos que ingresar las ecuaciones.
. dsge (x = E(F.x) - (r - E(F.p) - z), unobserved) ///
       (p = {beta}*E(F.p) + {kappa}*x)             ///
       (r = 1/{beta}*p + u)                        ///
       (F.z = {rhoz}*z, state)                     ///
       (F.u = {rhou}*u, state)
Las reglas de este comando son similares a las reglas que rigen a otros comandos de Stata con múltiples expresiones. Cada ecuación se ingresa entre paréntesis. Los parámetros se ingresan con corchetes para distinguirlos de las variables. Los valores esperados de variables futuras aparecen con el operador E(). Sólo una variable aparece del lado izquierdo de cada ecuación. Además, cada variable del modelo aparece del lado izquierdo en sólo una ecuación. Las variables pueden ser observables (variables que están en nuestra base de datos) o no observables. Dado que las variables de estado son fijas en el periodo actual, las ecuaciones de variables de estado nos dicen cómo el valor del periodo inmediato posterior depende del valor actual de las variables de estado y, quizá, del valor actual de las variables de control.
La estimación de los parámetros genera la siguiente tabla de resultados:
. dsge (x = E(F.x) - (r - E(F.p) - z), unobserved) ///
>      (p = {beta}*E(F.p) + {kappa}*x)             ///
>      (r = 1/{beta}*p + u)                        ///
>      (F.z = {rhoz}*z, state)                     ///
>      (F.u = {rhou}*u, state)
(setting technique to bfgs)
Iteration 0:   log likelihood = -13738.863
Iteration 1:   log likelihood = -1311.9615  (backed up)
Iteration 2:   log likelihood = -1024.7903  (backed up)
Iteration 3:   log likelihood = -869.19312  (backed up)
Iteration 4:   log likelihood = -841.79194  (backed up)
(switching technique to nr)
Iteration 5:   log likelihood =  -819.0268  (not concave)
Iteration 6:   log likelihood =  -782.4525  (not concave)
Iteration 7:   log likelihood = -764.07067
Iteration 8:   log likelihood = -757.85496
Iteration 9:   log likelihood = -754.02921
Iteration 10:  log likelihood = -753.58072
Iteration 11:  log likelihood = -753.57136
Iteration 12:  log likelihood = -753.57131

DSGE model

Sample: 1955q1 - 2015q4                         Number of obs     =        244
Log likelihood = -753.57131
------------------------------------------------------------------------------
             |                 OIM
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
/structural  |
        beta |    .514668    .078349     6.57   0.000     .3611067    .6682292
       kappa |   .1659046    .047407     3.50   0.000     .0729885    .2588207
        rhoz |   .9545256   .0186424    51.20   0.000     .9179872     .991064
        rhou |   .7005492   .0452603    15.48   0.000     .6118406    .7892578
-------------+----------------------------------------------------------------
      sd(e.z)|   .6211208   .1015081                      .4221685     .820073
      sd(e.u)|     2.3182   .3047433                      1.720914    2.915486
------------------------------------------------------------------------------
El parámetro crucial es {kappa}, que según nuestra estimación es positivo. Este parámetro refleja las fricciones de precios que subyacen a nuestro modelo. Su interpretación es que, manteniendo constante la inflación esperada, un aumento de 1 punto porcentual en la brecha del producto está relacionado a un aumento de 0.17 puntos porcentuales en la inflación.
El parámetro \(\beta\) estimado es cercano a 0.5, lo cual significa que el coeficiente de la inflación en la ecuación de tasas de interés es más o menos 2. El banco central entonces aumenta la tasa de interés más o menos 2 puntos porcentuales por cada punto porcentual que aumente la inflación. Este parámetro es muy estudiado en la literatura de economía monetaria, y los estimados rondan 1.5. El valor que estimamos aquí es similar a esos estimados. Por último, nuestra estimación indica que ambas variables de estado \(z_t\) y \(u_t\) son persistentes, con parámetros autorregresivos de 0.95 y 0.7, respectivamente.

Impulsos–respuesta
Ahora podemos utilizar el modelo para responder preguntas de política. Una pregunta que podemos responder es, “¿Qué efecto tendría un movimiento inesperado de tasas sobre la inflación y la brecha del producto?” Un cambio inesperado en la tasa de interés se modela como un choque a la ecuación de \(u_t\). En el lenguaje de nuestro modelo, este choque representa una contracción de la política monetaria.
Un impulso es una serie de valores para el choque \(\xi\) de la Ecuación 5: \((1, 0, 0, 0, 0, \dots)\). El choque entonces se transmite a las variables de estado del modelo, generando un aumento de \(u\). Después, el aumento de \(u\) provoca un cambio en todas las variables de control del modelo. Las funciones de impulso–respuesta siguen el efecto que tiene el choque sobre las variables del modelo, tomando en cuenta todas las relaciones que existen entre las variables.
Ingresaremos tres comandos para obtener y graficar nuestra función de impulso–respuesta (IRF por sus siglas en inglés). El comando irf set define el archivo IRF que contendrá nuestros impulsos–respuesta. El comando irf create genera los impulsos–respuesta en el archivo IRF.
. irf set dsge_irf
. irf create model1
Una vez que nuestros impulsos–respuesta están guardados, podemos graficarlos:
. irf graph irf, impulse(u) response(x p r u) byopts(yrescale) yline(0)
graph1

En nuestras gráficas de impulsos–respuesta observamos la respuestas de las variables del modelo a un choque de una desviación estándar. Cada gráfica es la respuesta de una variable a un choque. El eje horizontal indica el tiempo que ha transcurrido desde el choque, mientras que el eje vertical mide las desviaciones del valor de largo plazo. La gráfica de la esquina inferior izquierda muestra la respuesta de la variable de estado monetaria, \(u_t\). Las otras tres gráficas muestran las respuestas de la inflación, la tasa de interés y la brecha del producto. La inflación, en la esquina superior izquierda, observa una caída al momento del choque. La respuesta de la tasa de interés (arriba a la derecha) es una suma ponderada de las respuestas de la inflación y la variable de estado monetaria. La tasa de interés se eleva alrededor de un punto porcentual. Por último, la brecha del producto disminuye. Así, el modelo predice que la economía entra en recesión luego de que ocurre una contracción monetaria. Con el paso del tiempo, el efecto del choque se disipa, y todas las variables regresan a su valor de largo plazo.

Conclusión
En esta entrada, desarrollamos un pequeño modelo DSGE y mostramos cómo estimar sus parámetros utilizando el comando dsge. Luego mostramos cómo obtener e interpretar una función de impulso–respuesta.

Referencias
Clarida, R., J. Galí, y M. Gertler. 1999. The science of monetary policy: A new Keynesian perspective. Journal of Economic Literature 37: 1661–1707.
Woodford, M. 2003. Interest and Prices: Foundations of a Theory of Monetary Policy. Princeton, NJ: Princeton University Press.



Este blog es administrado por MultiON Consulting S.A. de C.V.

lunes, 17 de julio de 2017

Regresión no paramétrica: como la regresión paramétrica... pero no

Enrique Pinzón, Econometra Senior - Stata Corp.

Intro
La regresión no paramétrica es similar a la regresión lineal, la regresión Poisson, y las regresiones Logit y Probit, en tanto que se está prediciendo la media de un proceso, dado un conjunto de regresores. Si has trabajado con los modelos paramétricos que acabamos de mencionar u otros modelos que predicen medias, entonces ya sabes cómo funciona la regresión no paramétrica y puedes también trabajar con esa herramienta.
La diferencia principal entre los modelos paramétricos y no paramétricos son los supuestos sobre la forma funcional de la media y los regresores. Los modelos paramétricos asumen que la media es una función conocida de xβ, mientras que la regresión no paramétrica no impone supuestos sobre la forma funcional.
En la práctica, esto significa que la regresión no paramétrica produce estimados consistentes de la función de media, que son robustos a la mala especificación funcional. Pero no hay por qué detenernos ahí. Con el comando npregress de Stata 15, podemos obtener estimados de cómo cambia la media conforme cambian los regresores —ya sean discretos o continuos— y podemos utilizar la opción margins para responder otras preguntas sobre la función de media.
A continuación ilustraremos cómo utilizar npregress y cómo interpretar sus resultados. Como verás, los resultados se interpretan igual que interpretaríamos los resultados de una regresión paramétrica con margins.

Ejemplo de regresión
Para ilustrar esto, simularemos una serie donde el modelo verdadero satisface los supuestos de la regresión lineal. Utilizaremos un regresor continuo y un regresor discreto. El regresando depende de los regresores de la siguiente manera:

donde x es el regresor continua y a es el regreor discreto, con valores 0, 1 y 2. Generaremos los datos con el siguiente bloque de código:


Bloque 1. Código para generar los datos

Las más de las veces, el investigador no conoce la forma funcional de la media. Cuando se conoce la relación verdadera entre y, a y x, se puede utilizar regress para estimar la función de media. Por ahora, continuaremos el ejemplo como si no conociéramos la relación verdadera y estimaremos la función de media con el comando:
regress y c.x#c.x#c.x c.x#i.a
Luego, podemos estimar el promedio de la función de media, el efecto marginal promedio de x y los efectos de tratamiento promedio de a. Según el comando margins, el promedio de la función de media es 12.02 (Figura 1).
Figura 1. Salida del comando margins

La estimación del efecto marginal promedio de x, obtenida con la opción dydx(x), es de 3.96 (Figura 2).
Figura 2. Salida del comando margins, dydx(x)

Y la estimación del efecto de tratamiento promedio para a = 1, relativo a a = 0, es de -9.78; para el efecto de a = 2, relativo a a = 0, obtenemos 3.02 (Figura 3).
Figura 3. Salida del comando margins, dydx(a)

Ahora utilizaremos el comando npregress para estimar la función de media, sin imponer supuestos sobre la forma funcional (Figura 4).
Figura 4. Estimación con el comando npregress

El promedio de los estimados de la media es de 12.34; el efecto marginal promedio de x se reporta como 3.62; la estimación del efecto de tratamiento promedio para a = 1 es de -9.88; y la estimación del efecto de tratamiento promedio para a = 2 es de 3.17. Todos estos valores son razonablemente cercanos a los que obtuvimos con el comando regress, utilizando el hecho de que conocemos la verdadera forma funcional de la media.
Además, el intervalo de confianza de cada estimado incluye tanto el valor verdadero simulado como el estimado obtenido con regress. Esto nos lleva a otro punto importante. En general, los intervalos de confianza que obtenemos con npregress son más amplios que los que se obtienen con un regress de la forma funcional correcta. Esto no es de sorprender. La regresión no paramétrica es consistente, pero no puede ser más eficiente que ajustar un modelo paramétrico bien especificado.
En este ejemplo, utilizar regress y margins conociendo la forma funcional es equivalente a utilizar npregress. Se obtienen estimados similares y los resultados tienen la misma interpretación.
Ejemplo con variable dependiente binaria
La variable dependiente de nuestro primer ejemplo era continua. Sin embargo, se puede también estimar una media condicional —que es lo mismo que una probabilidad condicional— para una variable dependiente binaria.
Utilizando el mismo seed de 111 y el mismo tamaño de muestra, nuestro modelo verdadero será esta vez:

donde

y a una vez más toma los valores discretos 0, 1 y 2. Los resultados de una estimación logit se muestran en la Figura 5.
Figura 5. Resultados de estimación logit

El promedio de las medias condicionales estimadas es de 0.304, y es igual a la probabilidad promedio de "éxito"; el efecto marginal estimado de x es 0.169, el efecto de tratamiento promedio para a = 1 se estima como -0.181, y el efecto de tratamiento promedio para a = 2 como -0.350.
Veamos si npregress puede obtener resultados similares sin saber de antemano que la forma funcional es logística (Figura 6).
Figura 6. Salida de npregress para modelo logístico

El estimado de la media condicional es 0.309, el efecto marginal estimado de x es 0.172, el efecto de tratamiento promedio para a = 1 se estima como -0.177, y el efecto de tratamiento promedio para a = 2 como -0.352. La regresión no paramétrica logró el objetivo.
Contestando otras preguntas
El comando npregress proporciona estimados de efectos marginales y efectos de tratamiento como parte de su salida, pero también podemos obtener respuestas a otras preguntas importantes utilizando el comando margins.
Regresemos al ejemplo de la regresión y supongamos que queremos obtener el valor de la función de media para diferentes valores del regresor x, promediando sobre a (Figura 7).
Figura 7. Salida de margins

Luego, utilizando el comando marginsplot, podemos obtener la Figura 8.
Figura 8. Valor ajustado para diferentes valores de x (promedio sobre a)

En la Figura 8 podemos apreciar que, conforme x aumenta, también aumenta el valor ajustado, si bien de manera no lineal.
Por otra parte, podríamos graficar la función de media para los mismos valores de x, pero, en vez de promediar sobre a, podemos obtener la media esperada para cada valor de a. El comando sería:
margins a, at(x1=(1(.5)3)) vce(bootstrap, reps(100) seed(111))
Utilizando marginsplot, podemos visualizar el resultado (Figura 9).
Figura 9. Valores ajustados para diferentes valores de x y a

Podemos observar en la Figura 9 que el efecto de x sobre la media es distinto para diferentes valores de a. Dado que nuestro modelo tiene únicamente dos regresores, la Figura 9 contiene toda la información de la función de media.
Podríamos incluso preguntar cuál es el efecto promedio de un aumento del 10% en x. En este caso, al decir "promedio"nos referimos a aumentar 10% el x de cada observación de la serie. x podría ser, por ejemplo, una oferta en una tienda departamental, y nos preguntamos qué sucederá si aumentamos la oferta otro 10% (Figura 10).
Figura 10. Efecto de aumentar x un 10%

Podemos utilizar los comandos margins y npregress juntos para obtener efectos en diferentes valores de los datos, efectos promedio para la población, y contestar cualquier otra pregunta que sería apropiada en un contexto paramétrico.
Conclusión
El comando npregress es capaz de estimar una función de media para todo tipo de variables dependientes —continuas, binarias, de conteo, y más. La interpretación de los resultados es equivalente a la interpretación de los resultados de un modelo binario, al igual que lo es la interpretación de las salidas del comando margins. Lo que hace que npregress sea especial es que no necesitamos asumir una forma funcional. Con los modelos paramétricos, nuestras inferencias probablemente carezcan de sentido si no conocemos la verdadera forma funcional. Con npregress, nuestras inferencias son válidas independientemente de la verdadera forma funcional.

miércoles, 12 de julio de 2017

Consistencia y Normalidad Asintótica: Una Explicación con Simulaciones

David M. Drukker, Director Ejecutivo de Econometría - Stata Corp.

Resumen

En la estadística frecuentista, los estimadores son variables aleatorias porque son funciones de datos aleatorios. Las distribuciones de muestra finita de la mayoría de los estimadores que utilizamos en nuestras labores empíricas no son conocidas, dado que los estimadores son funciones complejas y no lineales de los datos. Sin embargo, estos estimadores tienen propiedades de convergencia en muestras grandes, que podemos utilizar para aproximar su comportamiento en muestras finitas.

Dos propiedades clave de la convergencia son la consistencia y la normalidad asintótica. Un estimador consistente se acerca cada vez más en probabilidad al valor verdadero. La distribución de un estimador asintóticamente normal se acerca cada vez más a la distribución normal conforme aumenta el tamaño de la muestra. Podemos utilizar una versión recentrada y escalada de esta distribución normal para aproximar la distribución de muestra finita de nuestros estimadores.

Aquí ilustraré el significado de la consistencia y la normalidad asintótica utilizando simulación Monte Carlo.

Estimador consistente

Un estimador consistente se acerca cada vez más en probabilidad al valor verdadero conforme aumenta el tamaño de la muestra. En otras palabras, la probabilidad de que un estimador consistente esté fuera del vecindario del valor verdadero converge a cero conforme aumenta el tamaño de la muestra. La Figura 1 ilustra esta convergencia para un estimador $theta$, con muestras de 100, 1000 y 5000 observaciones, cuando el valor verdadero es 0. Conforme aumenta el tamaño de la muestra, la densidad se distribuye de manera más y más compacta alrededor del valor verdadero. Con una muestra infinita, la densidad se colapsa a un solo pico sobre el valor verdadero.

Figura 1. Distribuciones de estimador con muestras de 100, 1000, 5000 y $\infty$


Ahora ilustraremos esto mostrando que la media muestral es un estimador consistente de la media de una variable aleatoria, siempre que nuestra muestra sea independiente e idénticamente distribuida (i.i.d.), y que la media y la varianza sean finitas. En este ejemplo, los datos provienen de una distribución $\chi^2$ con 1 grado de libertad. El valor verdadero es 1, puesto que la media de la distribución $\chi^2(1)$ es 1.

Este primer bloque de código (Bloque 1) implementa una simulación Monte Carlo de las medias muestrales de 1,000 muestras de 1,000 observaciones i.i.d. con distribución $\chi^2(1)$.

Bloque 1. Código de media1000.do


La línea 1 limpia la memoria de Stata y la línea 2 determina el seed del generador de números aleatorios. La línea 3 utiliza el comando postfile para crear un espacio en la memoria con nombre sim, en donde se almacenarán las observaciones de la variable m1000, y que será una base de datos llamada sim1000. Note que la palabra using separa el nombre de la nueva variable y el nombre de la nueva base de datos. La opción replace especifica que el archivo sim1000.dta se debe reemplazar, en caso de que ya exista.

Las líneas 5 y 11 utilizan un ciclo forvalues para repetir el código de las líneas 6 a 10 un total de 1,000 veces. En cada vuelta del ciclo forvalues, la línea 6 elimina la variable y, la línea 7 abre 1,000 observaciones, la línea 8 genera una muestra de 1,000 observaciones i.i.d. $\chi^2(1)$, la linea 9 estima la media de esa muestra, y la línea 10 utiliza el comando post para almacenar la media estimada en lo que será la nueva variable m1000. La línea 12 pasa todo lo almacenado en sim a una base de datos llamada sim100.dta.

En el Ejemplo 1, corremos el archivo media1000.do y hacemos un resumen de los resultados.

Ejemplo 1. Salida al ejecutar media1000.do. Resumen de la variable.


La media de nuestros 1,000 estimados es cercana al número 1. La desviación estándar de nuestros 1,000 estimados es de 0.442, y esta medida nos indica qué tan dispersa es la distribución alrededor del valor verdadero 1.

El código del Bloque 2 es el archivo media100000.do, que implementa la misma simulación Monte Carlo pero con muestras de 100,000 observaciones...

Bloque 2. Código de media100000.do.


...y el Ejemplo 2 muestra la salida que resulta de ejecutar este archivo. Luego, se genera un resumen de los datos.

Ejemplo 2. Salida al ejecutar media100000.do. Resumen de la variable.


La desviación estándar de 0.0043 indica que la distribución del estimador con un tamaño de muestra de 100,000 está mucho más concentrada alrededor del valor verdadero 1 que la distribución del estimador con tamaño de muestra 1,000.

El código del Ejemplo 3 combina las dos bases de datos de estimados, para graficar las distribuciones que resultan con estos dos tamaños de muestra (Figura 2). La distribución del estimador con muestras de 100,000 observaciones está mucho más concentrada alrededor del valor verdadero 1 que la distribución del estimador con muestras de 1,000.

Ejemplo 3. Código para combinar bases y generar la Figura 2.


Figura 2. Densidades del estimador media muestral, con N=1,000 y N=100,000.


La media muestral es un estimador consistente de la media de una variable aleatoria $\chi^2(1)$ gracias a la ley débil de los grandes números. De acuerdo a ese teorema, la media muestral converge en probabilidad a la media verdadera si los datos son i.i.d., la media es finita y la varianza es finita. Otras versiones de este teorema relajan el supuesto i.i.d. o los supuestos de los momentos (ver Cameron & Trivedi (2005, sec. A.3), Wasserman (2003, sec. 5.3), y Wooldridge (2010, 41-42) para más detalles).

Normalidad asintótica

Así que la buena noticia es que la distribución de un estimador consistente tiende a concentrase alrededor del valor verdadero. La mala noticia es que la distribución del estimador cambia con el tamaño de la muestra, como se puede apreciar en las Figuras 1 y 2.

Si conociéramos la distribución de nuestro estimador para cualquier tamaño de muestra, podríamos utilizarla para realizar inferencia con su distribución de muestra finita, también conocida como la distribución exacta. Pero la distribución exacta de la mayoría de los estimadores que utilizamos en nuestros análisis no es conocida. Afortunadamente, la distribución de una versión recentrada y escalada de estos estimadores converge hacia la distribución normal conforme aumenta el tamaño de la muestra; a los estimadores que tienen esta propiedad les llamamos estimadores asintóticamente normales, y utilizamos esta distribución de muestra grande para aproximar la distribución de muestra finita.

En la Figura 2 se observa que la distribución de la media muestral se colapsa hacia el valor verdadero conforme el tamaño de la muestra aumenta. En vez de enfocarnos en la distribución del estimador $\hat{\theta}_N$ para un tamaño de muestra $N$, consideremos ahora la distribución de $\sqrt{N}(\hat{\theta}_N-\theta_0)$, donde $\theta_0$ es el valor verdadero hacia el que colapsa $\hat{\theta}_N$.

El Ejemplo 4 estima las distribuciones de estos estimadores recentrados y escalados, que se muestran en la Figura 3.

Ejemplo 4. Densidades del estimador recentrado y escalado.


Figura 3. Densidades del estimador recentrado y escalado, con N=1,000 y N=100,000.


Las densidades de los estimadores recentrados y escalados en la Figura 3 son prácticamente iguales, y cercanos a la distribución normal. El teorema del límite central de Lindberg-Levy garantiza que la distribución de la media muestral recentrada y escalada de variables aleatorias i.i.d. con media finita $\mu$ y varianza finita $\sigma^2$ converge hacia una distribución normal con media 0 y varianza $\sigma^2$ conforme aumenta el tamaño de la muestra. En otras palabras, la distribución de $\sqrt{N}(\hat{\theta}_N-\mu)$ converge hacia la distribución $N(0,\theta^2)$ conforme $N\rightarrow\infty$, donde $\hat{\theta}_N=1/N\sum_{i=1}^{N}y_i$, siendo $y_i$ observaciones i.i.d. de la variable aleatoria. Esta convergencia en distribución justifica nuestro uso de la distribución $\hat{\theta}_N\sim N\left(\mu,\frac{\sigma^2}{N}\right)$ en la práctica.

Dado que $\sigma^2=2$ para la distribución $\chi^2(1)$, en el Ejemplo 5 agregamos a la gráfica una densidad Normal con media 0 y varianza 2 para comparar.

Ejemplo 5. Densidades del estimador recentrado y escalado.


Vemos que las densidades de estos estimadores recentrados y escalados son prácticamente idénticas a la distribución normal con media 0 y varianza 2, tal como lo predice la teoría.

Figura 4. Densidades de estimadores recentrados y escalados, y distribución Normal(0,2).


Otras versiones del teorema del límite central relajan el supuesto i.i.d. o los supuestos de los momentos. Ver Cameron & Trivedi (2005, sec. A.3), Wasserman (2003, sec. 5.3) y Wooldrige (2010, 41-42) para más detalles).

¡Listo!

Utilizamos simulación Monte Carlo para ilustrar el hecho de que la media muestral es un estimador consistente y asintóticamente normal, siempre que los datos sean observaciones i.i.d. de una variable con media y varianza finitas.

Muchos estimadores de método de momentos, máxima verosimilitud, y estimadores tipo M son consistentes y asintóticamente normales bajo ciertos supuestos sobre el proceso generador de información y sobre los estimadores mismos. Ver Cameron & Trivedi (2005, sec. 5.3), Newey & McFadden (1994), Wasserman (2003, cap. 9), y Wooldridge (2010, cap. 12) para más información.

Referencias

Cameron, A. C., y P. K. Trivedi. 2005. Microeconometrics: Methods and Applications. Cambridge: Cambridge University Press.

Newey, W. K., y D. McFadden. 1994. Large sample estimation and hypothesis testing. En Handbook of Econometrics, ed. R. F. Engle y D. McFadden, vol. 4, 2111–2245. Amsterdam: Elsevier.

Wasserman, L. A. 2003. All of Statistics: A Concise Course in Statistical Inference. New York: Springer.

Wooldridge, J. M. 2010. Econometric Analysis of Cross Section and Panel Data. 2da ed. Cambridge, Massachusetts: MIT Press.