ME715 - Econometria

Regressão não linear

Prof. Carlos Trucíos
ctrucios@unicamp.br

Instituto de Matemática, Estatística e Computação Científica (IMECC),
Universidade Estadual de Campinas (UNICAMP).

Introdução

Introdução

  • Até agora temos estudado diversos modelos que encaixam-se no arcabouso de uma regressão linear.
  • Temos aprendido também que \(\textbf{X}\) (o conjunto de variáveis explicativas) pode conter funções não lineares das variáveis originais e que isto ainda poder ser abordado utilizando regressão linear.
  • Contudo, relações não lineares (nos parâmetros) não podem ser tratadas com o modelo de regressão linear.
  • Neste casos, podemos utilizar regressão não linear (foco da aula de hoje)

Regressão não linear

Regressão não linear

Exemplo

Seja o modelo \[y_i = \underbrace{f(x_i, \beta)}_{x_i(\beta)} + u_i, \quad u_i \sim IID(0, \sigma^2), \quad i = 1, \cdots, n,\] em que \(x_i(\beta)\) é chamada função de regressão não linear.

Equivalentemente, \[\textbf{Y} = \textbf{X}(\beta) + \textbf{u}, \quad \textbf{u} \sim IID(0, \sigma^2I)\]

Regressão não linear

Seja o modelo \[y_i = \beta_0 + \beta_1 x_{i1} + \dfrac{1}{\beta_1} x_{i2} + u_i, \quad u_i \sim IID(0, \sigma^2).\]

A função de regressão não linear é dada por \(x(\beta) = \beta_0 + \beta_1 x_1 + \dfrac{1}{\beta_1}x_2\).

  • O modelo é linear nas variáveis mas não nos parâmetros.
  • O coeficiente associado a \(x_2\) esta restrito a ser o inverso do coeficiente associado a \(x_1\)
  • Muitos modelos de regressão não linear podem ser escritos como modelos de regressão linear mas os parâmetros devem satisfazer restrições não lineares.

Regressão não linear

Seja o MRL com erros AR(1): \[\begin{align} y_t &= \textbf{X}_t \beta + u_t, \\ u_t &= \rho u_{t-1} + \epsilon_t, \\ \epsilon_t &\sim IID(0, \sigma^2) \end{align}\]

  • Uma abordagem para estimar os parâmetros é MQGF
  • Por outro lado, substituindo \(u_t\) por \(\rho u_{t-1} + \epsilon_t\) e \(u_{t-1}\) por \(y_{t-1} - \textbf{X}_{t-1}\beta\), temos: \[y_t = \rho y_{t-1} + \textbf{X}_t \beta - \rho \textbf{X}_{t-1}\beta + \epsilon_t\]
O modelo é linear nas variáveis mas não linear nos parâmetros
Precisamos de métodos de estimação apropriados para lidar com a estrutura do modelo

Método dos Momentos para modelos não lineares

Método dos Momentos para modelos não lineares

