В R существует специальный
класс объектов для работы с данными, представляющими собой временные ряды - ts (от time series - временной ряд).
Объект класса ts - это двумерный объект,
в котором строки - это номер цикла (периода) например, год, месяц, неделя, а
столбцы - единицы цикла (периода) например дни, месяцы, недели. Цикл (период)
состоит из элементов цикла , количество элементов определяется частотой.
Объект ts состоит из двух
элементов - значений временного ряда и соответствующих им временных меток.
Кроме того, он также имеет несколько атрибутов, такие как серия, цикл, частота,
и интервал времени между каждым последовательным наблюдением.
Для создания объектов
этого класса служит одноименная функция - ts(). Основной синтаксис ts приведен ниже: ts(data, start, end, frequency) Здесь: Data: это вектор или матрица, содержащая значения данных;
start: Это
начальная точка или время первого наблюдения end: Это момент времени последнего наблюдения frequency: количество
циклов в периоде start и end
функции ts
определяют время первого и последнего наблюдения соответственно
Аргументы start и end функции ts определяют время первого и последнего наблюдения
соответственно. Эти аргументы могут определяется либо одним целым числом, либо
вектором из двух целых чисел. Например, мы можем переопределить наш месячный
временной ряд тремя возможными способами и в конце с помощью функции identical подтвердить, что
они определяют один и тот же объект ts.
#Определяем
время начала вектором двумя целыми числами
ts1_month <- ts(data = df_month$visit,
start = c(2015, 1),
frequency = 12)
# Определяем время начала вектором одним целым числом
ts2_month <- ts(data = df_month$visit,
start = 2015,
frequency = 12)
# Определяем время конца вектором двумя целыми числами
ts3_month <- ts(data = df_month$visit,
end = c(2019, 12),
frequency = 12)
# Сравнивая все три серии с серией my_ts
identical(ts1_month, ts2_month, ts3_month)
## [1] TRUE
Дальше будем
работать с первым вариантом, точнее с первым именем
ts1_month
## Jan
Feb Mar Apr
May Jun Jul
Aug Sep Oct
Nov Dec
## 2015 15262 7055 9901 9046 10894 9441 9860 10550 10214 12929 13640 12119
## 2016 14032 6739 9104 8601 8880 8271 9024 9126 9437 11078 12862 11448
## 2017 12046 5919 8172 7348 7835 7509 7685 8055 8515 9394 10718 9950
## 2018 10819 4997 7639 6338 6831 6725 6423 7173 7080 8082 9448 8239
## 2019 9096 4061 6232 5230 6338 5468 5419 6207 5730 6784 8102 6621
## 2015 15262 7055 9901 9046 10894 9441 9860 10550 10214 12929 13640 12119
## 2016 14032 6739 9104 8601 8880 8271 9024 9126 9437 11078 12862 11448
## 2017 12046 5919 8172 7348 7835 7509 7685 8055 8515 9394 10718 9950
## 2018 10819 4997 7639 6338 6831 6725 6423 7173 7080 8082 9448 8239
## 2019 9096 4061 6232 5230 6338 5468 5419 6207 5730 6784 8102 6621
Класс полученного
объекта можно определить с помощью функции class
class(ts1_month)
## [1] "ts"
Быстро ознакомится с
особенностями временного ряда можно построив график объекта ts с помощью функции plot
plot.ts(ts1_month,
main = "Посетители магазина одежды по месяцам 2015-2019 годы",
xlab = "Месяц",
ylab = "Количество посетителей",
ylim = c(3000, 16000)
)
main = "Посетители магазина одежды по месяцам 2015-2019 годы",
xlab = "Месяц",
ylab = "Количество посетителей",
ylim = c(3000, 16000)
)
Также можно проверить
принадлежность нашего объекта к классу ts и вывести его длину
# Проверяем класс объекта
is.ts(ts1_month)
## [1] TRUE
# Получаем количество наблюдений
length(ts1_month)
## [1] 60
Класс ts преобразует элементы
последовательности в виде таблицы, где строки представляют номер цикла, а
столбцы представляют единица цикла. В случае нашего набора данных, каждый
календарный год - это полный цикл, а месяцы являются единицами этого цикла.
Функции cycle и time
выводят единицы цикла и временные метки каждого наблюдения в временной серии.
head(cycle(ts1_month),
24)
## [1]
1 2 3
4 5 6
7 8 9 10 11 12
1 2 3
4 5 6
7 8 9 10 11 12
head(time(ts1_month),
12)
## [1] 2015.000 2015.083 2015.167
2015.250 2015.333 2015.417 2015.500 2015.583
## [9] 2015.667 2015.750 2015.833 2015.917
## [9] 2015.667 2015.750 2015.833 2015.917
При выводе временных
меток с помощью функции time можно увидеть временной шаг между наблюдениями,
он равен 1/частота, в случае месячной частоты этот шаг равен 1/12 ~ 0.083 при
квартальной частоте этот шаг равен 0.25. У первого значения в цикле временная
метка равна нулю.
Также с помощью функций
frequency и deltat можно вывести
частоту и величину временного шага
frequency(ts1_month)
## [1] 12
deltat(ts1_month)
## [1] 0.08333333
С помощью функции ts_info можно получить
краткое описание объекта
ts_info(ts1_month)
## The ts1_month series is a ts object with 1
variable and 60 observations
## Frequency: 12
## Start time: 2015 1
## End time: 2019 12
## Frequency: 12
## Start time: 2015 1
## End time: 2019 12
С помощью
функции ts
сделаем дневной и квартальный временные ряды
ts_day <- ts(data = df_day$visit,
start = c(2015, 1),
frequency = 365.25)
ts_qr <- ts(data = df_qr$visit,
start = c(2015, 1),
frequency = 4)
start = c(2015, 1),
frequency = 365.25)
ts_qr <- ts(data = df_qr$visit,
start = c(2015, 1),
frequency = 4)
У дневного
временного ряда из-за високосного года частота не 365, а 365.25
Выведем графики этих
рядов
plot.ts(ts_day,
main = "Посетители магазина одежды по дням 2015-2019",
xlab = "День",
ylab = "Количество посетителей")
main = "Посетители магазина одежды по дням 2015-2019",
xlab = "День",
ylab = "Количество посетителей")
plot.ts(ts_qr,
main = "Посетители магазина одежды по кварталам 2015-2019",
xlab = "Квартал",
ylab = "Количество посетителей")
main = "Посетители магазина одежды по кварталам 2015-2019",
xlab = "Квартал",
ylab = "Количество посетителей")
Далее рассмотрим
функции для манипулирования данными ts объектов.
Функция window
Функция window предназначена для
выделения данных в определенном временном диапазоне. Основными аргументы
функции window являются start и end,
которые определяют начало и конец рассматриваемого периода. Например, извлечь
количество посетителей по месяцам за четыре года месячного набора данных можно
таким образом :
window(ts1_month, start = c(2015,1), end = c(2018, 12))
## Jan
Feb Mar Apr
May Jun Jul
Aug Sep Oct
Nov Dec
## 2015 15262 7055 9901 9046 10894 9441 9860 10550 10214 12929 13640 12119
## 2016 14032 6739 9104 8601 8880 8271 9024 9126 9437 11078 12862 11448
## 2017 12046 5919 8172 7348 7835 7509 7685 8055 8515 9394 10718 9950
## 2018 10819 4997 7639 6338 6831 6725 6423 7173 7080 8082 9448 8239
## 2015 15262 7055 9901 9046 10894 9441 9860 10550 10214 12929 13640 12119
## 2016 14032 6739 9104 8601 8880 8271 9024 9126 9437 11078 12862 11448
## 2017 12046 5919 8172 7348 7835 7509 7685 8055 8515 9394 10718 9950
## 2018 10819 4997 7639 6338 6831 6725 6423 7173 7080 8082 9448 8239
А с помощью такого
выражения вывести значения марта по годам
window(ts1_month, start = c(2015,3),frequency = 1)
## Time Series:
## Start = 2015.167
## End = 2019.167
## Frequency = 1
## [1] 9901 9104 8172 7639 6232
## Start = 2015.167
## End = 2019.167
## Frequency = 1
## [1] 9901 9104 8172 7639 6232
Агрегирование ts объектов
Функция aggregate из пакета stats является обобщенной
функцией агрегирования таких объектов как ts и data.frame . В контексте объекта ts она дает возможность свернуть частоты серии к
более низкому частота (например, от месяца до квартального). Например, c ее помощью из месячного
получим квартальный временной ряд и сравним его с ранее созданным
ts_qr_new <- aggregate(ts1_month,
nfrequency = 4, FUN = "sum")
identical(ts_qr, ts_qr_new)
identical(ts_qr, ts_qr_new)
## [1] TRUE
Комментариев нет:
Отправить комментарий