Проект Templet

акторный фреймворк для запуска задач
на множестве ядер, кластерах и в облаках
templet.ssau.ru

Инструменты пользователя

Инструменты сайта


translate:using_r_for_time_series_analysis

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
translate:using_r_for_time_series_analysis [2015/01/10 18:54] artamonovtranslate:using_r_for_time_series_analysis [2015/02/05 15:34] (текущий) – внешнее изменение 127.0.0.1
Строка 201: Строка 201:
 === Разложение периодических данных === === Разложение периодических данных ===
  
-TODO+Периодические данные состоят из составляющей тренда, периодической составляющей и нерегулярной составляющей. Разложение временного ряда - разделение этого временного ряда на эти 3 компоненты, то есть оценка этих составляющих. 
 + 
 +Чтобы оценить составляющую тренда и периодическую составляющую периодического временного ряда, который может быть описан аддитивной моделью, мы можем использовать функцию ''decompose()''. Это функция оценивает тренд, периодическую и нерегулярную составляющие временного ряда, который может быть описан аддитивной моделью. 
 + 
 +Функиция ''decompose()'' возвращает список объектов в качестве результата, где содержатся оценки периодической составляющей, тренда и нерегулярной компоненты, хранящиеся в именованых элементах этого списка объектов, называемых "seasonal", "trend" и "random" соответственно. 
 + 
 +Например, как было рассмотрено ранее, временной ряд количества новорожденных по месяца в Нью Йорке - периодический, с пиком каждое лето и провалом каждую зиму, вероятно может быть описан с использованием аддтивной модели, поскольку периодические и случайные флуктации, на первый взгляда, постоянны по величине во времени: 
 + 
 +{{ :translate:r_timeseries_8.png |}} 
 +Для оценки тренда, периодической и нерегулярной составляющей этого временного ряда мы вводим: 
 + 
 +<code rsplus> 
 +> birthstimeseriescomponents <- decompose(birthstimeseries) 
 +</code> 
 + 
 +Оценки значений тренда, периодической и нерегулярной компоненты будут сохранены в переменных  
 +''birthstimeseriescomponents$seasonal'', ''birthstimeseriescomponents$trend'' и ''birthstimeseriescomponents$random''. Например, мы можем вывести оценки значений сезонной компоненты напечатав: 
 + 
 +<code rsplus> 
 +> birthstimeseriescomponents$seasonal # get the estimated values of the seasonal component 
 +       Jan        Feb        Mar        Apr        May        Jun        Jul        Aug        Sep        Oct        Nov        Dec 
 + 1946 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197 
 + 1947 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197 
 + 1948 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197 
 + 1949 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197 
 + 1950 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197 
 + 1951 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197 
 + 1952 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197 
 + 1953 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197 
 + 1954 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197 
 + 1955 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197 
 + 1956 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197 
 + 1957 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197 
 + 1958 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197 
 + 1959 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197 
 +</code> 
 + 
 +Оценки значений сезонной компоненты приведены для месяцев с января по декабрь для каждого года. Наиюольшее значение сезонной составляющей в июле (примерно 1.46), а наименьшее в февреле (примерно -2.08), что соответствует пику рождаемости в июле и провалу в феврале каждого года. 
 + 
 +Мы можем вывести оценки тренда, сеознной и нерегулярной компоненты временного ряда используя функцию ''plot()'', например так: 
 + 
 +<code rsplus> 
 +> plot(birthstimeseriescomponents) 
 +</code> 
 + 
 +{{ :translate:r_timeseries_9.png |}} 
 + 
 +На графиках выше показан исходный временной ряд (верхний график), оценка составляющей тренда(второй сверху), оценка сезонной компоненты(третий сверху) и оценка случайной компоненты(последний). Мы видим, что оценка тренда немного уменьшилась с 24 в 1947 до 22 в 1948, а затем неуклонно росла примерно до 27 в 1959.
  
 === Исключение периодической составляющей === === Исключение периодической составляющей ===
 +Если у вас есть периодический временной ряд, который может быть описан аддитивной моделью, вы можете исключить сезонную компоненту, вычтя оценку сезонной компоненты из исходного временного ряда. Мы можем сделать это, используя оценку сезонной компоненты, вычисленной функцией ''decompose()''.
  
