Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Prazo de Maturidade em Reestruturações de Dívidas Soberanas

0 votos
20 visitas
perguntada Mai 18 em Economia por João Pedro Heringer (21 pontos)  

Trabalho sobre o seguinte artigo:

Dvorkin, Maximiliano, Juan M. Sánchez, Horacio Sapriza and Emircan Yurdagul. 2021. "Sovereign Debt Restructurings." American Economic Journal: Macroeconomics, 13(2):26-77.

Realizado com o R.

Compartilhe

1 Resposta

0 votos
respondida Mai 18 por João Pedro Heringer (21 pontos)  

O artigo que serviu como referência para este trabalho foi o Sovereign Debt Restructurings, publicado no American Economic Review: Macroeconomics, primeiro trimestre de 2021.
Neste artigo, os autores constroem um modelo para estudar a extensão no prazo de maturidade das dívidas públicas de países que precisam fazer uma reestruturação após o Estado decretar moratória.
Os autores tomam como referência a base de dados de Cruces e Trebesch (2013) e Asonuma e Trebesch (2016). Com essas duas bases, temos as datas, os países, as taxas de juros e três medidas de corte de dívida que são as seguintes:

\[H_{FV}=1-\frac{VF(novo)}{VF(anterior)}\]
\[H_{MV}=1-\frac{VP(novo)}{VF(anterior)}\]
\[H_{SZ}=1-\frac{VP(novo)}{VP(anterior)}\]

A primeira leva em consideração a mudança no valor de face. A segunda é a medida mais utilizada pelo mercado pelo fato de a medida de valor de face anterior ser mais fácil de ser resgatada. A terceira medida é proposta por Sturzenegger e Zettelmeyer (2008), por considerarem que a medida de \(H_{MV}\) sobrestima a perda dos credores da dívida pública.
A partir dessas três medidas, os autores resolvem as seguintes equações para chegar a uma estimativa dos prazos novos e antigos:

\[\frac{1-H_{MV}}{1-H_{FV}}=\frac{VP(novo)}{VF(novo)}=\frac{1}{N_1}\sum^{N_1}_{i=1}\frac{1}{(1+r)^i}\]

\[\frac{1-H_{MV}}{1-H_{SZ}}=\frac{VP(anterior)}{VF(anterior)}=\frac{1}{N_0}(dur+\sum^{N_0}_{i=1}\frac{1}{(1+r)^i}) \]

\[Ext=N_1-N_0\]

Onde \(r\) é a taxa de juros e \(dur\) é o tempo de diferença entre a declaração de moratória e a reestruturação de dívida. Na primeira equação, \(N_1\), a única variável desconhecida, é a estimativa para o novo prazo de maturidade. Da mesma forma, pela segunda equação temos o prazo anterior, \(N_0\). Esses dois valores são encontrados de forma numérica pelo método de Newton-Raphson. Entretanto, quando a solução encontrada para alguma das duas equações for negativa, descartamos esse valor e consideramos que o prazo é igual a zero. Os autores propõe essa metodologia para estimar esses valores supondo que o peso de cada parcela é uma fração constante do valor de face. Ou seja, a cada período, um valor \(VF/N\) é pago.
Os autores propõe como prova de que sua metodologia é consistente o exemplo de que, na reestruturação de 2005, o prazo de maturidade da dívida Argentina foi estendido em 26 anos, enquanto a metodologia do artigo estima uma extensão de 27.1 anos para este caso.
Além dessa estimativa, os autores pegam dados de outras variáveis macroeconômicas, como a relação Dívida/PIB, renda per capita, PIB do período anterior etc. Segundo os autores, estes dados são tirados da World Development Indicators, do banco mundial. Entretanto, os dados do banco mundial para a relação Dívida/PIB são muito incompletos, ao ponto de que em 184 observações, 160 eram valores ausentes (NAs). Portanto, essa parte dos dados foi complementada com os dados da International Financial Statistics, do FMI. Além disso, os autores passam o filtro HP nos dados de renda per capital da WDI.
Abaixo, estão dois gráficos em que o eixo horizontal é \(H_{SZ}\) e o eixo vertical é a estimativa para a extensão de maturidade.

A imagem será apresentada aqui.

A imagem será apresentada aqui.

A primeira imagem é feita pela reconstrução das etapas explicadas pelos autores em seu artigo original enquanto a segunda é a imagem original que está no artigo. Como fica visível, as duas imagens são praticamente equivalentes. Ou seja, a tentativa de se reconstruir os passos explicados pelos autores foi bem sucedida.
Quanto as regressões, temos, em primeiro lugar:

A imagem será apresentada aqui.

Em que a variável explicada é o \(H_{SZ}\) e as variáveis explicativas são \(ln(D/PIB)\) e a parte do ciclo gerada pelo filtro HP. Ou seja:

\[H_{SZ}=\beta_0+\beta_1ln(D/PIB)+\beta_2ciclo+u\]

Sendo que a primeira regressão é feita pelos dados organizados neste trabalho, a segunda é conseguida pelos dados fornecidos pelos autores no site da American Economic Association, e a terceira é a regressão informada pelos autores no artigo original. Essa regressão é apresentada em uma passagem em que os autores explicam seus dados. Entretanto, como é visível, nenhuma das regressões chega aos mesmos valores nas estimativas. Assim como os autores, o \(ln(D/PIB)\) é a única variável explicativa que é estatisticamente significativa a 5%. Contudo o sinal da estimativa do ciclo na regressão informada no artigo é diferente da que é conseguida pelos dados fornecidos pelos próprios autores.
Outra regressão feita é:

\[Ext = \beta_0+\beta_1ln(D/PIB)+\beta_2ciclo+\beta_3r+u\]

A imagem será apresentada aqui.

Com a variável explicada sendo a extensão na maturidade estimada e as variáveis explicativas sendo \(ln(D/PIB)\), a parte do ciclo do filtro HP e a taxa de juros. Neste caso, o sinal para a taxa de juros e para o ciclo é negativo enquanto a estimativa para a relação Dívida/PIB é positiva. Entretanto, a única variável que é estatisticamente significativa a 5% é a relação Dívida/PIB.

links:
Artigo: https://www.aeaweb.org/articles?id=10.1257/mac.20190220
Dados das reestruturações: https://sites.google.com/site/christophtrebesch/data
IFS: https://data.imf.org/?sk=388dfa60-1d26-4ade-b505-a05a558d9a42&sId=1479329334655
Dados do Artigo: link

Código:

# Trabalho final de econometria

################### Puxando os pacotes: 

library(dplyr)
library(readxl)
library(tidyverse)
library(WDI)
library(haven)
library(mFilter)
library(countrycode)
library(papeR)
library(lmtest)
library(sandwich)

################### Importando os dados da tabela original de Cruces e Trebesch (2013)


Cruces_Trebesch_Haircuts_2014_update <- read_excel("~/Cruces-Trebesch-Haircuts-2014-update.xlsx", 
                                               skip = 11)


#Algumas linhas precisam ser excluídas: 

Haircuts <- Cruces_Trebesch_Haircuts_2014_update[-c(1,189,190,191),]

# Renomeando algumas variáveis para ficar mais fácil

Haircuts <-  rename(Haircuts, HM =`Market Haircut        HM`, FVR = `Face Value Reduction     (in %)`, HSZ = `Preferred Haircut HSZ`, DebtRestructured = `Debt Restructured   (m US$)`, DiscountRate = `Underlying Discount             Rate`)

#Alterando algumas variáveis para numéricas: 

Haircuts$DebtRestructured <- as.numeric(Haircuts$DebtRestructured)
Haircuts$DiscountRate <- as.numeric(Haircuts$DiscountRate)
Haircuts$HSZ <- as.numeric(Haircuts$HSZ)
Haircuts$HM <- as.numeric(Haircuts$HM)
Haircuts$FVR <- as.numeric(Haircuts$FVR)

# Removendo mês e dia da data

Haircuts$Date <- substr(Haircuts$Date,1,4)

# Achando as Razões para achar o prazo de pagamento para as dívidas: 

Haircuts$pvnfvn <- (1-Haircuts$HM )/(1-Haircuts$FVR)
Haircuts$pvofvo <- (1-Haircuts$HM )/(1-Haircuts$HSZ)

# Problema: raizes das equações

Haircuts$N_new <- 0
  for (i in 1:187) {
  if(!is.na(Haircuts$DiscountRate[i])){
  Haircuts$N_new[i] <- uniroot(function(x){(1/(x*Haircuts$DiscountRate[i]))*(1-1/(1+         
  Haircuts$DiscountRate[i])^x) - 
  Haircuts$pvnfvn[i]},c(-100,100))$root
} else (Haircuts$N_new[i] <- NA)
}

# Em alguns casos a raiz é negativa, então trocamos esses valores para 0

Haircuts$N_new[Haircuts$N_new < 0] <- 0

# Baixando tabela com o início dos defaults

DEFAULT_DATABASE <- read_excel("~/Asonuma_Trebesch_DEFAULT_DATABASE.xlsx", 
                                            sheet = "DATASET Defaults & Restruct.", 
                                            skip = 5)

DEFAULT_DATABASE$`Start of default or restructuring process: default or     announcement` <- substr(DEFAULT_DATABASE$`Start of default or restructuring process:     default or announcement`,1,4)
DEFAULT_DATABASE$`End of restructuring: completion of exchange` <-     substr(DEFAULT_DATABASE$`End of restructuring: completion of exchange`,1,4)

DEFAULT_DATABASE <- rename(DEFAULT_DATABASE, Case = `Case nr in     Cruces/Trebesch database               (2014 update)`)

DEFAULT_DATABASE$`Start of default or restructuring process: default or     announcement` <- as.numeric(DEFAULT_DATABASE$`Start of default or restructuring     process: default or announcement`)
DEFAULT_DATABASE$`End of restructuring: completion of exchange` <-     as.numeric(DEFAULT_DATABASE$`End of restructuring: completion of exchange`)

DEFAULT_DATABASE$dur <- DEFAULT_DATABASE$`End of restructuring: completion of     exchange`- DEFAULT_DATABASE$`Start of default or restructuring process: default or     announcement`

DEFAULT_DATABASE2 <- data.frame(Case = DEFAULT_DATABASE$Case, dur =         DEFAULT_DATABASE$dur)

# Colocando tempo em calote no meu dataframe principal: 

Haircuts <- merge(DEFAULT_DATABASE2,Haircuts, by.x = "Case")

# Achando o prazo de maturidade anterior: 

Haircuts$No <- 0
for (i in 1:184){
  if(!is.na(Haircuts$DiscountRate[i])){
  Haircuts$No[i] <- uniroot(function(x){(1/x)*(Haircuts$dur[i]+
                                                (1/Haircuts$DiscountRate[i])*
                                                (1-(1/(1+Haircuts$DiscountRate[i]))^(x - Haircuts$dur[i]))) - 
                                                Haircuts$pvofvo[i]}, c(-100,100))$root
  } else (Haircuts$No[i] <- NA)
}

# o prazo antigo de maturidade é:  

Haircuts$N_old <- Haircuts$No - Haircuts$dur

Haircuts$N_old[Haircuts$N_old < 0] <- 0

# A extensão de maturidade é, então: 

Haircuts$Ext <- Haircuts$N_new - Haircuts$N_old

# Baixando os dados da WDI (iso, ano, país , GDP per capita, consumo per capita): 

wdi <- WDI(country = "all", indicator = c("NY.GDP.PCAP.KD","NE.CON.PRVT.PC.KD",
                                                 "BN.CAB.XOKA.GD.ZS","DT.DOD.DECT.GN.ZS","GC.DOD.TOTL.GD.ZS"),
              start = 1960, end = 2020, extra = T, cache = NULL) 

wdi <- select(wdi, iso3c, year, country, NY.GDP.PCAP.KD, NE.CON.PRVT.PC.KD,
          BN.CAB.XOKA.GD.ZS, DT.DOD.DECT.GN.ZS, GC.DOD.TOTL.GD.ZS)


# Pegando somente os países que reestruturaram sua dívida: 

wdi <- filter(wdi, iso3c %in% c(unique(Haircuts$Code)))

# Colocando pela ordem dos anos: 

wdi <-  arrange(wdi, iso3c, year)

Haircuts <- arrange(Haircuts, Code, Date)

wdi <- rename(wdi, Code = iso3c, Date = year)

# Juntando os dados da wdi com a base principal: 

Haircuts <-  merge(Haircuts, wdi, by = c("Code","Date"), all.x = T)

 # puxando dados do FMI 

Global_Debt_Database <- read_dta("~/Global Debt Database.dta")


# Mudando os códigos dos países

Global_Debt_Database$ifscode <- countrycode(Global_Debt_Database$ifscode, "imf",     "iso3c")

Global_Debt_Database <-  filter(Global_Debt_Database, ifscode %in%     c(unique(Haircuts$Code)))

Global_Debt_Database <- rename(Global_Debt_Database, Code = ifscode, Date = year)

Haircuts <- merge(Haircuts, Global_Debt_Database, by = c("Code","Date"), all.x = T)

# passando o  filtro HP

wdi2 <- wdi

wdi2$cycle <- c(0)
wdi2$trend <- c(0)

# Filtro HP nos dados da WDI: 

for(i in unique(c(wdi2$Code))){

HP <- hpfilter(!is.na(filter(wdi2, Code == i )$NY.GDP.PCAP.KD), freq = 6,25, type = "lambda")

wdi2$cycle[wdi$Code == i] <- HP$cycle
wdi2$trend[wdi$Code == i] <- HP$trend

}

wdi2 <- select(wdi2, Code, Date, cycle, trend)

# Selecionando as variáveis mais interessantes:

