В R существует специальный класс объектов для работы с данными, представляющими собой временные ряды - ts (от time series - временной ряд). Для создания объектов этого класса служит одноименная функция - ts().
В качестве примера рассмотрим ежемесячные данные по рождаемости в г. Нью-Йорк, собранные в период с января 1946 г. по декабрь 1959 г. (пример заимстован из электронной книги A Little Book of R for Time Series). Эти данные можно загрузить с сайта проф. Роба Хиндмана (Rob J. Hyndman) следующим образом:
birth <- scan("http://robjhyndman.com/tsdldata/data/nybirths.dat") Read 168 items
Объект birth представляет собой вектор со всеми 168 ежемесячными значениями рождаемости (в тыс. человек), в чем можно убедиться при помощи функции is.vector():
is.vector(birth) [1] TRUE
Функция head() позволяет просмотреть первые несколько значений вектора birth (по умолчанию первые 6 значений):
head(birth) [1] 26.663 23.598 26.931 24.740 25.806 24.364
Преобразовать объект birth во временной ряд очень просто:
В приведенной команде аргумент start был использован для того, чтобы указать дату, с которой начинается временной ряд birth.ts (1946 год, 1-й месяц). Дополнительный аргумент frequency (частота) позволяет задать шаг приращения последующих дат - в рассматриваемом примере год разбивается на 12 промежутков, так что шаг приращения составляет 1 месяц. Созданный таким образом объект birth.ts при просмотре внешне напоминает матрицу. При этом строкам и столбцам этой матрицы были автоматически (исходя из значений аргументов start и frequency) присвоены соответствующие имена:
birth.ts Jan Feb Mar Apr May Jun Jul Aug Sep 1946 26.663 23.598 26.931 24.740 25.806 24.364 24.477 23.901 23.175 1947 21.439 21.089 23.709 21.669 21.752 20.761 23.479 23.824 23.105 1948 21.937 20.035 23.590 21.672 22.222 22.123 23.950 23.504 22.238 1949 21.548 20.000 22.424 20.615 21.761 22.874 24.104 23.748 23.262 1950 22.604 20.894 24.677 23.673 25.320 23.583 24.671 24.454 24.122 1951 23.287 23.049 25.076 24.037 24.430 24.667 26.451 25.618 25.014 1952 23.798 22.270 24.775 22.646 23.988 24.737 26.276 25.816 25.210 1953 24.364 22.644 25.565 24.062 25.431 24.635 27.009 26.606 26.268 1954 24.657 23.304 26.982 26.199 27.210 26.122 26.706 26.878 26.152 1955 24.990 24.239 26.721 23.475 24.767 26.219 28.361 28.599 27.914 1956 26.217 24.218 27.914 26.975 28.527 27.139 28.982 28.169 28.056 1957 26.589 24.848 27.543 26.896 28.878 27.390 28.065 28.141 29.048 1958 27.132 24.924 28.963 26.589 27.931 28.009 29.229 28.759 28.405 1959 26.076 25.286 27.660 25.951 26.398 25.565 28.865 30.000 29.261 Oct Nov Dec 1946 23.227 21.672 21.870 1947 23.110 21.759 22.073 1948 23.142 21.059 21.573 1949 22.907 21.519 22.025 1950 24.252 22.084 22.991 1951 25.110 22.964 23.981 1952 25.199 23.162 24.707 1953 26.462 25.246 25.180 1954 26.379 24.712 25.688 1955 27.784 25.693 26.881 1956 29.136 26.291 26.987 1957 28.484 26.634 27.735 1958 27.945 25.912 26.619 1959 29.012 26.992 27.897
Функция is.ts() позволяет проверить, действительно ли созданный нами объект birth.ts является временным рядом:
is.ts(birth.ts) [1] TRUE
В R имеется достаточно большой набор методов для работы с объектами класса ts. В частности, при помощи функции plot() можно быстро изобразить временной ряд графически:
plot(birth.ts, xlab = "Время", ylab = "Рождаемость, тыс. чел.")
--
Создано при помощи Pretty R на сайте inside-R.org
Отправить комментарий