Use Hourly data in ts and window function

早过忘川 提交于 2019-12-12 12:31:49

问题


I have hourly data like the sample below that I am trying to create a time-series from and use the window function with. My end goal is to use this to train an Arima model. I'm having a hard time getting ts() or window() to work with my date time format. I've also tried using msts() but couldn't get it to work with the date time format. I have gotten xts() to work, but it doesn't seem to work correctly with the window() or Arima().

Is it possible to use this date time format with ts() and the window() function? Any tips are greatly appreciated.

Code:

tsData <- ts(SampleData$MedTime[1:24],start='2015-01-01 00:00', frequency=168)

train <- window(tsData,end='2015-01-01 15:00')

Edit Note The data for this problem has been truncated to only 24 observations from the initial 525 provided. As a result, the window() call has been modified as well to a time within the truncated range.

Data:

dput(SampleData[1:24,c("DateTime","MedTime")])

SampleData = structure(list(DateTime = c("2015-01-01 00:00", "2015-01-01 01:00", "2015-01-01 02:00", "2015-01-01 03:00", "2015-01-01 04:00", "2015-01-01 05:00", "2015-01-01 06:00", "2015-01-01 07:00", "2015-01-01 08:00", "2015-01-01 09:00", "2015-01-01 10:00", "2015-01-01 11:00", "2015-01-01 12:00", "2015-01-01 13:00", "2015-01-01 14:00", "2015-01-01 15:00", "2015-01-01 16:00", "2015-01-01 17:00", "2015-01-01 18:00", "2015-01-01 19:00", "2015-01-01 20:00", "2015-01-01 21:00", "2015-01-01 22:00", "2015-01-01 23:00"), MedTime = c(11, 14, 17, 5, 5, 5.5, 8, NA, 5.5, 6.5, 8.5, 4, 5, 9, 10, 11, 7, 6, 7, 7, 5, 6, 9, 9)), .Names = c("DateTime", "MedTime"), row.names = c(NA, 24L), class = "data.frame")


回答1:


Time Series in R

The ts() object has a few limitations. Most notably, it doesn't accept time stamps per observation. Instead, it requests a start and freq (the end is optional). Furthermore, the freq capabilities are limited to viewing data in terms of seasons.

Type      Frequency 
Annual     1
Quarterly  4
Monthly   12
Weekly    52

Thus, to generate the correct "season" we would have to calculate a daily seasonality where freq=1440 (=24*60). It gets a bit more complicated after that.

As a result, I would highly suggest creating the time series with an xts or zoo object.

Creating a datetime stamp

Next up, one of the reasons for your windowing issues is the date you are supplying is a string and not a POSIXct or POSIXlt object. The prior of which is preferred.

A full breakdown can be found:

Difference between as.POSIXct/as.POSIXlt and strptime for converting character vectors to POSIXct/POSIXlt

Dealing with timestamps in R

With that being said, one of the first steps is to convert your data from character form to POSIXct

# Convert to POSXICT
SampleData$DateTime = as.POSIXct(strptime(SampleData$DateTime, format ="%Y-%m-%d %H:%M"))

Windowing

From there, the windowing issue becomes trivial if we create a xts() object.

# install.packages("xts")
require(xts)

# Create an XTS object to hold the time series
sdts = xts(SampleData$MedTime, order.by = SampleData$DateTime)

# Subset training
train = window(sdts,end= as.POSIXct('2015-01-21 23:00', format ="%Y-%m-%d %H:%M"))


来源:https://stackoverflow.com/questions/36734022/use-hourly-data-in-ts-and-window-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!