Escolar Documentos
Profissional Documentos
Cultura Documentos
# Modelos
ARIMA
# Assimetria e
library(fGarch)
# Modelos de heterocedasticidade
library(tseries)
# Testes de RU
library(rugarch)
library(rmgarch)
library(MTS)
library(FitAR)
# Modelos
VARMA
# Ajuste de modelos AR. til para plotar Estatsticas de LjungBox vs Lags
library(evir)
library(urca)
# Outras bibliotecas
Curtose
interessantes:
library(astsa)
library(finTS)
# Tsay, 2005
library(arfima)
library(GECStableGarch) #
library(gogarch)
library(gss)
library(evd)
library(fExtremes)
library(ismev)
library(ccgarch)
library(fArma)
library(fBasics)
library(fExtremes)
library(fUnitRoots)
library(tsDyn)
livrary(vars)
=t t
:
1
Quantis observados de X:
quantile(x, ...)
1.4 Grficos
Para imprimir grficos em um painel com a linhas e b colunas, com a e b inteiros positivos:
par(mfrow=c(a,b))
Grficos da srie:
ts.plot(..., gpars = list()) # Grfico da Serie hist(x, ...)
# Histograma da Srie
O mesmo vale se desejar imprimir a curva de outras distribuies, substibuindo dnorm pela distribuio desejadas
e modificando os parmetros da distribuio de forma conveniente.
Grfico Quantil-Quantil para distribuio Normal:
qqnorm(y, ylim, main = "Normal QQ Plot",
xlab = "Theoretical Quantiles", ylab = "Sample Quantiles", plot.it
= TRUE, datax = FALSE, ...)
Esta funo imprime graficos QQ no necessariamente Normais. Neste exemplo, temos um grafico QQ para
um distribuio t com 5 graus de liberdade:
qqplot(y, rt(300, df = 5))
1.5 Testes:
1.5.1 Teste t:
t.test(x, y = NULL,
alternative = c("two.sided", "less", "greater"), mu =
0, paired = FALSE, var.equal = FALSE, conf.level =
0.95, ...)
library(FitAR)
#
res<rnorm(1000, mean=0,sd=1)
LBQPlot(res,15)
Utilizando
library
`tseries`:
jarque.bera.test(x)
#
Teste de DickeyFuller
# 'ct' :
Teste de DickeyFuller
Aumentado
,
Aumentado
,
co
m
co
m
Alternativamente, possvel utilizar as funes arma do pacote tseries , as funes do pacote astsa ou do pacote
tseries . grande a quantidade de pacotes que tem os algoritmos para modelos ARIMA implementados.
1.6.2 Modelo
SARIMA p( d, q,
) P( D, Q, s)
Em method , se escolhe o mtodo de estimao via Max. Verossimilhana ou Mnimos quadrados ordinrios;
fixed um vetor que contm NA na posio dos pmetros a serem estimados. Por exemplo, se quisermos estimar um
ARMA(p,q), com constante, teremos p+q+1 coeficientes a serem estimados e, consequentemente fixed ser um vetor com
p+q+1 posies, nas quais as p primeiras sero referentes aos coeficientes da parte AR, as posies p+1 at p+q sero
referentes parte MA e a posio p+q+1 ser referente constante. Para ilustrar, se quisermos um
2t
2 e
1t
deve ser fixed=c(NA,0,NA,0,NA,NA,NA) . Para ficar mais claro, pode-se declarar: fixed=c(c(NA,0,NA),c(0,NA,NA),NA) .
3
(1 ) (
B X
3
) = (1 )
Alternativamente, pode-se utilizar a funo declarada a seguir. Veja a explicao sobre a estrutura do parmetro
coefs na declarao da funo.
Fit_Arima<function(formula,data=NULL,order,
coefs=NULL, include.mean=TRUE,...){
#Para definir os elementos 1a1 que sero estimados no modelo, defina: #O
parametro coefs uma lista com dois argumentos:
# $ar : vetor contendo os coefs da parte AR que devem entrar no modelo
# $ma : vetor contendo os coefs da parte MA que devem entrar no modelo
# Por exemplo, se quisermos um modelo Y_t = a_5 Y_{t5} + a_9 Y_{t9} b_2 e_{t2} b_4 e{t_4}
# coefs dever ser definido por: coefs = list(ar=c(5,9),ma=c(2,4))
# Montando a estrutura do argumento 'fixed' para ser passado para a funcao 'arima'
fixed=NULL
if(!is.null(coefs)){
fixed<rep(0,times=sum(order,include.mean))
if(include.mean==TRUE)
{ fixed[c(coefs$ar,order[1]+coefs$ma,length(fixed))]<NA
}
else
{ fixed[c(coefs$ar,order[1]+coefs$ma)]<NA
}
}
fit<armaFit(as.formula(formula), data=data, fixed=fixed, include.mean=include.mean,...)
return(fit)
}
#Ajustando o
modelo
return(fit)
}
# Se o parametro `ccoefs` no for passado, entao ajusto o modelo completo. fit<
arima(x,order=order)
return(fit)
}
: Erros normais
: Erros tstudent
# 'ged'
: Dists
de Erros Generalizados
fGarch
O modelo TGARCH um caso especfico do modelo APARCH considerando delta=1 (Laurent,2004). Utilizamos o
pacote fGarch para ajustar um modelo APARCH(1,1), =1, que equivalente a um TGARCH(1,1):
require(fGarch)
fit_TGARCH<garchFit(formula = ~ arma(p,q)+aparch(1, 1), data = x,
cond.dist = c("std"),include.mean=TRUE,
include.delta=TRUE,delta=1)
1.6.9 Previses
Tanto para os modelos ARMA quanto para os modelos da famlia GARCH apresentados aqui, a sintaxe para se
obter previses :
predict(fit,n.ahead=h)
rt a srie de logretornos
se long == TRUE, entao estamos no caso de uma posicao comprada. Se long == FALSE, entao a posicao ser
considerada vendida
#
'alpha' a probabilidade fixada da distribuio Normal padrao Lembrete: o RiskMetrics supe erros no
rmais.
#
Se lambda == NULL, entao o programa executa a rotina para todos os valores em range.optim=seq(0.9,1,0.0
01)
Se lambda == NULL e plot == TRUE, entao o programa imprime a soma de quadrado dos resduos para os lamb da
em range.optim
# Se long=T, entao estou em uma posicao comprada e o VaR definido na cauda inferior, i.e., lower.tail=T.
# Se long=F, entao o VaR calculado na cauda superior e lower.tail = F.
Z=qnorm(0.05,lower.tail=long)
r2t<rt^2
T=length(r2t)
SQR<numeric()
VaR<numeric()
sigma2hat<
numeric()
sigma2hat[1]<r2t[1]
if(!is.null(lambda)){ # Entao nao ira para a otimizacao de lambda for(t in
2:T){
sigma2hat[t]<sigma2hat[t1]*lambda+(1lambda)*r2t[t1]
#print(paste("hello 24",t))
}
lambda_ = lambda S2t1<
sigma2hat[T]*lambda+(1lambda)*r2t[T] VaR<
sqrt(S2t1*k)*Z SQR<sum((sigma2hat
r2t)^2,na.rm = TRUE)
}
else { if(!is.null(range.optim)){
for( i in 1: length(range.optim)){
tmp<RMVaR(rt, lambda = range.optim[i], k = k, long = long, alpha =alpha)
VaR[i]<tmp[[1]]
SQR[i]<tmp[[2]]
}
if(plot==TRUE){
plot(range.optim,SQR, type="l", col="darkblue",lwd=2, main="RiskMetrics\n Sum of Squared Residuals",xl
ab="lambda",ylab="SQR")
abline(h=min(SQR),v=range.optim[SQR==min(SQR)],lty=2,col="gray")
}
}
else {
return("Error! You must specify 'lambda' or 'range.optim' ")
}
lambda=range.optim[SQR==min(S
QR)] lambda_=range.optim
print(paste("RiskMetrics The Minimum SQR is: ",round(min(SQR),4)," at lambda =",lambda))
}
return(list(VaR=VaR,SQR=SQR,lambda=lambda_))
}
load("VaR.RData")
RMVaR(r_ibov,long=F,k=30) #Clculo do VaR para periodo de 30 dias com o lambda padro, sugerido pelo RiskMetri cs,
i.e., lambda=0.94
$VaR
[1] 0.1962522
#
#
$SQR
[1] 0.01421295
#
#
$lambda
[1] 0.94
$VaR
[1] 0.2004856
#
#
$SQR
[1] 0.01417891
#
#
$lambda
[1] 0.88
0.0142
at lambda = 0.901"
qtEmpirico<function(x,p,long=TRUE,plot=T,nbreaks=30,print=TRUE,title="Empirical VaR")
{ dnst<density(x)
qt<quantile(x,p*long+(1p)*!long)
if(plot==T){
hist(x,breaks=nbreaks,col="lightgrey",border="white",freq=F,
ylim=c(0,max(dnst$y)),xlim=c(min(x),max(x)),main=title)
par(new=T)
if(long != TRUE){ ### Posicao Vendida
plot(dnst$x[dnst$x>qt],
dnst$y[dnst$x>qt],type="h",
ylim=c(0,max(dnst$y)),xlim=c(min(x),max(x)),
xaxt="n",yaxt="n",lwd=1,col="blue",ylab="",xlab="",main="")
}
else{ ### Posicao
comprada
plot(dnst$x[dnst$x<qt],
dnst$y[dnst$x<qt],type="h",
ylim=c(0,max(dnst$y)),xlim=c(min(x),max(x)),
xaxt="n",yaxt="n",lwd=0,col="blue",ylab="",xlab="",main="")
}
par(new=T)
plot(dnst,xaxt="n",yaxt="n",
ylim=c(0,max(dnst$y)),xlim=c(min(x),max(x)),
lwd=1,col="darkblue",ylab="",xlab="",main="")
}
if(print==TRUE)
{ print(paste0("Probability: ",p))
print(paste0("Position long?: ",long))
print(paste0("Empirical Quantile: ",round(qt,5)))
}
return(qt)
}
qtEmpirico(rnorm(500),0.05,long=T)
#
#
5%
1.756889
= n
1 (nlog (1 p ))n ,n 0
=n nlog (nlog (1 p )),n = 0
V aR k( ) =k V aR
V aR
Pode-se ainda utilizar de forma adaptada a funo qtEmpirico(.) apresentada anteriormente para se calcular o VaR
via a distribuio de valores extremos estimada aqui.
Se, level=F , ento ccm imprime somente a representao pictrica, sem os valores das matrizes.
1.8.3.5 VARMA(,p,q)
VARMA(x,p=p,q=q,include.mean=T)
VARs(x, p=3,include.mean=TRUE,lags=c(1,3))
1.8.3.7 Detalhes:
Em todos os 3 modelos acima, include.mean=T adiciona a constante no modelo. Se include.mean=F , ento o
modelo estimado no considerar a constante;
fixed um vetor com a mesma estrutura daquela apresentada para os modelos do pacote fArma , isto , ele deve
ser do tamanho do nmero de parametros a serem estimados e deve conter NA nas posies dos coeficientes de
interesse e zero nos que se deseja excluir.
Para os comandos VARs e VMAs , possivel omitir alguns coeficientes, como tinhamos no caso dos modelos
ARMA incompletos. Neste caso, coefs um vetor com as posies que se tem interesse que sejam ajustadas,
e.g., se
queremos um VAR(3) sem o coeficiente de Xt 2, executamos:
1.9 Co-integrao
Os testes de co-integrao desta seo sero realizados com o pacote urca do R.
cointegrao.
Defina demean =constant para considerar as sries do modelo com constante (drift). Em outras palavras, utilize esta opo
se as sries envolvidas possurem mdia constante diferente de zero. A opo demean =trend considera o caso com sries
com tendncia e drift e o caso demean =none contempla a situao de sries ambas sem tendncia e drift. lag a opo
que define a ordem mxima do modelo VAR ajustado. Se lag='short' ento a ordem mxima do VAR
T
0.25
0.25
ajustado ser
[4(100 )
comprimento a srie.
A forma padro da funo
[12(100 )
, em que T indica o
ca.po utiliza a estatstica Pu (Veja Philips e Ouliaris, 1990) para realizar o teste. Desta
forma, o teste rejeita H: As sries no so co-integradas para valores grandes da estatistica Pu .
Exemplo(Morettin, 2013):
t1
X
= 2
X t2
X t3
T
ut
X
t2
+ 3
u
t3
+t
=X 2,t 1 +vt
=X 3,t 1 +wt
=(1, 2 , 3 ) = (1, 0.5,0.5)
=0.75ut 1 +t
# Simulando o sistema
beta=c(1,0.5,0.5)
u<arima.sim(n = 250, list(ar = c(0.75),ma=NULL), sd = 0.5) v<
rnorm(n=250, mean=0, sd=0.5)
w<rnorm(n=250, mean=0, sd=0.5)
X2<numeric()
X3<numeric()
for(t in 1:250){
if (t==1) {
X2[t] = 0 + v[t] # Inicializando com X2[0]=0
X3[t] = 0 + w[t] # Inicializando com X3[0]=0
}
else {
X2[t] = X2[t1] + v[t]
X3[t] = X3[t1] + w[t]
}
}
X1= beta[2]*X2beta[3]*X3+u # Relao de cointegrao
X<cbind(X1,X2,X3) # Cria a matriz de dados
library(urca)
cointest_X<ca.po(X, demean="constant") # Teste de P&O para o caso com constante
summary(cointest_X)
##
#
########################################
########################################
Test of type Pu
Call:
#
#
##
## Residuals:
##
Min
1Q
## 2.03547 0.48997
Median
3Q
Max
##
Coefficients:
#
## (Intercept)
# z[, 1]X2
#
# z[, 1]X3
#
0.17036
0.40363
0.05546
0.02751
3.072 0.00237 **
14.673 < 2e16 ***
0.46881
0.00958
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
Value of teststatistic is: 103.2199
#
#
#
#
#
#
#
10pct
5pct
1pct
O valor da estatstica 103.2199274 > 53.8731. Logo, rejeitamos H: No h co-integrao ao nvel 1%. O vetor de
co-integrao : (1, -0.4036312, -0.4688126) e a estimativa da constante 0.1703546.
necessrio ainda avaliar os resduos do modelo de correo de erros. O grfico dos resduos pode ser obtido
por: plot(cointest_X)
Se houver necessidade de se modelar estes resduos, ou de se realizar anlises adicionais, eles podem ser
obtidos atravs da propriedade res , e armazenados em um outro objeto. Por exemplo:
resid_coint<cointest_X@res # Armazenando os resduos do modelo ajustado em 'resid_coint'
+ + k t
k
+ + t +t ,(t = 1,T, )
X
t
Em que os vetores D t
= 1
X
t
,,t ,ie
+ + k 1 X
t k +1
+ kX
+ Dt +t ,t( = 1, T, )
i = I( 1 i ),i( = 1,k, )
i i,
Novamente, X do tipo data.frame . A opo type permite que se escolha qual estatstica ser utilizada. Utilize
type="eigen" para a estatstica do maior autovalor e type="trace" para a estatstica do trao. A opo ecdet contempla
os diversos casos possveis de adio de constantes e tendncias ao VECM. Veja (Zivot e Wang, 2006) para
detalhes. K a ordem do modelo VAR(k) a ser utilizada(Veja equao do sistema proposto acima) e suposta igual a
2 se suprimida.
O comando summary permite visualizar os detalhes do ajuste, como a martriz de cargas, o(s) vetor(es) co-integrados
e as estatsticas de teste. Novamente, rejeitamos a hiptese
do trao ou a do mximo autovalor.
H r:
1.10 Referncias
Engle, R.F. and Granger, C.W.J. , Co-integration and Error Correction: Representation, Estimation, and
Testing, Econometrica, Vol. 55, No.2, pp. 251-76, 1987.
Hannan, E.J. and Quinn, B.G. , The Determination of the Order of an Autoregression, Journal of the Royal
Statistical Society. Series B (Methodological) V41(2):190195, Wiley, 1979.
Johansen, S., Statistical Analysis of cointegration vectors, Journal of Economic Dynamics and Control, 12, 231254, 1988.
Laurent S., Analytical Derivates of the APARCH Model, Computational Economics, V24, Issue 1, pp 51-57,
August 2004, Kluwer Academic Publishers.
Morettin P.A., Econometria Financeira, Blucher 2ed. Sao Paulo, 2013.
Morettin P.A. e Toloi, C.M.C, Anlise de Sries Temporais, Blucher, Sao Paulo, 2006.
Phillips, P.C.B. and Ouliaris, S., Asymptotic Properties of Residual Based Tests for Cointegration, Econometrica,
Vol. 58, No. 1, 165193, 1990.
Shumway R.H. and Stoffer D.S., Time Series Analysis and Its Applications: With R Examples, 3rd ed. Springer Texts
in Statistics, 2011.
Taylor, J.W., A Quantile Regression Neural Network Approach to Estimating the Conditional Density of Multiperiod
Tsay, R.S., Multivariate Analysis of Time Series with R and Financial Applications, Wiley and Sons,
2014. Zivot, E., Wang, J., Modeling Financial Time Series with S-PLUS, 2nd ed., Springer, 2006.