Break xts hourly time series

I want to expand hourly time series using decompose , ets or stl or any other function. Here is a sample code and its output:

 require(xts) require(forecast) time_index1 <- seq(from = as.POSIXct("2012-05-15 07:00"), to = as.POSIXct("2012-05-17 18:00"), by="hour") head(time_index1 <- format(time_index1, format="%Y-%m-%d %H:%M:%S", tz="UTC", usetz=TRUE) # [1] "2012-05-15 05:00:00 UTC" "2012-05-15 06:00:00 UTC" # [3] "2012-05-15 07:00:00 UTC" "2012-05-15 08:00:00 UTC" # [5] "2012-05-15 09:00:00 UTC" "2012-05-15 10:00:00 UTC" head(time_index <- as.POSIXct(time_index1)) # [1] "2012-05-15 05:00:00 CEST" "2012-05-15 06:00:00 CEST" # [3] "2012-05-15 07:00:00 CEST" "2012-05-15 08:00:00 CEST" # [5] "2012-05-15 09:00:00 CEST" "2012-05-15 10:00:00 CEST" 

Why time_index timezone for time_index return to CEST?

 set.seed(1) value <- rnorm(n = length(time_index1)) eventdata1 <- xts(value, order.by = time_index) tzone(eventdata1) # [1] "" head(index(eventdata1)) # [1] "2012-05-15 05:00:00 CEST" "2012-05-15 06:00:00 CEST" # [3] "2012-05-15 07:00:00 CEST" "2012-05-15 08:00:00 CEST" # [5] "2012-05-15 09:00:00 CEST" "2012-05-15 10:00:00 CEST" ets(eventdata1) # ETS(A,N,N) # # Call: # ets(y = eventdata1) # # Smoothing parameters: # alpha = 1e-04 # # Initial states: # l = 0.1077 # # sigma: 0.8481 # # AIC AICc BIC # 229.8835 230.0940 234.0722 decompose(eventdata1) # Error in decompose(eventdata1) : # time series has no or less than 2 periods stl(eventdata1) # Error in stl(eventdata1) : # series is not periodic or has less than two periods 

When I call tzone or indexTZ , there is no time zone, but index clearly shows that times are defined with a time zone.

Also, why only ets ? Can it be used to expand the time series?

+3
r xts posixct
source share
2 answers

Why time_index timezone for time_index return to CEST?

Because you did not specify tz= in your call to as.POSIXct . It will select only the time zone from the row if it is specified by an offset from UTC (e.g. -0800). See ?strptime .

 R> head(time_index <- as.POSIXct(time_index1, "UTC")) [1] "2012-05-15 12:00:00 UTC" "2012-05-15 13:00:00 UTC" [3] "2012-05-15 14:00:00 UTC" "2012-05-15 15:00:00 UTC" [5] "2012-05-15 16:00:00 UTC" "2012-05-15 17:00:00 UTC" 

When I call tzone or indexTZ , there is no time zone, but index clearly shows that the time is specified with the time zone.

All POSIXct objects have a time zone. The time zone "" simply means that R was unable to determine a specific time zone, so it uses the time zone specified by your operating system. See ?timezone .

Only the ets function ets , because your xts object does not have the corresponding frequency attribute. This is a known limitation of xts objects, and I plan to review them over the next few months. You can work around current issues by explicitly specifying the frequency attribute after calling the xts constructor.

 R> set.seed(1) R> value <- rnorm(n = length(time_index1)) R> eventdata1 <- xts(value, order.by = time_index) R> attr(eventdata1, 'frequency') <- 24 # set frequency attribute R> decompose(as.ts(eventdata1)) # decompose expects a 'ts' object 
+2
source share

You can use tbats to decompose hourly data:

 require(forecast) set.seed(1) time_index1 <- seq(from = as.POSIXct("2012-05-15 07:00"), to = as.POSIXct("2012-05-17 18:00"), by="hour") value <- rnorm(n = length(time_index1)) eventdata1 <- msts(value, seasonal.periods = c(24) ) seasonaldecomp <- tbats(eventdata1) plot(seasonaldecomp) 

In addition, using msts instead of xts allows you to specify several seasons / cycles, for example, both hourly and daily: c(24, 24*7)

+1
source share

All Articles