2016-04-20 4 views
3

У меня есть часовые данные, как пример ниже, который я пытаюсь создать с помощью временного ряда и использовать функцию окна. Моя конечная цель - использовать это для обучения модели Arima. Мне трудно получить ts() или window() для работы с моим форматом даты. Я также пробовал использовать msts(), но не смог заставить его работать с форматом даты. Я получил xts() для работы, но он не работает правильно с window() или Arima().Использование часовых данных в функции ts и window

Возможно ли использовать формат даты с 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') 

Редактировать Примечание Данные для этой проблемы была усечена только 24 наблюдений из первоначального 525 при условии. В результате, вызов window() был изменен также на время в пределах усеченного диапазона.

данных:

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

SampleData = структура (список (DateTime = с ("2015-01-01 00:00", "2015-01-01 1: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 : «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 ", " 20 15-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), класс = "data.frame")

+1

Я не думаю, что нам нужны 525 примерных случаев. Можете ли вы немного уменьшить его? – thelatemail

ответ

4

временных рядов в R

объект ts() имеет несколько ограничений. В частности, он не принимает отметки времени для каждого наблюдения. Вместо этого он запрашивает start и freq (end не является обязательным). Кроме того, возможности freq ограничены просмотром данных с точки зрения сезонов.

Type  Frequency 
Annual  1 
Quarterly 4 
Monthly 12 
Weekly 52 

Таким образом, чтобы создать правильный "сезон" мы должны рассчитать ежедневно сезонности где freq=1440 (= 24 * 60). После этого становится немного сложнее.

В результате я бы предложил предложить временные ряды с объектами xts или zoo.

Создание даты-

Далее вверх, одна из причин ваших проблем оконных является датой поставки вы является строкой и не 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")) 
+0

Почему вы сказали, что 24 * 60 - это ежедневная частота? Если месячные, еженедельные частоты составляют 12 и 52 соответственно, не должна ли дневная частота быть 365? – Ahmedov

+0

24 * 60 - это ежедневная минутная частота. 24 * 2 - это получасовая частота. 24 * 3600 - ежедневная вторая частота и так далее. 365 в этом случае будет ежедневной сезонностью. Правильная сезонность действительно должна быть 24, и если данные существуют в течение года, то 8766 (365,25 * 24). – coatless