-TODO+Например, для исключения сезонной составляющей временного ряда количества рождений по месяцам в Нью Йорке мы можем оценить сезонную составляющую, используя ''decompose()'', и затем вычесть сезонную компоненту из исходного временного ряда: 
 + 
 +<code rsplus> 
 +> birthstimeseriescomponents <- decompose(birthstimeseries) 
 +> birthstimeseriesseasonallyadjusted <- birthstimeseries - birthstimeseriescomponents$seasonal 
 +</code> 
 + 
 +Затем мы можем вывести график временного ряда без сезонной составляющей при помощи функции ''plot()'': 
 + 
 +<code rsplus> 
 +> plot(birthstimeseriesseasonallyadjusted) 
 +</code> 
 + 
 +{{ :translate:r_timeseries_10.png |}} 
 + 
 +На графике видно, что сезонные перепады были удалены из исходного временного ряда. Получившийся временной ряд содержит только составляющую тренда и нерегулярную составляющую.
  
 ==== Прогнозирование и экспоненциальное сглаживание ==== ==== Прогнозирование и экспоненциальное сглаживание ====
  
-TODO+Экспоненциальное сглаживание может быть использовано для краткосрочных прогнозов данных временного ряда.
  
 === Простое экспоненциальное сглаживание === === Простое экспоненциальное сглаживание ===
 +Если ваш временной ряд может быть описан аддтивной моделью с постоянным уровнем и не содержит сезонных колебаний, вы можете использовать простое экспоненциальное сглаживание для краткосрочного прогнозирования.
  
-TODO+Простое экспоненциальное сглаживание даёт возможность оценить уровень в текущей точке. Сглаживание определяется параметром ''alpha'', изменяющимся в диапазоне от 0 до 1. Значения ''alpha'', которые близки к 0 означают, что более старым наблюдениям в истории будут присвоены меньшие веса при прогнозировании будущих значений. 
 + 
 +Например, файл http://robjhyndman.com/tsdldata/hurst/precip1.dat содержит общее годовое количество осадков в дюймах в Лондоне за период 1813-1912 г. (исходные данные из Hipel and McLeod, 1994). Мы можем прочитать данне в R и вывести их при помощи команды: 
 + 
 +<code rsplus> 
 +> rain <- scan("http://robjhyndman.com/tsdldata/hurst/precip1.dat",skip=1) 
 +  Read 100 items 
 +> rainseries <- ts(rain,start=c(1813)) 
 +> plot.ts(rainseries) 
 +</code> 
 + 
 +{{ :translate:r_timeseries_11.png |}}
  
 === Экспоненциальное сглаживание Хольта === === Экспоненциальное сглаживание Хольта ===
 +Как видно из графика, уровень остаётся примерно постоянным (среднее значение остаётся постоянным на уровне 25 дюймов). Случайные отклонения во временном ряде примерно постоянны по значению, так что, вероятно, мы можем описать данные используя аддитивную модель. То есть, мы можем прогнозировать при помощи простого экспоненциального сглаживания.
 +
 +Для прогнозирования при помощи простого экспоненциального сглаживания в R, мы можем использовать модель прогноза простого экспоненциального сглаживания при помощи функции ''HoltWinters()''. Чтобы использовать ''HoltWinters()'' для простого экспоненциального сглаживания, мы должны установить параметр ''beta=FALSE'' и ''gamma=FALSE'' в функции ''HoltWinters()'' (параметры ''beta'' и ''gamma'' используются в экспоненциальном сглаживании Хольта и в экспоненциальном сглаживании Хольта-Винтера, как описывается ниже).
 +
 +Функция ''HoltWinters()'' возвращает список переменных, которые содержат именованные элементы.
 +
 +Например, чтобы использовать простое экспоненциальное сглаживание для прогнозирования значений временного ряда годовых осадков в Лондоне, мы введём:
 +
 +<code rsplus>
 +> rainseriesforecasts <- HoltWinters(rainseries, beta=FALSE, gamma=FALSE)
 +> rainseriesforecasts
 +  Smoothing parameters:
 +  alpha:  0.02412151
 +  beta :  FALSE
 +  gamma:  FALSE
 +  Coefficients:
 +    [,1]
 +  a 24.67819
 +</code>
 +
 +Вывод функции ''HoltWinters()'' сообщает нам, что оценка значения параметра ''alpha'' примерно 0.024. Это очень близко к 0, что говорит нам, что прогноз основан на более поздних значениях и в меньшей степени на ранних значениях.
 +
 +По умолчанию, ''HoltWinters()'' делает прогноз только для того же периода времени, что и в исходном временном ряду. В это случае, исходный временной ряд включает осадки в Лондоне за 1813-1912, так что прогноз тоже для периода 1813-1912.
  
 TODO TODO
translate/using_r_for_time_series_analysis.1420916088.txt.gz · Последнее изменение: 2015/01/10 18:54 — artamonov