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
Lista 2
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
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”).
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 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:
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 *******
Utilize a fórmula dos estimadores de mínimos quadrados para o intercepto e o coeficiente angular da regressão linear.
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
Utilize a função ´lm()´ do R.
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
Compare as estimativas pontuais geradas pelos dois procedimentos, reportando-as em uma tabela discriminando o procedimento correspondente.
# 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
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?
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.
Calcule o coeficiente de determinação (\(R^2\)) para a regressão linear simples do item anterior.
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
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”.
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_empregoEstime 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 *******
Utilize a fórmula dos estimadores de mínimos quadrados para o intercepto e o coeficiente angular da regressão linear.
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
Utilize a função ´lm()´ do R.
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
Compare as estimativas pontuais geradas pelos dois procedimentos, reportando-as em uma tabela discriminando o procedimento correspondente.
# 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
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?
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.
Calcule o coeficiente de determinação (\(R^2\)) para a regressão linear simples do item anterior.
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