1 votos

Análisis de algunas series en R - problemas con las funciones TS/descomponer

Estoy tratando de analizar y predecir los precios de los derechos de emisión europeos (EUA) utilizando los datos de enero de 2008 a marzo de 2016 y también utilizando otras series que puedan estar relacionadas con ese precio, como los precios del Brent o del IBEX35 (utilizaré correlaciones o divergencias entre esas series).

El problema es que, en mi caso, no sé cómo modificar correctamente la frecuencia al utilizar la función 'ts' en mis series porque he tomado los datos de investing.com y sendeco2.com y la frecuencia temporal que utilizan es justo todos los días de apertura de la bolsa, por lo que '365' no debería ser el valor de frecuencia correcto He comprobado cuántos valores tengo para cada año y los resultados son:

-2008: 252 values
-2009: 250 values
-2010: 252 values
-2011: 249 values
-2012: 254 values
-2013: 254 values
-2014: 255 values
-2015: 254 values
-2016 (March): 105 values

Significa que mis series son irregulares. Lo que hago es almacenar cada serie (EUA, Brent etc) a un vector (longitud total de 2125 para cada uno) y trabajo con esas variables:

BDD<-read.csv('BDD.csv',colClasses=c("Date","numeric","numeric","numeric","numeric"), header=TRUE, sep=";")
Date <- BDD[1:nrow(BDD),1];
EUA <- BDD[1:nrow(BDD),2]; 
Brent <- BDD[1:nrow(BDD),3];
IBEX35 <- BDD[1:nrow(BDD),4];
PME <- BDD[1:nrow(BDD),5]; 

También he probado con freq=1 (pero obviamente es un error porque no son valores anuales) y me da este error:

> EUA_ts<-ts(EUA, frequency=1, start=c(2008,1), end=c(2016,3))
> EUA_decomp<-decompose(EUA_ts, type=c("additive"))
Error in decompose(EUA_ts, type = c("additive")) : 
  time series has no or less than 2 periods

¿Existe otra posibilidad de descomponer una serie? ¿Estoy haciendo algo mal?

He subido mi base de datos en Drive para aportar más detalles, si es necesario: https://drive.google.com/open?id=0B7nP03_LfDvQZS1WNUdqbWM1X1U

1voto

Kevin J. Rice Puntos 101

Hay una afirmación implícita en su pregunta que quiero aclarar antes de dar una respuesta. Usted ha afirmado :

También he probado con freq=1 (pero evidentemente es un error porque no son valores anuales)

Esto implica que, o bien la frecuencia de los datos se rige únicamente por la frecuencia anual, o bien que todos y cada uno de los datos anuales tienen una frecuencia de 1. Ambas afirmaciones son falsas. Los ciclos solares tienen una frecuencia de unos 11 años, por lo que los datos anuales del ciclo solar tendrían una frecuencia de unos 11. Por otro lado, algo como los errores de copia del servidor por intento de copia pueden muestrearse más de una vez por segundo, pero aún así tienen una frecuencia de 1, ya que los errores de copia son un proceso mayoritariamente aleatorio. A la hora de determinar la frecuencia de la serie, hay que pensar en la causa de la estacionalidad y no basarse únicamente en la frecuencia de muestreo (aunque puede ser un buen punto de partida). La respuesta siguiente asume que ha identificado correctamente el periodo estacional como 1 año.

En cuanto a tu pregunta original, hay varias formas de tratar los datos. La más sencilla sería ajustar la estacionalidad al valor medio del número de muestras por año. Las series temporales no necesitan tener una estacionalidad entera, por lo que puede hacer una serie temporal en R como a continuación:

ts(rnorm(100), frequency = 14.73)

Otra opción sería volver a añadir los días que faltan a la serie temporal y utilizar una frecuencia de 365 (o incluso mejor 365,24). Si dispone de los puntos temporales de cada observación, puede utilizar la función zoo en R para crear una serie temporal irregular y luego rellenar los valores que faltan.

Puedes hacer la serie usando:

x.Date <- as.Date("2003-02-01") + sample(1000,900) - 1
x <- zoo(rnorm(900), x.Date)
y <- ts(as.ts(x), frequency = 365.24)

Los valores que faltan pueden rellenarse con muchos métodos, pero uno a tener en cuenta es zoo::na.approx . A partir de ahí, la serie se puede descomponer de forma normal.

decompose(na.approx(y))

Algunas notas finales y opciones: 1) decompose es un método útil, pero también puede considerar el método stl descomposición para sus datos, ya que incluso el decompose docs dicen que " stl proporciona una descomposición mucho más sofisticada". 2) Siempre obtendrá un error si intenta utilizar decompose ou stl en una serie con una frecuencia de 1. Ambas funciones intentan separar los componentes estacionales y de tendencia de los datos, por lo que si no hay componente estacional (es decir, frecuencia = 1), hay un problema. Si, por el contrario, sólo desea separar la tendencia del ruido, puede considerar la posibilidad de utilizar una función media móvil .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X