No caso dos modelos de regressão linear, temos:

  • \(\mathbb{E}(\textbf{X}_t u_t) = \mathbb{E}[\textbf{X}_t (y_t - \textbf{X}_t\beta)] = 0\).
  • Condição de momentos: \(\textbf{X}' (y - \textbf{X}\beta) = 0\)
  • \(\hat{\beta}_{MM} = \hat{\beta}_{MQO}\)

No caso dos modelos de regressão não linear, teremos:

  • \(\mathbb{E}(\textbf{W}_t u_t) = \mathbb{E}[\textbf{W}_t (y_t - x_{t}(\beta))] = 0\)
  • Condição de momentos: \(\textbf{W}' (y - \textbf{x}(\beta)) = 0\), em que \(\textbf{W}\) é de dimensão \(n \times k\) e \(\beta_{k \times 1}\).
  • Para obter \(\hat{\beta}_{MMNL}\) precisamos saber quem é \(\textbf{W}\).

Método dos Momentos para modelos não lineares

  • \(\textbf{W}\) é uma matriz (com linhas denotadas por \(\textbf{W}_t\)) de dimensão \(n \times k\)
  • Como escolhemos \(\textbf{W}\)?
    • Quase qualquer matriz levara a estimadores consistentes (desde que o posto coluna seja \(k\)) 😄.
    • Dependendo da escolha de \(\textbf{W}\), o estimador terá uma matriz de covariância assintótica duiferente 😢.
    • Como sempre, queremos uma escolha de \(\textbf{W}\) que nos leve a termos menor variância.

Método dos Momentos para modelos não lineares

Observação

  • Seja \(X_{ti} (\beta) = \dfrac{\partial x_t(\beta)}{\partial \beta_i}\) para \(i = 1, cdots, k\)
  • Seja \(\textbf{X}_t(\beta) = (X_{t1}(\beta), \cdots, X_{tk}(\beta))\)
  • Seja \(\textbf{X}_0\) uma matriz \(n \times k\) com elementos \(X_{ti} (\beta)\) (equivalentemente, com linhas \(\textbf{X}_1(\beta), \textbf{X}_2(\beta), \cdots, \textbf{X}_n(\beta)\)).
  • O \(\textbf{W}\) que minimiza a variância é \(\textbf{X}_0\)
    • Na prática, utilizar \(\textbf{W} = \textbf{X}_0\) não é possível
    • É aqui que MQNL entra em cena, obtendo um estimador com exatamente as mesmas propriedades assintóticas do que o EMMNL

Mínimos Quadrados não Lineares

Mínimos Quadrados não Lineares

Existem (pelo menos) duas formas de aproximar o assintóticamente eficiente, mas inviável, MM que utiliza \(\textbf{W} = \textbf{X}_0 = \textbf{X}_0(\beta)\).

Forma 1:

  • Escolher qualquer* \(\textbf{W}\)
  • Obter um estimador preliminar consistente (\(\tilde{\beta}\))
  • Estimar \(\beta\) considerando \(\textbf{W} = \textbf{X}_0(\tilde{\beta})\)
A consistência de \(\tilde{\beta}\) garante que \(\textbf{X}_0(\tilde{\beta}) \rightarrow \textbf{X}_0(\beta)\)

Mínimos Quadrados não Lineares

Forma 2

Considerar a condição de momentos \[\textbf{X}'_0(\beta)(\textbf{y} - x(\beta)) = 0.\]

  • Se \(\hat{\beta}\) for consistente, então \(\textbf{X}_0(\hat{\beta}) \rightarrow \textbf{X}_0 (\beta)\).
  • Para \(n \rightarrow \infty\), \(\hat{\beta}\) é muito próximo do \(\hat{\beta}_{MMNL}\).

Pode-se provar que a condição de momentos é equivalente a minimizar \[SQR(\beta) = \displaystyle \sum_{t = 1}^n (y_t - x_t(\beta))' (y_t - x_t(\beta))\]

Em geral, a solução não tem forma fechada e precisamos de métodos numéricos.

Mínimos Quadrados não Lineares

Exemplo

Utilizaremos um conjunto de dados simulados em que \[y = (a*x)/(b + x),\] e queremos estimar um modelo que captura propriadamente a dinâmica dos dados.

Code
x <- seq(0, 100, 0.25)
a <- runif(1, 10, 20)
b <- runif(1, 0, 10)
y <- (a * x) / (b + x) + rnorm(length(x), 0, 1)
c(a, b)
[1] 19.857227  8.792532

Mínimos Quadrados não Lineares

Code
plot(x, y)

Mínimos Quadrados não Lineares

Code
modelo <- nls(y ~ a * x  / (b + x), start = list(a = 1, b = 2))
summary(modelo) 

Formula: y ~ a * x/(b + x)

Parameters:
  Estimate Std. Error t value Pr(>|t|)    
a  19.7063     0.1219  161.65   <2e-16 ***
b   8.4538     0.2831   29.86   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.027 on 399 degrees of freedom

Number of iterations to convergence: 6 
Achieved convergence tolerance: 3.797e-08
Code
y_hat <- predict(modelo)
plot(x, y) 
lines(x, y_hat)