Independencia entre variables con matrices

👌 En muchas ocasiones cuando vamos a crear algún tipo de modelo estadístico y tenemos una gran cantidad de variables queremos saber si hay una relación lineal muy fuerte entre ellas o por el contrario son independientes entre sí.

👨‍🏫 Dentro de las finanzas si quieres desarrollar una cartera de inversión y cómo es lógico tu intención es diversificar entre activos es posible que necesites filtrar de alguna manera al principio, porque es normal no saber que activos escoger al principio.

Es por ello que puede ser útil utilizar algún criterio específico que nos ayude de manera global a saber de todas nuestras variables cuáles son las más independientes entre ellas.

😃Una forma simple de ver ésto es utilizar uno de los conceptos que más utilizados en econometría y matemáticas,que son las matrices y determinantes.

👉Utilizando las matriz de correlaciones y haciendo el cálculo del máximo determinante se puede crear un algoritmo que os permita estudiar la relación de independencia existente entre vuestras variables.

En éste vídeo os explico cómo podéis hacerlo de manera práctica. Yo uso los mercados financieros como ejemplo pero vosotros podéis adaptarlo a otros campos. Más abajo tenéis el código usado también .👇👇

CÓDIGO EN R DEL VÍDEO

 


####### INDEPENDENCIA LINEAL #######


ges(«tseries»)
library(tseries)
#install.packag
#install.packages(«quantmod»)
library(quantmod)
#install.packaes(«fImport»)
library(fImport)
#install.packages(«expm»)
library(expm)
#install.packages(«fPortfolio»)
library(fPortfolio)
#install.packages(«gtools)
library(gtools)


# ————————————————-


#### CALCULAR EL MÁXIMO DETERMINANTE DE LA MATRIX DE CORRELACIONES

#

a<-c(1,0)
b<-c(0,1)
matrix(c(a,b),2,2)


## DETERMINANTES = El determinante de una matriz es un escalar que sólo se
#puede calcular si se trata de una matriz cuadrada,


### Ejemplo matriz de correlaciones


## Dentro de las correlaciones que haya entre nuestras variables, las vamos a ordenar
# para el obtener el máximo determinante

getFX(c(«EUR/USD»,»GBP/USD»))

divisas1<-cbind(EURUSD,EURUSD) ### tabla eurusd
cor(divisas1)
det(cor(divisas1)) ## determinate 0 da lugar 0 maxima correlacion

divisas<- cbind(EURUSD,GBPUSD)

cor(divisas)

det(cor(divisas)) #0.9744312 > 0 Al ser esto así llegamos a la conclusión
# de que cuanto más alto es el determinante de la matriz menos es la correlación o mayor
#la independencia de las variables

### de 15 variables yo quiero saber las 10 más independientes

CAC40=get.hist.quote(«^FCHI»,quote=»Close»,start = «2019-01-07″,end=»2020-01-07»)
DAX=get.hist.quote(«^GDAXI»,quote=»Close»,start = «2019-01-07″,end=»2020-01-07»)
#FTSEMIB=get.hist.quote(«FTSEMIB.MI»,quote=»Close»,start = «2016-03-13″,end=»2017-03-13»)
FTSE=get.hist.quote(«^FTSE»,quote=»Close»,start = «2019-01-07″,end=»2020-01-07»)
SWISS=get.hist.quote(«^SSMI»,quote=»Close»,start = «2019-01-07″,end=»2020-01-07»)
IBEX=get.hist.quote(«^IBEX»,quote=»Close»,start = «2019-01-07″,end=»2020-01-07»)
BELG=get.hist.quote(«^BFX»,quote=»Close»,start = «2019-01-07″,end=»2020-01-07»)
DOW=get.hist.quote(«^DJI»,quote=»Close»,start = «2019-01-07″,end=»2020-01-07»)
NASDAQ=get.hist.quote(«^NDX»,quote=»Close»,start = «2019-01-07″,end=»2020-01-07»)
NIKKEI=get.hist.quote(«^N225″,quote=»Close»,start = «2019-01-07″,end=»2020-01-07»)
SINGAPUR=get.hist.quote(«^STI»,quote=»Close»,start = «2019-01-07″,end=»2020-01-07»)
HONG=get.hist.quote(«^HSI»,quote=»Close»,start = «2019-01-07″,end=»2020-01-07»)
SP500=get.hist.quote(«^GSPC»,quote=»Close»,start = «2019-01-07″,end=»2020-01-07»)
STOXX50=get.hist.quote(«^STOXX50E»,quote=»Close»,start = «2019-01-07″,end=»2020-01-07»)
HOLANDA<- get.hist.quote(«^AEX»,quote=»Close»,start = «2019-01-07″,end=»2020-01-07»)


iFX=na.omit(cbind(CAC40,DAX,SWISS,IBEX,DOW,NASDAQ,NIKKEI,SINGAPUR,HONG,STOXX50,SP500,HOLANDA))


# Sacamos los retornos, comprobamos los resultados y los multiplicamos por 100 para tenerlo todo en %

retornosFX = returns(iFX)
retornosFX = 100*retornosFX[ , 1:ncol(retornosFX)]
retornosFX<-na.omit(retornosFX)

cor(retornosFX)


# Buscamos todas las submatrices de X*X

subTamaño = 5
determinantes = c()
choose(ncol(iFX), subTamaño) # Nº de combinaciones totales
combinaciones = combinations(ncol(iFX), subTamaño)
head(combinaciones)

filas = nrow(combinaciones)
progressBar = winProgressBar(title=»Calculando determinantes», label=»0% calculado», min=0, max=100, initial=0)
timestamp()
for (i in 1:filas) {

determinantes[i] = det(cor(iFX[,combinaciones[i,]]))
setWinProgressBar(progressBar, (i/filas)*100, label=sprintf(«%d%% calculado», round((i/filas)*100)))
}
timestamp()
close(progressBar)
rm(i, subTamaño, filas)
head(determinantes)

# Buscamos la combinación de activos asociada al determinante más alto

posMax = which(determinantes == max(determinantes))
posMax
combiMax = combinaciones[posMax, ]
combiMax

# Creamos un nuevo data.frame con los X activos que nos interesen
jFX = data.frame(retornosFX[, combiMax])
names(jFX)

head(iFX)

#iFX=na.omit(cbind(CAC40,DAX,SWISS,IBEX,DOW,NASDAQ,NIKKEI,SINGAPUR,HONG,HOLANDA))

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio