2016-08-01 3 views
1

Я не понимаю, как создаются объекты временных рядов в R. У меня есть данные: data = c(101,99,97,95,93,91,89,87,85,83,81) (меньший набор данных для краткости). Эти данные берутся один раз в день в течение 11 дней, начиная с 2016-07-05 до 2016-07-15. Согласно docs, частота для данных, взятых ежедневно, должна быть 7. Но я не понимаю значения для параметров start и end. Для start, docs говорят: the time of the first observation. Either a single number or a vector of two integers, which specify a natural time unit and a (1-based) number of samples into the time unit. Я не понимаю, что такое 1-based number of samples. Я попытался это сделать, но это не помогло.создание временных рядов для данных, взятых ежедневно в R

Если я просто использовать 2016,7 в качестве начала и окончания, я просто получаю:

Time Series: 
Start = c(2016, 7) 
End = c(2016, 7) 
Frequency = 7 
[1] 101 

Если я использую 2016,7,1 и 2016,7,11 в качестве начала и окончания, я все еще получаю тот же результат.

Что я делаю неправильно?

ответ

1

Я думаю, что лучший способ - переключиться на xts или зоопарк, так как согласно другому вопросу here, ts() борется с ежедневными наблюдениями, так как количество дней варьируется между годами.

+0

Я использую временные ряды для прогнозирования. Я пытался использовать 'xts', и он хранит данные в ожидаемом формате (например, отметка времени и значение для этой метки времени). Но вывод, который я получил от вызова 'прогноз', используя объект xts, является объектом' ts', который больше не содержит эти метки времени. Я просто вижу значения. –

+0

Единственный способ исправить это, добавив даты вручную обратно в объект ts, как описано здесь. Http://stackoverflow.com/a/10347205/5795592 Не знаю, было бы проще просто использовать данные. кадр с столбцом Date. – hannes101

0

Как я понял, в функции ts() единица измерения - год. Поэтому здесь frequency должно быть установлено 365 (дней в году). Соответственно, start и end также должны представлять дни. Однако (я считаю, что), чтобы получить правильное время, start и end должны быть разницей в днях желаемого интервала с начала года (в вашем конкретном случае, 186 и 196 соответственно). Целесообразность этих чисел можно проверить с помощью:

as.numeric(as.Date("2016-07-05") - as.Date("2016-01-01")) 
[1] 186 
as.numeric(as.Date("2016-07-15") - as.Date("2016-01-01")) 
[1] 196 

Встраивания этих данных в код вызов ts() должен быть:

data = c(101,99,97,95,93,91,89,87,85,83,81) 
ts(data, start = c(2016, 186), end = c(2016, 196), frequency = 365) 
# which yielded 
Time Series: 
Start = c(2016, 186) 
End = c(2016, 196) 
Frequency = 365 
[1] 101 99 97 95 93 91 89 87 85 83 81 

НТН

Смежные вопросы