- Medidas Estadísticas de Dispersión Relativa - junio 11, 2024
- Modelos SARIMA(Arima Estacionales).¿Qué son y cómo usarlos para Predecir? - enero 4, 2024
- ¿Qué es el RUIDO BLANCO ? Econometría en R - junio 21, 2023
En los Modelos GARCH encontramos una nueva forma de cálculo de la volatilidad donde la varianza condicional depende de las observaciones pasadas.
En el siguiente vídeo tutorial explico algunos ejemplos y paquetes que se pueden usar en R studio para modelizar con GARCH. volatilidad. También puedes copiar el código usado justo debajo.
Codigo R
### VÍDEO MODELOS GARCH
#(MOdelos de Autoregresivos de HEterocedasticidad Condicional)
# Buscan realizar una modelacion de la volatilidad(varianza),en la
# cuál ésta dependerá de sus observaciones pasadas
# La volatilidad no será la volatilidad clásica sino que tendremos una
# nueva forma de calcularla y ver como se comporta
#1. Surgen para ilimimar las limitaciones de la varianza como indicador de volatilidad
#2. Modelos Garch como su nombre indican,se basan en que la estructura
# de la varianza puede ser autorregresiva y puede estar autocorrelacionada
# Por tanto los valores del presente pueden depender del pasado.
#file:///C:/Users/Victor-PC/Documents
tabla1<-read.table(«C:/Users/Victor-PC/Documents/divisasmulti15M.txt»,header=T,sep=»»)
tabla<-tabla1[(nrow(tabla1)-1000):nrow(tabla1),]
################################################3
library(«quantmod»)
library(«tseries»)
library(«fImport»)
#install.packages(«tseries»)
library(tseries)
#install.packages(«forecast»)
library(forecast)
#install.packages(«TSA»)
library(TSA)
library(quantmod)
library(lmtest)
##VENTANA DE TIEMPO PARA DESVIACIONES
AUDUSD<- tabla$AUDUSD_my #audusd
rAud<-na.omit(returns(AUDUSD))*100
plot(rAud,type=»l»)
sd(rAud)
var(rAud)
hist(rAud)
vent<- 50
vent2<- vent-1
varianza=c()
for(i in vent:length(rAud))
{f=var(rAud[(i-vent2):i])
varianza[i]=(f)}
plot(varianza,type=»l»)
y<-rAud
STDM=c()
for(i in vent:length(y))
{f=sd(y[(i-vent2):i])
STDM[i]=(f)}
STDM
STDM2<-STDM*2
MM=c()
for(i in vent:length(y))
{f=mean(y[(i-vent2):i])
MM[i]=(f)}
MM
#desviacion típica
#sd(na.omit(y))
#2*sd(na.omit(y))
sd1= MM+ STDM
sd1
sd11= MM-STDM
sd11
sd2<-MM+STDM2
sd22<-MM-STDM2
plot(rAud,type=»l»)
lines(MM, col=»blue»)
lines(sd11, col=»green»)
lines(sd1,col=»green»)
lines(sd2,col=»red»)
lines(sd22,col=»red»)
####################################
######### MODELOS GARCH ############
#install.packages(«fGarch»)
library(fGarch)
library(rugarch)
AoveSem<-AUDUSD
plot(AoveSem,type=»l»)
AOVEvol<-na.omit(returns(AoveSem))*100 ### Retornos
plot(AOVEvol,type=»l»)
#?returns
#GARCH ESTANDAR (1,1)
AOVEgarch <- garchFit(~ garch(1,1),cond.dist=»norm», data = (AOVEvol),include.mean = FALSE, trace = FALSE)
### Cosas que se pueden Optimizar = 1. (p,q) y 2. Distribución
#AOVEgarch <- garchFit(~ garch(1,1),cond.dist=»norm», data = (AOVEvol), trace = FALSE)
AOVEgarch
summary(AOVEgarch)
plot(AOVEgarch)
?garchFit
vc <- AOVEgarch@h.t ## variación Condicional
plot(vc,type=»l»)
SD<-AOVEgarch@sigma.t # Desviación estándar condicional
plot(SD,type=»l»)
MediaSD<- mean(SD)
abline( MediaSD,0,col=»red»)
Residuos<- AOVEgarch@residuals #residuos
plot(Residuos,type=»l»)
#Comp<-cbind(AOVEvol,Residuos)
### PREDICCIÓN CON GARCH
fcst<-(predict(AOVEgarch,n.ahead=10))
fcst
plot(fcst$standardDeviation)
abline(MediaSD,0,col=»red»)
### OTRA FORMA CON tseries
?garch
fit<-garch(AOVEvol,order=c(1,1))
fit
coef(fit) ### Coeficientes
#### Rugarch para Garch y SImulaciones
library(rugarch)
#?ugarchspec
gspec.ru <- ugarchspec(variance.model = list(model = «sGARCH», garchOrder = c(1, 1)),mean.model=list(
armaOrder=c(0,0),include.mean = FALSE), distribution=»norm»)
gfit.ru <- ugarchfit(gspec.ru, AOVEvol)
gfit.ru
plot(gfit.ru)
coef(gfit.ru) # coeficientes estimados
vcov(gfit.ru) # matriz de covarianzas
infocriteria(gfit.ru) # criterios bayesianos
residuals(gfit.ru) # residuos del modelo
newsimpact(gfit.ru) # curva de impacto
fitted(gfit.ru) #valores fijados
uncvariance(gfit.ru) #variaza incondicional( de largo plazo)
uncmean(gfit.ru) # media incondicional (de Largo plazo)
##### Simmulaciones con GARCH
sim<-ugarchsim(gfit.ru, n.sim=100, n.start=1, m.sim=1, startMethod=»sample»)
plot(sim)
head(sigma(sim))
#?ugarchsim
SIMU<-sim@simulation
plot(SIMU$sigmaSim,type=»l»,xlab= «Horizonte»,ylab=»VOLATILIDAD»,col=»blue»)
## Faltaría hacer un backtest de la efectividad del Modelos
### Crear nuevas series Simuladas
### Predicciones también de las series
##################################################################################
getSymbols(«^IBEX»,quote=»Close»,from = «2014-06-20»)
IBEX= IBEX[,4]
IBEX1<-na.omit(IBEX)
dIBEX1<-na.omit(returns(IBEX1))*100
plot(dIBEX1,type=»l»)
#install.packages(«fGarch»)
library(fGarch)
spec = ugarchspec()
fit = ugarchfit(dIBEX1, spec = spec)
plot(fit)
desv<-fit@fit$sigma
desv
sim = ugarchsim(fit,n.sim=1, n.start=1, m.sim=1, startMethod=»sample»)
sim@simulation$sigmaSim
SIM<-c()
SERIE<-c()
set.seed(10)
for(i in 1:100){
sim <- ugarchsim(fit,n.sim=1, n.start=1, m.sim=1, startMethod=»sample»)
SIM[i]<- sim@simulation$sigmaSim
SERIE[i]<-sim@simulation$seriesSim
}
SERIE
SIM
plot(SIM,type=»l»)
orden<-sort(SIM)
plot(SERIE,type=»l»)
orden<0.9505
S=S[ , colSums(is.na(S)) == 0]
S
############################# SERIE DE RUIDO BLANCO ##########
#Ejemplo Ruido Blanco
#Generamos los datos
ruido_blanco=rnorm(1000,0,1)
#Graficamos la serie de tiempo
plot.ts(ruido_blanco, main=»Ejemplo de Ruido Blanco», xlab=»Tiempo», ylab=»Valores»,col=»6″)
#Graficamos su correlograma
acf(ruido_blanco,main=»Correlograma»,col=»2″,lag=50)
#Calculamos la media
mean(ruido_blanco)
#[1] 0.03784017
#Ejemplo Ruido Blanco
#Prueba Ljung-Box
Box.test(ruido_blanco)