options(scipen = 9999)
options(max.print = 100000)Modelo Café Arábica em MQO
UNIVERSIDADE FEDERAL DA PARAÍBA
PROFESSOR: Sinézio Fernandes Maia
Atividade em Mínimos Quadrados Ordinários (MQO)
A atividade abaixo se refere a busca de um modelo robusto e não tendencioso em MQO, para encontrar a quantidade ótima de contratos de hedge para o mercado futuro de soja.
Configurações iniciais
Para evitar notações científicas:
Pacotes útilizados:
library(readxl)
library(tidyverse)
library(deflateBR)
library(dynlm)
library(fBasics)
library(lmtest)
library(whitestrap)
library(FinTS)Base de dados
dados <- read_excel("dados.xlsx")Plotagem dos dados
ggplot(dados, aes(x = Data)) +
geom_line(aes(y = spot, color = "Spot")) +
geom_line(aes(y = Futuro, color = "Futuro")) +
labs(title = "soja",
x = "Data",
y = "Preço",
color = "Variáveis") +
scale_color_manual(values = c("Spot" = "blue", "Futuro" = "red")) +
theme_minimal()Transformando em Séries Temporais e Deflacionando pelo pacote ‘deflateBR’
# Transformando em séries temporais
spot <- ts(dados$spot, start= c(2013,12), end=c(2024,03), frequency = 12)
futuro <- ts(dados$Futuro, start= c(2013,12), end=c(2024,03), frequency = 12)
# Definindo o tempo
times <- seq(as.Date("2013/12/1"), by = "month", length.out = 124)
# Deflacionando
spotR <- deflate(spot, nominal_dates = times, real_date = "02/2024", index = "ipca")
futuroR <- deflate(futuro, nominal_dates = times, real_date = "02/2024", index = "ipca")Regressão sem tratamento
regress1 <- lm(spot ~futuro);regress1
Call:
lm(formula = spot ~ futuro)
Coefficients:
(Intercept) futuro
14.2636 0.5717
Regress2 <- lm(spotR~futuroR); Regress2
Call:
lm(formula = spotR ~ futuroR)
Coefficients:
(Intercept) futuroR
12.4904 0.7588
Plotando os Gráficos de Preço Spot e Futuro
par(mfrow = c(1,2))
plot(spotR, main = "Soja - Spot"); plot(futuroR, main = "Soja - Futuro")Tranformando dem logaritmo
O objetivo é corrigir a heterocedásticidade
lspot <- log(spotR)
lfuturo <- log(futuroR)
plot(lspot, main = "Soja - log SPOT"); plot(lfuturo, main = "Soja - log FUTURO")Fazendo a regressão em diferença
Para corrigir os problemas causados pela autocorrelação nós fazemos a regressão em diferença
lag <- stats::lag
Regressao <- dynlm(diff(lspot)~diff(lag(lfuturo)))
Regressao
Time series regression with "ts" data:
Start = 2014(1), End = 2024(2)
Call:
dynlm(formula = diff(lspot) ~ diff(lag(lfuturo)))
Coefficients:
(Intercept) diff(lag(lfuturo))
-0.004209 0.236251
Testes para resíduos
par(mfrow = c(1,1))
residuos <- residuals(Regressao); head(residuos) Jan 2014 Feb 2014 Mar 2014 Apr 2014 May 2014 Jun 2014
-0.05235149 0.06932234 0.13664249 -0.01047348 -0.02810474 0.02913017
plot(residuos, type="l", col="red")
abline(h=0, col="blue", lw=3)par(mfrow=c(1,2))
hist(residuos, main="", col="cadetblue", prob=T, xlab = names(residuos)[1], breaks = 30)
curve(expr=dnorm(x,mean=mean(residuos),sd=sd(residuos)),col="red",add= TRUE, lwd=2)
qqnorm(residuos, col="blue")
qqline(residuos, col="red")Teste para a presença de normalidade
Teste de Jarque Bera:
jarqueberaTest(residuos)
Title:
Jarque - Bera Normalality Test
Test Results:
STATISTIC:
X-squared: 2.3348
P VALUE:
Asymptotic p Value: 0.3112
Teste de Shapiro Wilk:
shapiro.test(residuos)
Shapiro-Wilk normality test
data: residuos
W = 0.99092, p-value = 0.6066
Testes para presença de heteroscedasticidade
Teste de Goldfeld-Quandt:
length(residuos); length(residuos)*0.15[1] 122
[1] 18.3
gqtest(Regressao, fraction = 18.3, alternative = "greater")
Goldfeld-Quandt test
data: Regressao
GQ = 1.302, df1 = 50, df2 = 49, p-value = 0.1785
alternative hypothesis: variance increases from segment 1 to 2
Teste de Breusch-Pagan-Godfrey:
bptest(Regressao)
studentized Breusch-Pagan test
data: Regressao
BP = 0.6316, df = 1, p-value = 0.4268
Teste de White:
library(whitestrap)
white_test(Regressao)White's test results
Null hypothesis: Homoskedasticity of the residuals
Alternative hypothesis: Heteroskedasticity of the residuals
Test Statistic: 0.7
P-value: 0.706166
Testes de autocorrelação
Teste de Durbin Watson:
dwtest(Regressao)
Durbin-Watson test
data: Regressao
DW = 1.2543, p-value = 0.00001532
alternative hypothesis: true autocorrelation is greater than 0
Teste de Breusch-Godfrey (1978):
bgtest(Regressao, order = 4)
Breusch-Godfrey test for serial correlation of order up to 4
data: Regressao
LM test = 16.522, df = 4, p-value = 0.002393
Teste de Arch:
ArchTest(residuos, lags = 4)
ARCH LM-test; Null hypothesis: no ARCH effects
data: residuos
Chi-squared = 8.8105, df = 4, p-value = 0.06601
conclusão
Resolvendo os problemas estatísticos de falta de normalidade e heterocesticidade temos que, para cada 1US$ em futuro, spot varia em 23,6251%.