Created
November 27, 2024 15:45
-
-
Save jrhumberto/75b164713ed897767a283ff944577143 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# MPE UFC 2024/2 | |
# Autor: Humberto Bezerra de Meneses Júnior | |
# Data: 27/11/2024 | |
# -------------------------------------------------------------------- | |
# Definir o diretório de trabalho - no R é assim | |
# setwd("C:/Users/<CAMINHO DO ARQUIVO>/dados_ceara.xlsx") | |
# getwd() # Verificar o diretório atual | |
# Carregar as bibliotecas necessárias | |
library(readxl) # Para importar arquivos Excel | |
library(plm) # Para métodos de dados em painel | |
library(lmtest) # Para testes de modelos (ex.: teste de Hausman) | |
library(dplyr) # Para manipulação de dados | |
# Importar o arquivo Excel | |
dados <- read_excel("dados_ceara.xlsx", sheet = "Painel_Stata") | |
# Definir a estrutura dos dados em painel | |
# `id` e `t` são os identificadores do painel; substitua pelos nomes reais das suas variáveis. | |
pdata <- pdata.frame(dados, index = c("id", "t")) | |
# Regressão Pooled | |
pooled_model <- lm(lnpibpc ~ lag(lnpibpc, 1) + lncfpc_mwh + lnch_fpc + lnpartcomer + partcomer_dmetrop, data = pdata) | |
summary(pooled_model) | |
# LSDV (Least Squares Dummy Variable) | |
lsdv_model <- lm(lnpibpc ~ lag(lnpibpc, 1) + lncfpc_mwh + lnch_fpc + lnpartcomer + partcomer_dmetrop + factor(id), data = pdata) | |
summary(lsdv_model) | |
# Modelo de Efeitos Fixos (FE) | |
fe_model <- plm(lnpibpc ~ lag(lnpibpc, 1) + lncfpc_mwh + lnch_fpc + lnpartcomer + partcomer_dmetrop, | |
data = pdata, model = "within") | |
summary(fe_model) | |
# Modelo de Primeira Diferença (FD) | |
# Usar o `dplyr` para criar variáveis em primeira diferença | |
# Calcular as primeiras diferenças e preencher com NA no início de cada grupo para manter tamanho do vetor | |
pdata <- pdata %>% | |
group_by(id) %>% | |
mutate( | |
d_lnpibpc = c(NA, diff(lnpibpc)), | |
d_L1_lnpibpc = c(NA, diff(lag(lnpibpc, 1))), | |
d_lncfpc_mwh = c(NA, diff(lncfpc_mwh)), | |
d_lnch_fpc = c(NA, diff(lnch_fpc)), | |
d_lnpartcomer = c(NA, diff(lnpartcomer)), | |
d_partcomer_dmetrop = c(NA, diff(partcomer_dmetrop)) | |
) %>% | |
ungroup() | |
fd_model <- lm(d_lnpibpc ~ d_L1_lnpibpc + d_lncfpc_mwh + d_lnch_fpc + d_lnpartcomer + d_partcomer_dmetrop, | |
data = pdata) | |
summary(fd_model) | |
# Identificar possíveis problemas com os índices | |
any_duplicated_rows <- dados %>% | |
group_by(id, t) %>% | |
filter(n() > 1) %>% | |
nrow() > 0 | |
if (!any_duplicated_rows) { | |
print("Nenhum dado duplicado foi encontrado no índice do painel.") | |
} else { | |
duplicated_rows <- dados %>% group_by(id, t) %>% filter(n() > 1) | |
print(duplicated_rows) | |
} | |
# Redefinir o painel de dados com indices em (id e t) e verifica as dimensões de resultado. | |
# Este e IF anterior são passos apenas de verificação e não necessários. Serve comop auto estudo. | |
pdata <- pdata.frame(dados, index = c("id", "t"), drop.index = TRUE, row.names = FALSE) | |
pdim(pdata) | |
# Modelo de Efeitos Aleatórios (RE) | |
re_model <- plm(lnpibpc ~ lag(lnpibpc, 1) + lncfpc_mwh + lnch_fpc + lnpartcomer + partcomer_dmetrop, | |
data = pdata, model = "random") | |
summary(re_model) | |
# Teste de Hausman | |
# Comparação entre os modelos de efeitos fixos e aleatórios | |
phtest(fe_model, re_model) | |
# ERRO! Modelo de Efeitos Fixos de Dois Fatores (TWFE) | |
# método de estimação de efeitos fixos já subtrai automaticamente as médias dentro dos grupos, | |
# tornando desnecessária (e conflitante) a adição manual de fatores temporais ou individuais na fórmula. | |
# twfe_model <- plm(lnpibpc ~ lag(lnpibpc, 1) + lncfpc_mwh + lnch_fpc + lnpartcomer + partcomer_dmetrop + factor(t), | |
# data = pdata, model = "within") | |
# summary(twfe_model) | |
# VALIDO 1! Modelo de Efeitos Fixos de Dois Fatores (TWFE) | |
# 'Twoways' indica ao pacote que deve considerar efeitos fixos tanto para unidades (id) quanto para períodos (t) | |
twfe_model <- plm(lnpibpc ~ lag(lnpibpc, 1) + lncfpc_mwh + lnch_fpc + lnpartcomer + partcomer_dmetrop, | |
data = pdata, model = "within", effect = "twoways") | |
summary(twfe_model) | |
# VALIDO 2! Modelo de Efeitos Fixos de Dois Fatores (TWFE) | |
# Alternativamente, tranforma e adiciona manualmente as dummies temporais(t) ao modelo! | |
# pdata$t <- as.factor(pdata$t) # Transformar 't' em um fator, assim poderá ser usado na regressão | |
# twfe_model_manual <- plm(lnpibpc ~ lag(lnpibpc, 1) + lncfpc_mwh + lnch_fpc + lnpartcomer + | |
# partcomer_dmetrop + t, | |
# data = pdata, model = "within") | |
# summary(twfe_model_manual) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment