在ts和window函数

时间:2016-04-20 04:45:31

标签: r time-series forecasting

我有小时数据,如下面的示例,我正在尝试创建时间序列并使用窗口函数。我的最终目标是使用它来训练Arima模型。我很难让ts()window()使用我的日期时间格式。我也尝试使用msts(),但无法使用日期时间格式。我已经xts()开始工作,但它似乎与window()Arima()无法正常工作。

是否可以将此日期时间格式与ts()window()功能一起使用?任何提示都非常感谢。

代码:

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

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

编辑注释此问题的数据已被截断为仅提供的初始525中的24个观察值。因此,window()调用也已被修改为截断范围内的时间。

数据:

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)),。Name = c(“DateTime”,“MedTime”),row.names = c(NA,                                                                                                                                                      24L),class =“data.frame”)

1 个答案:

答案 0 :(得分:3)

R

中的时间序列

ts()对象有一些限制。最值得注意的是,它并不接受每次观察的时间戳。相反,它会请求startfreqend是可选的)。此外,freq功能仅限于根据季节查看数据。

Type      Frequency 
Annual     1
Quarterly  4
Monthly   12
Weekly    52

因此,要产生正确的季节&#34;我们必须计算每日季节性,其中freq=1440(= 24 * 60)。之后它变得有点复杂。

因此,我强烈建议您使用xtszoo对象创建时间序列。

创建日期时间戳

接下来,您的窗口问题的原因之一是您提供的日期是字符串而不是 POSIXct POSIXlt 宾语。其优先选择。

可以找到完整的细分:

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

Dealing with timestamps in R

话虽如此,最初的步骤之一是将您的数据从字符表单转换为 POSIXct

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

窗口化

如果我们创建一个xts()对象,那么窗口问题变得微不足道。

# 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"))