0:12
Шестая лекция, лабораторная часть.
Автокорреляция.
Сейчас мы поработаем с данными, в которых присутствует автокорреляция.
Открываем заготовку
шестой недели, еlab_06_before.R.
Соответственно, загружаем все пакеты, которые нам потребуются на этот раз.
Нам потребуется уйма пакетов дополнительных: и lubridate для
работы с данными, и sandwich для робастных стандартных ошибок,
и три пакета для тестов, и пакеты для создания временных рядов,
и манипуляция с данными, и пакет для рисования графиков,
а также пакеты для загрузки данных из интернет-источников,
потому что в Интернете огромное количество открытых данных по временным рядам,
как по финансовым, так и экономическим, и, конечно, можно их, заходить на нужный
сайт, скачивать, сохранять в виде файла, потом этот файл читать в R,
но поскольку R – это очень популярный статистический пакет, то, скорее всего,
если сайт популярный, то загрузка уже реализована в каком-нибудь пакете R.
Пакеты broom, bstats, rusquant и sophisthse,
они находятся не на официальном репозитории, экран, а ставятся с github.
Вот на всякий случай наверху закомментированы команды,
которые позволяют их поставить.
Остальные пакеты ставятся стандартно с официального репозитория.
Как там у нас, все заготовлено?
Поехали!
Давайте для начала определимся, как в R работать с данными,
поскольку у временных рядов, естественно, есть такая характеристика,
как дата, когда было получено это наблюдение.
Как правило, даты, которые у вас уже есть, они в текстовом формате.
Ну, давайте введем какой-нибудь x, который будет просто текстовой переменной,
и это будет датой в произвольном формате, допустим, 2012,
четвертый месяц, 15-е число и, скажем,
2011, восьмой месяц, 17-е число.
Вот x состоит, это просто пока вектор из строк.
Соответственно, пакет lubridate, который был загружен в самом начале, он позволяет
конвертировать такие текстовые даты в стандартный формат с датами.
Давайте отконвертируем y.
Нам надо указать, в каком порядке идут год, месяц и день.
Соответственно, у нас идут сначала год (year),
потом идет месяц (month), и потом идет день (day).
Соответственно, этот формат – это ymd, year-month-day, от x, ymd(x).
Соответственно, что произошло?
Давайте посмотрим на наш y.
R их распознал, чем стало лучше?
Оказывается, с датами можно выполнять многие операции,
которые обычно выполняют с числами.
Например, есть на датах определенная операция сложения.
Я могу к текущей дате прибавить 10 дней.
Возьму и, например, или давайте даже 20, напишу, соответственно, y + days(20).
Соответственно, если к исходным датам прибавить 20 дней,
вот как компьютер аккуратненько переведет месяцы в нужные, помня о том,
сколько в том месяце дней: 30, 31 или даже 28.
Точно так же можно попытаться прибавить несколько лет или отнять,
например, из y отнять 10 лет и получить данные 10 лет назад даты.
Точно так же из этого y можно вытащить,
собственно, дни, 15,
17 число, месяцы можно вытащить, и,
конечно, год можно вытащить.
Подробную информацию о других возможностях пакета lubridate,
соответственно, можно посмотреть в его документации.
У него замечательная виньетка есть, которая вызывается командой
vignette("lubridate"), и можно посмотреть на официальную документацию,
которая там очень удачно написана.
Теперь создадим наш первый временной ряд,
то есть значения числовые x,
занумерованные временем, то есть каждому x будет сопоставлена какая-то дата.
Временные ряды бывают разные.
Есть стандартные типы, есть, например, годовые временные ряды,
где каждому году соответствует один показатель месячный, квартальный, дневные,
бывают нерегулярные, бывают посекундные какие-нибудь котировки.
Для начала начнем с какого-нибудь набора данных,
где одно наблюдение соответствует одному дню.
Создадим какую-нибудь, просто для примера переменную x,
пусть это будут нормальные случайные величины в количестве пяти штук,
то есть x – это просто 5 чисел.
Давайте я окошко сделаю чуть-чуть побольше.
Создадим даты.
Допустим, у меня даты начинаются,
стартовая дата пусть
будет 2014-01-01,
и плюс дни от 0 до 4 прибавлю.
Соответственно, y – это у меня будет вектор дат.
И, соответственно,
я создаю объект, временной ряд, где данные будут находиться в переменной x,
а переменная y, вектор y будет отвечать за даты соответствующих наблюдений.
Пакет, который реализует, в частности, возможность нерегулярных дат,
например, данные могут быть с пропусками, не каждый день,
– это пакет zoo.
Соответственно, мы введем объект от ts, это наш временной ряд.
Это будет zoo(x,order.by=y), а упорядочены наши
наблюдения будут в порядке, задаваемом переменной y.
Соответственно, у нас появился объект ts,
и здесь уже каждому числовому значению соответствует
некая привязанная дата, 0.09 – привязанная дата 2014-01-02.
Какие появились плюсы?
Чем такой сложный, составной объект стал лучше, чем просто x?
Тем, что появились различные функции, которые позволяют смотреть вперед на
несколько дней или назад на несколько дней.
Ну, например, можно посмотреть логированное, то есть прошлое,
значение переменной ts на шаг, на день назад: lag(ts,-1).
Вот, например, значение переменной на день назад:
2014-01-02 показатель день назад был -0.19,
то есть вчерашний показатель для даты 2014-01-02,
то есть для 2014-01-01 он является текущим,
а для 2014-01-02 он является вчерашним.
Можно посмотреть, как выглядит один lag вперед: lag(ts,1).
Соответственно, это для каждой даты посчитан автоматом завтрашний показатель.
Можно, например, посмотреть разницу изменения.
Когда изучают валютный курс, например, смотрят изменения валютного курса,
то есть разницу,
насколько показатель менялся, то есть в первый раз он возрос на 0.29,
потом возрос на 1.25, потом упал на -0.85 и так далее.
Соответственно, помимо дневных, как уже было сказано,
могут быть месячные, квартальные.
Как правило, месячные и квартальные данные, они появляются редко и они
являются регулярными, поэтому давайте введем какой-нибудь объект ts2.
Это будет zooreg, то есть регулярный временной ряд, то есть есть каждое
наблюдение, ну, за редким исключением, они будут обозначены n/a как пропуски.
Ряд x, указываем стартовую дату,
пусть у нас будут квартальные наблюдения yearqtr,
квартальные с, скажем,
2014- 01 квартала.
И, соответственно, частота данных, надо указать,
частота данных будет 4 наблюдения в год.
Соответственно, можно посмотреть на набор данных ts2,
ts2 – это квартальные данные, 2014,
1 квартал, 2014, 2 квартал и так далее, 2015, 01 квартал.
Аналогично можно ввести месячные данные.
Что поменяется в этой команде?
Надо указать, что данными являются год и месяц, yearmon.
Частота таких данных – 12 наблюдений в год.
Давайте назовем этот временной ряд ts3.
Соответственно, мы получили месячные показатели.