rpubs - Cómo convertir un marco de datos en series de tiempo en R
series de tiempo multivariadas en r (4)
Tengo un archivo csv en el que tengo 2 precios de stock de cierre (a diario)
Dates Bajaj_close Hero_close
3/14/2013 1854.8 1669.1
3/15/2013 1850.3 1684.45
3/18/2013 1812.1 1690.5
3/19/2013 1835.9 1645.6
3/20/2013 1840 1651.15
3/21/2013 1755.3 1623.3
3/22/2013 1820.65 1659.6
3/25/2013 1802.5 1617.7
3/26/2013 1801.25 1571.85
3/28/2013 1799.55 1542
Quiero convertir los datos anteriores en formato de series de tiempo. (La fecha de inicio es 3/14/2013
y la fecha de finalización son 3/13/2015
) He intentado esto pero me está dando un resultado extraño
values <- bajaj_hero[, -1] (excluded first column i.e date in real dataset)
bajaj_hero_timeseries <- ts(values,start=c(2013,1),end=c(2015,3),frequency=365)
La salida es:
Bajaj_close Hero_close
2013.000 1854.80 1669.10
2013.003 1850.30 1684.45
2013.005 1812.10 1690.50
2013.008 1835.90 1645.60
2013.011 1840.00 1651.15
2013.014 1755.30 1623.30
2013.016 1820.65 1659.60
2013.019 1802.50 1617.70
2013.022 1801.25 1571.85
por favor ayuda.. :)
Con la biblioteca fpp
, puede crear fácilmente series temporales con formato de fecha: time_ser=ts(data,frequency=4,start=c(1954,2))
Aquí comenzamos en el segundo trimestre de 1954 con frecuencia de trimestre.
R tiene múltiples formas de representar series de tiempo. Dado que está trabajando con los precios diarios de las acciones, es posible que desee considerar que los mercados financieros están cerrados los fines de semana y los días festivos, de modo que los días de negociación y los días calendario no sean los mismos. Sin embargo, es posible que deba trabajar con sus series de tiempo en términos de días de negociación y días calendario. Por ejemplo, los rendimientos diarios se calculan a partir de los precios de cierre diarios secuenciales, independientemente de si interviene un fin de semana. Pero es posible que también desee realizar informes basados en el calendario, como los resúmenes de precios semanales. Por estas razones, el paquete xts, una extensión del zoológico, se usa comúnmente con datos financieros en R. A continuación, se muestra un ejemplo de cómo podría usarse con sus datos.
Suponiendo que los datos que se muestran en su ejemplo están en el marco de datos df
library(xts)
stocks <- xts(df[,-1], order.by=as.Date(df[,1], "%m/%d/%Y"))
#
# daily returns
#
returns <- diff(stocks, arithmetic=FALSE ) - 1
#
# weekly open, high, low, close reports
#
to.weekly(stocks$Hero_close, name="Hero")
lo que da la salida
Hero.Open Hero.High Hero.Low Hero.Close
2013-03-15 1669.1 1684.45 1669.1 1684.45
2013-03-22 1690.5 1690.50 1623.3 1659.60
2013-03-28 1617.7 1617.70 1542.0 1542.00
Vea esta pregunta: Convertir data.frame a xts order.by requiere un objeto apropiado basado en el tiempo , lo que sugiere mirar el argumento a order.by,
Las clases actualmente aceptables incluyen: ''Date'', ''POSIXct'', ''timeDate'', así como ''yearmon'' y ''yearqtr'' donde los valores del índice siguen siendo únicos.
Y además sugiere una conversión explícita usando order.by = as.POSIXct,
df$Date <- as.POSIXct(strptime(df$Date,format),tz="UTC")
xts(df[, -1], order.by=as.POSIXct(df$Date))
Donde su formato se asigna en el otro lado,
format <- "%m/%d/%Y" #see strptime for details
Entrada. Comenzaremos con el texto de la entrada que se muestra en la pregunta, ya que la pregunta no proporcionó la entrada de csv:
Lines <- "Dates Bajaj_close Hero_close
3/14/2013 1854.8 1669.1
3/15/2013 1850.3 1684.45
3/18/2013 1812.1 1690.5
3/19/2013 1835.9 1645.6
3/20/2013 1840 1651.15
3/21/2013 1755.3 1623.3
3/22/2013 1820.65 1659.6
3/25/2013 1802.5 1617.7
3/26/2013 1801.25 1571.85
3/28/2013 1799.55 1542"
zoo. Las series de clase "ts"
normalmente no representan índices de fecha, pero podemos crear una serie de zoológico que sí lo hace (ver paquete de zoo ):
library(zoo)
z <- read.zoo(text = Lines, header = TRUE, format = "%m/%d/%Y")
Alternativamente, si ya ha leído esto en un marco de datos DF
entonces se puede convertir en zoológico como se muestra en la segunda línea a continuación:
DF <- read.table(text = Lines, header = TRUE)
z <- read.zoo(DF, format = "%m/%d/%Y")
En cualquiera de los dos casos anteriores, z
ia una serie de zoológico con un índice de tiempo de clase "Date"
. También se podría crear la serie zoo, zz
, que usa 1, 2, 3, ... como índice de tiempo:
zz <- z
time(zz) <- seq_along(time(zz))
ts. Cualquiera de estos podría convertirse en una serie de clases "ts"
:
as.ts(z)
as.ts(zz)
El primero tiene un índice de tiempo que es el número de días desde la Época (1 de enero de 1970) y tendrá NA para los días faltantes y el segundo tendrá 1, 2, 3, ... como el índice de tiempo y no NA.
Series mensuales. Normalmente, las series "ts"
se usan para series mensuales, trimestrales o anuales. Por lo tanto, si tuviéramos que agregar el aporte en meses, podríamos representarlo razonablemente como una serie "ts"
:
z.m <- as.zooreg(aggregate(z, as.yearmon, mean), freq = 12)
as.ts(z.m)