Econometria II

Lista 2

Author

Alan Ferreira dos Santos | 21065813

Lista

Site

Para resolver essa lista utilizar os dados da PNAD contínua referentes ao quarto trimestre de 2024. Eles se encontram no Moodle, no arquivo “dados_aula_12_02_26”, no objeto “pnad” (questões 1 a 3) e no objeto pwt (questões 4 a 6).

library(tidyverse)
library(ggthemes)
Warning: package 'ggthemes' was built under R version 4.4.3
library(scales)
library(gmm)
Warning: package 'gmm' was built under R version 4.4.3
Warning: package 'sandwich' was built under R version 4.4.3
url <- paste0("https://raw.githubusercontent.com/asantos-ufabc/",
                    "econometria_I/refs/heads/main/dados_aula_12_02_26.Rdata")

con <- url(url)

data <- load(con)
data
[1] "pnad" "pwt" 
pwt <- pwt |> 
  filter(year == 2019) |> 
  mutate(emprate = emp / pop) |> 
  select(inflation, emprate) |>
  # Divide em 5 grupos (quintis)
  mutate(faixa_emprego = as.factor(ntile(emprate, 8))) |> 
  filter(!is.na(faixa_emprego) & !is.na(inflation)) |>
  arrange(faixa_emprego)
head(pwt, 5)
    inflation   emprate faixa_emprego
1 0.005627822 0.2091074             1
2 0.007908555 0.2920386             1
3 0.035821354 0.2366808             1
4 0.019517682 0.2618503             1
5 0.091527996 0.2669107             1
pnad <- pnad |> select(salario_hora, anos_estudo)
head(pnad, 5)
# A tibble: 5 × 2
  salario_hora anos_estudo
         <dbl>       <dbl>
1         8.02          12
2         8.82          12
3        12.5           12
4        13.6           16
5         8.82          12

Questão 01

Elabore um gráfico para a média condicional amostral da variável “salario_hora” em relação à variável “anos_estudo”. Este gráfico também deve conter intervalos de confiança condicionais (para cada um dos níveis da variável “anos de estudo”).

Resposta 01

Cálculo númerico

pnad |>
  group_by(anos_estudo) |>
  summarise(
     n = n(),
     soma = sum(salario_hora),
     media = round(soma / n, 3),
     desvio_padrao = sqrt(sum((salario_hora - media)^2) / (n - 1)),
     erro_padrao = desvio_padrao / sqrt(n),
     # Margem de erro (Z = 1.96 para 95% de confiança)
     margem_erro = 1.96*erro_padrao,
     limite_inferior = media - margem_erro,
     limite_superior = media + margem_erro
    ) |>
    mutate(across(where(is.numeric), \(x) round(x, 3)))
# A tibble: 17 × 9
   anos_estudo     n     soma media desvio_padrao erro_padrao margem_erro
         <dbl> <dbl>    <dbl> <dbl>         <dbl>       <dbl>       <dbl>
 1           0  5448   56577. 10.4           17.9       0.242       0.475
 2           1  2751   29226. 10.6           15.1       0.287       0.563
 3           2  2377   21158.  8.90          12.3       0.252       0.494
 4           3  3152   31006.  9.84          17.2       0.306       0.599
 5           4  4225   46319. 11.0           17.0       0.262       0.513
 6           5 10994  136694. 12.4           23.3       0.222       0.435
 7           6  8099  102539. 12.7           27.7       0.308       0.604
 8           7  5177   67888. 13.1           38.5       0.535       1.05 
 9           8  6059   74663. 12.3           18.4       0.237       0.464
10           9 14389  198565. 13.8           36.7       0.306       0.6  
11          10  6148   75873. 12.3           26.6       0.339       0.665
12          11  6378   85137. 13.3           39.0       0.489       0.958
13          12 71350 1132093. 15.9           29.8       0.111       0.218
14          13  6293  119473. 19.0           30.3       0.381       0.748
15          14  5423  126453. 23.3           30.0       0.408       0.799
16          15  4540  112922. 24.9           43.2       0.641       1.26 
17          16 41531 1826253. 44.0          105.        0.517       1.01 
# ℹ 2 more variables: limite_inferior <dbl>, limite_superior <dbl>
media_salario_anos_estudo 
Figure 1: Média salarial condicional por nível de instrução.

Questão 02

Estime a seguinte regressão simples: \(salario\_hora = \beta_0 + \beta_1 \cdot anos\_estudo\_num\). Faça isso adotando dois procedimentos de estimação:

Resposta 02

Método dos Mínimos Quadrados Ordinários (MQO)

# Método dos Mínimos Quadrados Ordinários (MQO)
reg_lm <- lm(salario_hora ~ anos_estudo, data=pnad)
summary(reg_lm)

Call:
lm(formula = salario_hora ~ anos_estudo, data = pnad)

Residuals:
    Min      1Q  Median      3Q     Max 
  -31.7   -13.7    -6.7     2.9 13718.3 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -2.72231    0.33887  -8.034 9.52e-16 ***
anos_estudo  2.15225    0.02899  74.245  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 54.92 on 204332 degrees of freedom
Multiple R-squared:  0.02627,   Adjusted R-squared:  0.02626 
F-statistic:  5512 on 1 and 204332 DF,  p-value: < 2.2e-16

Método dos Momentos (MM)

# Método dos Momentos (MM)
reg_gmm <- gmm(salario_hora ~ anos_estudo, x = ~ anos_estudo, data=pnad)
summary(reg_gmm)

Call:
gmm(g = salario_hora ~ anos_estudo, x = ~anos_estudo, data = pnad)


Method:  twoStep 

Kernel:  Quadratic Spectral

Coefficients:
             Estimate     Std. Error   t value      Pr(>|t|)   
(Intercept)  -2.7223e+00   2.8541e-01  -9.5384e+00   1.4510e-21
anos_estudo   2.1523e+00   3.4979e-02   6.1531e+01   0.0000e+00

J-Test: degrees of freedom is 0 
                J-test                P-value             
Test E(g)=0:    5.79133677209764e-18  *******             
Questão 02(a)

Utilize a fórmula dos estimadores de mínimos quadrados para o intercepto e o coeficiente angular da regressão linear.

Resposta 02(a)

Intercepto

pnad |> 
  select(salario_hora, anos_estudo) |>
  summarise(
    y_barra = mean(salario_hora),
    x_barra = mean(anos_estudo),
    # Numerador: Somatório de (xi - x_barra) * (yi - y_barra)
    numerador = sum( (anos_estudo - x_barra) * (salario_hora - y_barra)),
    # Denominador: Somatório de (xi - x_barra)^2
    denominador = sum( (anos_estudo - x_barra) ^2),
    beta_um = numerador / denominador
    )   
# A tibble: 1 × 5
  y_barra x_barra numerador denominador beta_um
    <dbl>   <dbl>     <dbl>       <dbl>   <dbl>
1    20.8    10.9  7725742.    3589605.    2.15

Coeficiente Angular (inclinação)

pnad |> 
  select(salario_hora, anos_estudo) |>
  summarise(
    y_barra = mean(salario_hora),
    x_barra = mean(anos_estudo),
    # Numerador: Somatório de (xi - x_barra) * (yi - y_barra)
    numerador = sum( (anos_estudo - x_barra) * (salario_hora - y_barra)),
    # Denominador: Somatório de (xi - x_barra)^2
    denominador = sum( (anos_estudo - x_barra) ^2),
    beta_um = numerador / denominador,
    beta_zero = y_barra - (beta_um * x_barra)
    )   
# A tibble: 1 × 6
  y_barra x_barra numerador denominador beta_um beta_zero
    <dbl>   <dbl>     <dbl>       <dbl>   <dbl>     <dbl>
1    20.8    10.9  7725742.    3589605.    2.15     -2.72
Questão 02(b)

Utilize a função ´lm()´ do R.

Resposta 02(b)
reg_lm <- lm(salario_hora ~ anos_estudo, data=pnad)
summary(reg_lm)

Call:
lm(formula = salario_hora ~ anos_estudo, data = pnad)

