我有小时数据,如下面的示例,我正在尝试创建时间序列并使用窗口函数。我的最终目标是使用它来训练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”)
答案 0 :(得分:3)
ts()
对象有一些限制。最值得注意的是,它并不接受每次观察的时间戳。相反,它会请求start
和freq
(end
是可选的)。此外,freq
功能仅限于根据季节查看数据。
Type Frequency
Annual 1
Quarterly 4
Monthly 12
Weekly 52
因此,要产生正确的季节&#34;我们必须计算每日季节性,其中freq=1440
(= 24 * 60)。之后它变得有点复杂。
因此,我强烈建议您使用xts
或zoo
对象创建时间序列。
接下来,您的窗口问题的原因之一是您提供的日期是字符串而不是 POSIXct 或 POSIXlt 宾语。其优先选择。
可以找到完整的细分:
话虽如此,最初的步骤之一是将您的数据从字符表单转换为 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"))