Haircuts <-  select(Haircuts, Code, Date,`Country / Case`, DebtRestructured,
                HSZ, DiscountRate, HM, FVR, Ext, NY.GDP.PCAP.KD,
                NE.CON.PRVT.PC.KD, BN.CAB.XOKA.GD.ZS, 
                DT.DOD.DECT.GN.ZS, GC.DOD.TOTL.GD.ZS,
                gg, cg)

# Juntando no dataframe principal: 

Haircuts <- merge(Haircuts, wdi2, by = c("Code","Date"), all.x = T)

# Renomeando para ficar melhor: 

Haircuts <- rename(Haircuts, "GDP/L" = NY.GDP.PCAP.KD, 
               "C/L" = NE.CON.PRVT.PC.KD,
               "CC/GDP" = BN.CAB.XOKA.GD.ZS,
               "ED/GDP" = DT.DOD.DECT.GN.ZS, 
               "D/GDP" = GC.DOD.TOTL.GD.ZS)

# Colocando legendas no dataframe: 

label(Haircuts$Code)              <- "ISO 3"
label(Haircuts$Date)              <- "Ano"
label(Haircuts$`Country / Case`)  <- "País"
label(Haircuts$DebtRestructured)  <- "Dívida Reestruturada em milhões US$"
label(Haircuts$HSZ)               <- "% de Corte em valor presente"
label(Haircuts$DiscountRate)      <- "Taxa de Desconto"
label(Haircuts$HM)                <- "Corte em Valor de Mercado"
label(Haircuts$FVR)               <- "% de redução de valor de Face"
label(Haircuts$Ext)               <- "Extensão da Maturidade"
label(Haircuts$`GDP/L`)           <- "PIB per capita (US$ 2010)"
label(Haircuts$`C/L`)             <- "Consumo per capita (US$ 2010)"
label(Haircuts$`CC/GDP`)          <- "Saldo de Conta Corrente % do PIB"
label(Haircuts$`ED/GDP`)          <- "Dívida Externa em % RNB"
label(Haircuts$`D/GDP`)           <- "Dívida governo central % PIB (WDI)"
label(Haircuts$gg)                <- "Dívida Governo Geral % PIB (FMI)"
label(Haircuts$cg)                <- "Dívida Governo Central % PIB (FMI)"
label(Haircuts$cycle)             <- "Ciclo"
label(Haircuts$trend)             <- "Tendência"

# Comparando as regressões dessa base com a base do artigo:
# Dados do artigo:

data_for_histograms <- read_dta("~/data_for_histograms.dta")

# Modelo com dados do código:

Haircuts$ln_cg <- log(Haircuts$cg)

modelo1 <- lm(HSZ ~ ln_cg + cycle + Ext , data = Haircuts)

coeftest(modelo1,vcov = vcovHC(modelo1, type = "HC0"))

coef1 <- as.data.frame(summary(modelo1)$coefficients)

rownames(coef1) <- c("Intercepto","ln(D/PIB)","Ciclo")
colnames(coef1) <- c("Estimativa","Desvio padrão","Estatística t","p-valor")

# Modelo com os dados do artigo: 

modelo2 <- lm(haircutsz ~ l_debtGDP + cycle,data = data_for_histograms)

coef2 <- as.data.frame(summary(modelo2)$coefficients)

rownames(coef2) <- c("Intercepto","ln(D/PIB)","Ciclo")
colnames(coef2) <- c("Estimativa","Desvio padrão","Estatística t","p-valor")

# Fazendo o Gráfico: 

Haircuts$`Período` <- c(0)

Haircuts$`Período`[as.numeric(Haircuts$Date) >= 1990] <- "A partir de 1990"
Haircuts$`Período`[as.numeric(Haircuts$Date) < 1990] <- "Antes de 1990"

ggplot(data = as_tibble(Haircuts)) +
  geom_point(mapping = aes(x = HSZ, y = Ext, color = `Período`, shape = `Período`)) +
  ggtitle("Reestruturação x Maturidade") +
  labs(x = "Corte de Sturzenegger e Zettelmeyer", y = "Extensão de Maturidade")

# Estimando para a Ext

mod <- lm(Ext ~ ln_cg + cycle + DiscountRate,data = Haircuts)

coef3 <- coeftest(mod, vcov = vcovHC(mod, type = "HC0"))

coef3 <- as.data.frame(t(rbind(coef3[,1],coef3[,2],coef3[,3],coef3[,4])))

colnames(coef3) <- c("Estimativa","Desvio padrão","Estatística t","p-valor")
rownames(coef3) <- c("Intercepto","ln(D/PIB)","Ciclo","Tx %")

summary(mod)
...