Residuals:
    Min      1Q  Median      3Q     Max 
  -31.7   -13.7    -6.7     2.9 13718.3 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -2.72231    0.33887  -8.034 9.52e-16 ***
anos_estudo  2.15225    0.02899  74.245  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 54.92 on 204332 degrees of freedom
Multiple R-squared:  0.02627,   Adjusted R-squared:  0.02626 
F-statistic:  5512 on 1 and 204332 DF,  p-value: < 2.2e-16
Questão 02(c)

Compare as estimativas pontuais geradas pelos dois procedimentos, reportando-as em uma tabela discriminando o procedimento correspondente.

Resposta 02(c)
# 1. Estimativa via MQO (Manual/lm)
modelo_lm <- lm(salario_hora ~ anos_estudo, data = pnad)
est_mqo <- coef(modelo_lm)

# 2. Estimativa via GMM
library(gmm)
modelo_gmm <- gmm(salario_hora ~ anos_estudo, x = ~ anos_estudo, data = pnad)
est_gmm <- coef(modelo_gmm)

# Criando a tabela comparativa
tabela_comparativa <- data.frame(
  Procedimento = c("MQO (lm)", "Método dos Momentos (gmm)"),
  Intercepto = c(est_mqo[1], est_gmm[1]),
  Beta_Estudo = c(est_mqo[2], est_gmm[2])
)

print(tabela_comparativa)
               Procedimento Intercepto Beta_Estudo
1                  MQO (lm)  -2.722311    2.152254
2 Método dos Momentos (gmm)  -2.722311    2.152254
Questão 02(d)

Interprete a estimativa pontual para o coeficiente angular como uma medida de sensibilidade do salário horário à educação. O que tal estimativa nos diz quanto ao ganho, em termos de remuneração, de um ano adicional de estudo?

Resposta 02(d)

O coeficiente angular quantifica a relação entre as variáveis, assim a variação média esperado no salário hora para cada unidade adicional de ano de estudo. Em suma, o \(beta_1\) = 2,15 diz que para cada ano adicional de estudo, o salário hora aumenta, em média $2,5, mantendo os outros fatores não observados constantes.

Questão 03

Calcule o coeficiente de determinação (\(R^2\)) para a regressão linear simples do item anterior.

Resposta 03
pnad |> 
  select(salario_hora, anos_estudo) |>
  mutate(
    y_barra = mean(salario_hora),
    x_barra = mean(anos_estudo),
    # Numerador: Somatório de (xi - x_barra) * (yi - y_barra)
    numerador = sum( (anos_estudo - x_barra) * (salario_hora - y_barra)),
    # Denominador: Somatório de (xi - x_barra)^2
    denominador = sum( (anos_estudo - x_barra) ^2),
    beta_um = numerador / denominador,
    beta_zero = y_barra - (beta_um * x_barra),
    y_chapeu = beta_zero + (beta_um * anos_estudo)
    ) |>
  summarise(
    soma_quadrado_total = sum( (salario_hora - mean(salario_hora))^2 ),
    soma_quadrado_residuos = sum( (salario_hora - y_chapeu)^2 ),
    r_quadrado = 1 - ( soma_quadrado_residuos / soma_quadrado_total)
  )
# A tibble: 1 × 3
  soma_quadrado_total soma_quadrado_residuos r_quadrado
                <dbl>                  <dbl>      <dbl>
1          632985915.             616358154.     0.0263

Questão 04

Elabore um gráfico para a média condicional amostral da variável “inflation” (inflação) em relação à variável “emprate” (taxa de emprego). Utilize apenas o ano de 2019 do objeto “pwt”.

Resposta 04

Cálculo númerico

pwt |>
  mutate(faixa_emprego = as.factor(ntile(emprate, 8))) |> # Divide em 5 grupos (quintis)
  filter(!is.na(faixa_emprego) & !is.na(inflation)) |>
  group_by(faixa_emprego) |>
  summarise(
     n = n(),
     soma = sum(inflation),
     media = round(soma / n, 3),
     desvio_padrao = sqrt(sum((inflation - media)^2) / (n - 1)),
     erro_padrao = desvio_padrao / sqrt(n),
     # Margem de erro (Z = 1.96 para 95% de confiança)
     margem_erro = 1.96*erro_padrao,
     limite_inferior = media - margem_erro,
     limite_superior = media + margem_erro
    ) |>
    mutate(across(where(is.numeric), \(x) round(x, 3)))
# A tibble: 8 × 9
  faixa_emprego     n  soma media desvio_padrao erro_padrao margem_erro
  <fct>         <dbl> <dbl> <dbl>         <dbl>       <dbl>       <dbl>
1 1                21 1.70  0.081         0.132       0.029       0.056
2 2                21 0.917 0.044         0.048       0.01        0.02 
3 3                21 0.862 0.041         0.068       0.015       0.029
4 4                21 0.55  0.026         0.026       0.006       0.011
5 5                21 1.19  0.056         0.115       0.025       0.049
6 6                21 3.05  0.145         0.552       0.12        0.236
7 7                20 0.706 0.035         0.046       0.01        0.02 
8 8                20 0.302 0.015         0.016       0.004       0.007
# ℹ 2 more variables: limite_inferior <dbl>, limite_superior <dbl>
media_faixa_emprego
Figure 2: Média Inflation condicional por taxa de emprego.

Questão 05

Estime a seguinte regressão simples: \(inflation = \beta_0 + \beta_1 * emprate\). Faça isso adotando dois procedimentos de estimação:

Método dos Mínimos Quadrados Ordinários (MQO)

# Método dos Mínimos Quadrados Ordinários (MQO)
inflation_reg_lm <- lm(inflation ~ emprate, data=pwt)
summary(inflation_reg_lm)

Call:
lm(formula = inflation ~ emprate, data = pwt)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.09562 -0.04520 -0.03198 -0.01481  2.50051 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  0.09294    0.07482   1.242    0.216
emprate     -0.08662    0.17059  -0.508    0.612

Residual standard error: 0.2086 on 164 degrees of freedom
Multiple R-squared:  0.00157,   Adjusted R-squared:  -0.004518 
F-statistic: 0.2578 on 1 and 164 DF,  p-value: 0.6123

Método dos Momentos (MM)

# Método dos Momentos (MM)
inflation_reg_gmm <- gmm(inflation ~ emprate, x = ~emprate, data=pwt)
summary(inflation_reg_gmm)

Call:
gmm(g = inflation ~ emprate, x = ~emprate, data = pwt)


Method:  twoStep 

Kernel:  Quadratic Spectral

Coefficients:
             Estimate   Std. Error  t value    Pr(>|t|) 
(Intercept)   0.092944   0.035082    2.649337   0.008065
emprate      -0.086622   0.097942   -0.884425   0.376467

J-Test: degrees of freedom is 0 
                J-test                P-value             
Test E(g)=0:    3.27224427980251e-31  *******             
Resposta 05
Questão 05(a)

Utilize a fórmula dos estimadores de mínimos quadrados para o intercepto e o coeficiente angular da regressão linear.

Resposta 05(a)

Intercepto

pwt |> 
  select(inflation, emprate) |>
  summarise(
    y_barra = mean(inflation),
    x_barra = mean(emprate),
    # Numerador: Somatório de (xi - x_barra) * (yi - y_barra)
    numerador = sum( (emprate - x_barra) * (inflation - y_barra)),
    # Denominador: Somatório de (xi - x_barra)^2
    denominador = sum( (emprate - x_barra) ^2),
    beta_um = numerador / denominador
    ) |>
    mutate(across(where(is.numeric), \(x) round(x, 3)))
  y_barra x_barra numerador denominador beta_um
1   0.056   0.428     -0.13       1.496  -0.087

Coeficiente Angular (inclinação)

pwt |> 
  select(inflation, emprate) |>
  summarise(
    y_barra = mean(inflation),
    x_barra = mean(emprate),
    # Numerador: Somatório de (xi - x_barra) * (yi - y_barra)
    numerador = sum( (emprate - x_barra) * (inflation - y_barra)),
    # Denominador: Somatório de (xi - x_barra)^2
    denominador = sum( (emprate - x_barra) ^2),
    beta_um = numerador / denominador,
    beta_zero = y_barra - (beta_um * x_barra)
    ) |>
    mutate(across(where(is.numeric), \(x) round(x, 3)))
  y_barra x_barra numerador denominador beta_um beta_zero
1   0.056   0.428     -0.13       1.496  -0.087     0.093
Questão 05(b)

Utilize a função ´lm()´ do R.

Resposta 05(b)

Método dos Mínimos Quadrados Ordinários (MQO)

# Método dos Mínimos Quadrados Ordinários (MQO)
inflation_reg_lm <- lm(inflation ~ emprate, data=pwt)
summary(inflation_reg_lm)

Call:
lm(formula = inflation ~ emprate, data = pwt)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.09562 -0.04520 -0.03198 -0.01481  2.50051 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  0.09294    0.07482   1.242    0.216
emprate     -0.08662    0.17059  -0.508    0.612

Residual standard error: 0.2086 on 164 degrees of freedom
Multiple R-squared:  0.00157,   Adjusted R-squared:  -0.004518 
F-statistic: 0.2578 on 1 and 164 DF,  p-value: 0.6123
Questão 05(c)

Compare as estimativas pontuais geradas pelos dois procedimentos, reportando-as em uma tabela discriminando o procedimento correspondente.

Resposta 05(c)
# 1. Estimativa via MQO (Manual/lm)
modelo_lm <- lm(inflation ~ emprate, data = pwt)
est_mqo <- coef(modelo_lm)

# 2. Estimativa via GMM
modelo_gmm <- gmm(inflation ~ emprate, x = ~ emprate, data = pwt)
est_gmm <- coef(modelo_gmm)

# Criando a tabela comparativa
tabela_comparativa_pwt <- data.frame(
  Procedimento = c("MQO (lm)", "Método dos Momentos (gmm)"),
  Intercepto = c(est_mqo[1], est_gmm[1]),
  Beta_Estudo = c(est_mqo[2], est_gmm[2])
)

print(tabela_comparativa_pwt)
               Procedimento Intercepto Beta_Estudo
1                  MQO (lm) 0.09294419  -0.0866223
2 Método dos Momentos (gmm) 0.09294419  -0.0866223
Questão 05(d)

Interprete a estimativa pontual para o coeficiente angular como uma medida da severidade do trade-off entre inflação e emprego. O que se pode concluir?

Resposta 05(d)

O modelo sugere que para cada aumento de 1 ponto percentual na taxa de desemprego, a inflação diminui cerca de 0,08 pontos percentuais. A curva de Phillips prevê um trade-off positivo, a saber, quanto maior nível de emprego maior será inflação. No entanto, o modelo apresenta um trade-off negativo. Mas não podemos rejeitar nula porque o p-valor da variável ‘emprate’ é muito alto, mostrando que a variâvel explica muito pouco da variação inflação.

Questão 06

Calcule o coeficiente de determinação (\(R^2\)) para a regressão linear simples do item anterior.

Resposta 06
pwt |> 
  select(inflation, emprate) |>
  mutate(
    y_barra = mean(inflation),
    x_barra = mean(emprate),
    # Numerador: Somatório de (xi - x_barra) * (yi - y_barra)
    numerador = sum( (emprate - x_barra) * (inflation - y_barra)),
    # Denominador: Somatório de (xi - x_barra)^2
    denominador = sum( (emprate - x_barra) ^2),
    beta_um = numerador / denominador,
    beta_zero = y_barra - (beta_um * x_barra),
    y_chapeu = beta_zero + (beta_um * emprate)
    ) |>
  summarise(
    soma_quadrado_total = sum( (inflation - mean(inflation))^2 ),
    soma_quadrado_residuos = sum( (inflation - y_chapeu)^2 ),
    r_quadrado = 1 - ( soma_quadrado_residuos / soma_quadrado_total)
  ) |>
    mutate(across(where(is.numeric), \(x) round(x, 5)))
  soma_quadrado_total soma_quadrado_residuos r_quadrado
1             7.14936                7.13813    0.00157