Para el análisis econométrico en finanzas, es importante trabajar los datos financieros. En este sentido el siguiente trabajo corresponde a un tratamiento de los datos desde la descarga hasta la creación de un modelo ARMAR para los retornos de TRES instrumentos financieros del tipo Stock(Acciones) y dos INDICES bursátiles (uno de ellos deberá ser el SP500) :
Los instrumentos financieros que se escogieron en este caso seran: TESLA, MICROSOFT, AAPLE; los indices bursatiles: SP500, DAX
#Instalamos el package 'tseries' Para poder descargar los datos
#install.packages('tseries')
#Una vez descargado llamamos a la libreria descargada tseries
library(tseries)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
Una ves ya instalada la libreria descargamos los datos de nuestro proveedor que es yahoo los tickers de las acciones y bursatiles son "TSLA,MSFT, APPL , ^GSPC, DAX respectivamente al orden que se presento. Las fechas que se usan son fecha de inicio 2013-01-01 hasta ayer.
#Usamos uno de los metodos que tiene la libreria tseries y descargamos los precios close; con sus tickers respectivos y los datos lo acumulamos en una variable.
preciostesla = get.hist.quote(instrument = "TSLA",start="2012-01-01",quote=c("Cl"))
## 'getSymbols' currently uses auto.assign=TRUE by default, but will
## use auto.assign=FALSE in 0.5-0. You will still be able to use
## 'loadSymbols' to automatically load data. getOption("getSymbols.env")
## and getOption("getSymbols.auto.assign") will still be checked for
## alternate defaults.
##
## This message is shown once per session and may be disabled by setting
## options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.
## time series starts 2012-01-03
## time series ends 2020-07-14
preciosmsft = get.hist.quote(instrument = "MSFT", start="2012-01-01", quote=c("Cl"))
## time series starts 2012-01-03
## time series ends 2020-07-14
preciosaapl = get.hist.quote(instrument = "AAPL", start="2012-01-01",quote=c("Cl"))
## time series starts 2012-01-03
## time series ends 2020-07-14
preciossp500 = get.hist.quote(instrument = "^GSPC",start="2012-01-01",quote=c("Cl"))
## time series starts 2012-01-03
## time series ends 2020-07-14
preciosdax = get.hist.quote(instrument = "DAX",start="2012-01-01",quote=c("Cl"))
## time series starts 2014-10-23
## time series ends 2020-07-14
Los retornos usamos la formula geometrica que se usa en series financieras la acumulamos en una variable y la compramos con la de la pagina web.
\(R_t=ln(P_t/P_(t-1))\)
#Usamos los comandos diff que nos permitira diferenciar la serie y luego logaritmo(log) neperiano para suavisar la serie
retornostesla = diff(log(preciostesla))
retornomsft = diff(log(preciosmsft))
retornoaapl = diff(log(preciosaapl))
retornosp500 = diff(log(preciossp500))
retornodax = diff(log(preciosdax))
#Graficamos los precios close con el comando plot que nos podra graficar los precios que ya bajamos en la primera parte el comando mfrow nos permitira abrir nuestra pantalla en 2 filas y 3 columnas, con el comando main damos un titulo (que tiene que estar en comillas) al grafico
par(mfrow=c(2,3))
plot(preciostesla, main = "Precios TESLA")
plot(preciosmsft, main = "Precios MICROSOFT")
plot(preciosaapl, main = " Precios APPLE")
plot(preciossp500, main = "Precios Sp500")
plot(preciosdax, main = "Precios DAX")
par(mfrow=c(1,1))
vemos que la mayoria de las series sigue una tendencia creciente debido a que nos encontrabamos en un boom financiero, DAX esta cotizando recien desde el 2014,con la epidemia del coronavirus las acciones se desplomaron el lunes negro pero tesla al ser una empresa innovadora con los coches electricos no se vio tan perjudicada; con la nueva normalidad los precios ya estan retomando su tendencia creciente.
#Graficamos los retonos con el comando plot que nos podra graficar los retornos ya calculados en 2) el comando mfrow nos permitira habrir nuestra pantalla en 2 filas y 3 columnas, con el comando main damos un titulo (que tiene que estar en comillas) al grafico
par(mfrow=c(2,3))
plot(retornostesla, main = "Retornos TESLA")
plot(retornomsft, main = "Retornos MICROSOFT")
plot(retornoaapl, main = "Retornos APPLE")
plot(retornosp500, main = "Retornos Sp500")
plot(retornodax, main = "Retornos DAX")
par(mfrow=c(1,1))
El retorno es calculado geometricamente los retornos muestra la volatilidada en 2012 se puede observar en algunos debido a la deuda europea, 2018 la guerra comercial entre china y EEUU, y este 2020 una volatilidad tremenda debido al coronavirus se entro en cuarentena, pero las acciones ya van recuperandose. Las series financieras son muy volatiles.
#Graficamos los histogramas con el comando hist que nos podra graficar los histogramas de los precios que bajamos en la primera parte comando mfrow nos permitira habrir nuestra pantalla en 3 filas y 2 columnas, con el comando main damos un titulo (que tiene que estar en comillas) al grafico
par(mfrow=c(3,2))
hist(preciostesla, main = "Histograma de los precios de TESLA")
hist(preciosmsft, main = "Histograma de los precios de MICROSOFT")
hist(preciosaapl, main = "Histograma de los precios de APPLE")
hist(preciossp500, main = "Histograma de los precios de Sp500")
hist(preciosdax, main = "Histograma de los precios de DAX")
par(mfrow=c(1,1))
La serie tiene en su mayoria asimetria positiva y leptocurticas
#Graficamos los histogramas con el comando hist ue nos podra graficar los histogramas de los retornos ya calculados en 2) el comando mfrow nos permitira habrir nuestra pantalla en 3 filas y 2 columnas, con el comando main damos un titulo (que tiene que estar en comillas) al grafico
par(mfrow=c(3,2))
hist(retornostesla, main = "Histograma de los retornos de TESLA")
hist(retornomsft, main = "Histograma de los retornos de MICROSOFT")
hist(retornoaapl, main = "Histograma de los retornos de APPLE")
hist(retornosp500, main = "Histograma de los retornos de Sp500")
hist(retornodax, main = "Histograma de los retornos de DAX")
par(mfrow=c(1,1))
Las series financierasson mayormente leptocurticas y tienen asimetria negativa.
#Con el comando summary nos data detalles estadisticos de las variables precio y retorno en este caso solo hare para el precio y retorno de microsoft
summary(preciosmsft)
## Index Close
## Min. :2012-01-03 Min. : 26.37
## 1st Qu.:2014-02-21 1st Qu.: 38.02
## Median :2016-04-09 Median : 53.69
## Mean :2016-04-08 Mean : 70.76
## 3rd Qu.:2018-05-24 3rd Qu.: 97.98
## Max. :2020-07-14 Max. :214.32
summary(retornomsft)
## Index Close
## Min. :2012-01-04 Min. :-0.1594534
## 1st Qu.:2014-02-24 1st Qu.:-0.0063134
## Median :2016-04-11 Median : 0.0006940
## Mean :2016-04-08 Mean : 0.0009566
## 3rd Qu.:2018-05-25 3rd Qu.: 0.0084887
## Max. :2020-07-14 Max. : 0.1329290
#para hallar la kurtosis s skewness usamos la libreria moments
#install.packages("moments")
library(moments)
#Kurtosis de precios de microsoft
kurtosis(preciosmsft)
## Close
## 3.47359
#skewness de tesla
skewness(preciosmsft)
## Close
## 1.162106
#kurtosis de tesla
kurtosis(retornomsft)
## Close
## 15.53513
#skewness de tesla
skewness(retornomsft)
## Close
## -0.2591165
Muestra asimetria postiva ya que es > 0 una kurtosis leptocurtica > 3 para los precios, en caso de los retornos asimetria negativa <0 y leptocurtica >3.
Primero identificamos los Correlogramas para ver que rezago de AR y Ma usaremos para nuestro modelo ARMA.
#tesla
#Primero usamos un artificio
preciotesla1=as.numeric(preciostesla) #Volvemos a la variable tipo numerico
pdtesla=diff(preciotesla1) #diferenciamos la serie que transformamos en nuemerico
preciotesla1=diffinv(pdtesla) #diferenciamos la inversa
pd1tesla=diff(preciotesla1)
#plot(modelo1$residuals,type="l")
#Abrimos la ventana con el comando mpar para que las imagenes aprezcan juntan
par(mfrow=c(1,2))
acf(pd1tesla) #para ver el ma
pacf(pd1tesla) #para ver el ar
Analizando los correlogramos las bandas del AR(parcial ACF) salen hasta la tercera entonces nuestro AR(3), para ma vemos que hasta el lag 3 sale entonces nuestro MA(3).
Plantemos el modelo ARMA(p,q) que tomara nuestra serie.
modelotesla=arma(pd1tesla, order=c(3,3)) #Usamos el metodo arma de la paqueteria tseries
## Warning in arma(pd1tesla, order = c(3, 3)): Hessian negative-semidefinite
modelotesla
##
## Call:
## arma(x = pd1tesla, order = c(3, 3))
##
## Coefficient(s):
## ar1 ar2 ar3 ma1 ma2 ma3 intercept
## -0.2238 0.5964 0.4002 0.2693 -0.5816 -0.3149 0.1696
El modelo ARMA(3,3) para tesla seria
\(R_t=0.1696-0.2238R_(t-1)+0.5964R_(t-2)+0.4002R_(t-3)+0.2693e_(t-1)-0.5816e_(t-2)-0.3149e_(t-3)+ u\)
Ahora para los indice busrsatil sp500
Primero identificamos los Correlogramas para ver que rezago de AR y Ma usaremos para nuestro modelo ARMA.
#tesla
#Primero usamos un artificio
preciosp5001=as.numeric(preciossp500) #Volvemos a la variable tipo numerico
pdsp500=diff(preciosp5001) #diferenciamos la serie que transformamos en nuemerico
preciosp5001=diffinv(pdsp500) #diferenciamos la inversa
pd1sp500=diff(preciosp5001)
#plot(modelo1$residuals,type="l")
#Abrimos la ventana con el comando mpar para que las imagenes aprezcan juntan
par(mfrow=c(1,2))
acf(pd1sp500) #para ver el ma
pacf(pd1sp500) #para ver el ar
Plantemos el modelo ARMA(p,q) que tomara nuestra serie.
modelosp500=arma(pd1sp500, order=c(3,2)) #Usamos el metodo arma de la paqueteria tseries
## Warning in arma(pd1sp500, order = c(3, 2)): Hessian negative-semidefinite
modelosp500
##
## Call:
## arma(x = pd1sp500, order = c(3, 2))
##
## Coefficient(s):
## ar1 ar2 ar3 ma1 ma2 intercept
## -1.3617 -0.4346 0.0962 1.2144 0.3292 -1.3938
El modelo ARMA(2,3) para sp500 seria
\(R_t=-1.3938-1.3617R_(t-1)-0.4346R_(t-2)+0.0962R_(t-3)+1.2144e_(t-1)+0.3292e_(t-2)+ u\)