- 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
Las cópulas son distribuciones Multivariantes que sirven para medir la dependencia que puede haber entre muchas variables. Son una alternativa que busca corregir los errores o problemas que tiene el coeficiente de Correlación. Gracias a ellas se consigue modelar la dependencia entre variables fuera de lo estrictamente lineal y saliéndonos del mundo gaussiano.
En este video te mostraré un método para poder elegir que cópulas matemáticas se adaptan mejor a un determinada variable, en este caso usando el mercado Forex.
CODIGO R DEL VIDEO
#VIDEO COPULAS FOREX
#Video Elección de Cópulas
#Son distribuciones Multivariantes que sirven para dependencia que puede haber entre muchas variables
#Son una alternativa que busca corregir los errores o problemas que tiene el coeficiente de Correlación
#Se consigue modelar la dependencia entre variables fuera de lo estrictamente lineal y saliéndonos del mundo gaussiano
#install.packages(«quantmod»)
library(quantmod)
#install.packages(«tseries»)
library(tseries)
#install.packages(«fImport»)
library(fImport)
getSymbols(«CADCHF=X»,src=»yahoo»,from = «2017-02-18»)
getSymbols(«AUDNZD=X»,src=»yahoo»,from = «2017-02-18»)
getSymbols(«AUDUSD=X»,src=»yahoo»,from = «2017-02-18»)
getSymbols(«EURCHF=X»,src=»yahoo»,from = «2017-02-18»)
getSymbols(«EURGBP=X»,src=»yahoo»,from = «2017-02-18»)
getSymbols(«EURJPY=X»,src=»yahoo»,from = «2017-02-18»)
getSymbols(«EURNZD=X»,src=»yahoo»,from = «2017-12-18»)
getSymbols(«EURUSD=X»,src=»yahoo»,from = «2017-02-18»)
getSymbols(«GBPCHF=X»,src=»yahoo»,from = «2017-02-18»)
getSymbols(«NZDCAD=X»,src=»yahoo»,from = «2017-02-18»)
#precios de cierre
CADCHF= `CADCHF=X`[,4]
AUDNZD= `AUDNZD=X`[,4]
AUDUSD= `AUDUSD=X`[,4]
EURCHF= `EURCHF=X`[,4]
EURGBP= `EURGBP=X`[,4]
EURJPY= `EURJPY=X`[,4]
EURNZD= `EURNZD=X`[,4]
EURUSD= `EURUSD=X`[,4]
GBPCHF= `GBPCHF=X`[,4]
NZDCAD= `NZDCAD=X`[,4]
?returns
#FOREX<- cbind(USDTRY,USDSGD,USDHKD,USDMXN,USDNOK,USDSEK,USDDKK,EURSEK,EURNOK,EURNZD,NZDJPY,NZDCHF,EURUSD,GBPUSD,USDCHF,NZDUSD,EURAUD,GBPNZD,USDCAD,USDJPY,AUDCAD,CHFJPY,EURMXN,AUDNZD,AUDUSD,EURNZD,EURGBP,GBPCAD,GBPAUD,GBPJPY,EURCAD,AUDJPY,EURJPY,GBPCHF,EURCHF,NZDCAD,CADCHF)
FX1=cbind(CADCHF,AUDNZD,AUDUSD,EURCHF,EURGBP,EURJPY,EURNZD,EURUSD,GBPCHF,NZDCAD)
#Caluclamos los retornos y x 100 para calcularlos en %
FX1=returns(FX1)
FX1=100*FX1[,1:ncol(FX1)]
FX<-as.timeSeries(FX1)
FX<-na.omit(FX)
head(FX)
plot(FX)
head(FX)
EURUSD_r <- FX[,8]
EURGBP_r <- FX[,5]
media_eurusd<-mean(EURUSD_r)
media_eurgbp<-mean(EURGBP_r)
desv_eurusd<- sd(EURUSD_r)
desv_eurgbp<- sd(EURGBP_r)
# Ajuste de cópulas con paquete <copula>
#—————————————-
install.packages(«copula») # hacer esto una sola vez
library(copula) # cargar paquete instalado al inicio de cada sesión en R
### Normal de dos en dos sacando el AIC al final
set.seed(6) # for reproducibility
#normal.cop <- normalCopula(c(0.5), dim=2, dispstr=»un»)
#x <- rCopula(n, normal.cop) # «true» observations (simulated)
#u <- pobs(x)
# pseudo-observations
# 1 Tenemos que crear una matrix 2 *2 para cada combinacion de variables
# 2 Esa matriz la llamaremos «x»
# 3.Para crear la cópula usaremos las pseudo observaciones de x, para que no
# nos de error ni salgan valores negativos
# Comenzamos por orden con el Variable 1 y 2. Luego habrá que hacer
# 1 y 3, 1 y 4 …….
# probar 3 copulas = normal, t student y gumbell
# crea aic
# mirar la que tiene menor aic
res11<- EURUSD_r #Variable 1
res22<- EURGBP_r #variable 2
nn<- length(res11) # número de filas de la matriz = longiutd de la varialbe
columnas<- 2 # Como la cópula será BI variada aquí es 2
x<- matrix(c(res11,res22),nn,columnas) #
u<- pobs(x)
# Fijamos la COpula por el método Maxima Verosimilitud(likehood)(ML)
fit.ml <- fitCopula(normalCopula(dim=2, dispstr=»un»), u, method=»ml», traceOpt=TRUE)
#?fitCopula
summary(fit.ml)
confint(fit.ml)
confint(fit.ml, level = 0.999)
Estimador<- fit.ml@estimate # Estimate
Error_est<-fit.ml@var.est # Error estándar
Log_ver<-fit.ml@loglik # Valor máxima verosimilutd
Error_est
Log_ver
# CALCULO DE CRITERIO DE AKAIKE(AIC) Y EL BIC
# Lo hacemos a mano con la Fórmula
# AIC <- -2*log-likelihood + k * npar
aic<- -2*Log_ver + 2*1 #-2*log-likelihood + k*npar
aic
bic <- -2*Log_ver + log(nn)* 1 #-2*log-likelihood + k*npar
bic
#copula normal eurgbp eurusd = -36.06
## COPULAS DE T STUDENT
# Fijamos la COpula t studente método Máxima Verosimilitud
tc.ml <- fitCopula(tCopula(dim=2, dispstr=»un»), u, method=»ml»)
summary(tc.ml)
confint(tc.ml)
confint(tc.ml, level = 0.999)
Estimador_t<-tc.ml@estimate
Error_est_t<-tc.ml@var.est
Log_ver_t<-tc.ml@loglik
# Sacamos AIC y BIC
#-2*log-likelihood + k*npar
aic_t <- -2*Log_ver_t + 2* 1
bic_t<- -2*Log_ver_t + log(nn)* 1
aic_t
bic_t
## COPULA DE GUMBELL ( arquimediana)
fit.ml <- fitCopula(gumbelCopula(), u, method=»ml»)
summary(fit.ml)
Estimador_gumbell<- fit.ml@estimate # Estimate
Error_est_gumbell<-fit.ml@var.est # Error estándar
Log_ver_gumbell<-fit.ml@loglik # Valor máxima verosimilutd
Error_est_gumbell
Log_ver_gumbell
# CALCULO DE CRITERIO DE AKAIKE(AIC) Y EL BIC
# Lo hacemos a mano con la Fórmula
# AIC <- -2*log-likelihood + k * npar
aic_gumbell<- -2*Log_ver_gumbell + 2*1 #-2*log-likelihood + k*npar
aic_gumbell
bic_gumbell <- -2*Log_ver_gumbell + log(nn)* 1 #-2*log-likelihood + k*npar
bic_gumbell
aic #normal
aic_t
aic_gumbell
# 1 t student 2 normal 3 gumbell
bic
bic_t
bic_gumbell
##
#simulaciones copula
copula_sim <- rCopula(1000,tc.ml@copula)
# Gráficos de dispersión de las pseudo-observaciones simuladas
#dev.new(); par(mfrow = c(1, 2))
plot(copula_sim, main = «Cópula t»)
hist(copula_sim[,2])
Hola, muy buen material, muchas gracias, me ayudó a entender que son las copulas y para que sirven,
pero tengo una pregunta, si tengo distribuciones marginales de distinta longitud (F1 con 50 datos y F2 con 30 datos) como puedo hallar la copula?
Hola!! Pues lo único que se me ocurre es que uses solo 30 datos de de F1. Puedes probar con varias muestras distintas de 30 datos y ver como varia. Por ejemplo, la primera con los 30 primeros, otra con los 30 últimos y otra con 30 centrales.