Комментарии: Во - первых , я хотел бы сказать большое спасибо автору этого новые tsoutliers пакет , который реализует Чен и Лю обнаружения временных рядов останец , который был опубликован в журнале Американской статистической ассоциации в 1993 году Open Source программного обеспечения .
Пакет итеративно обнаруживает 5 различных типов выбросов в данных временных рядов:
- Аддитивный выброс (АО)
- Инновационный выброс (IO)
- Сдвиг уровня (LS)
- Временное изменение (ТС)
- Сезонный сдвиг уровня (SLS)
Еще более здорово то, что этот пакет реализует auto.arima из пакета прогноза, поэтому обнаружение выбросов происходит без проблем. Также пакет создает хорошие графики для лучшего понимания данных временных рядов.
Ниже приведены мои вопросы:
Я попытался запустить несколько примеров, используя этот пакет, и он отлично работал. Аддитивные выбросы и сдвиг уровня интуитивно понятны. Тем не менее, у меня было 2 вопроса относительно передачи временных изменений и инновационных выбросов, которые я не могу понять.
Пример выброса временного изменения:
Рассмотрим следующий пример:
library(tsoutliers)
library(expsmooth)
library(fma)
outlier.chicken <- tsoutliers::tso(chicken,types = c("AO","LS","TC"),maxit.iloop=10)
outlier.chicken
plot(outlier.chicken)
Программа правильно обнаруживает сдвиг уровня и временное изменение в следующем месте.
Outliers:
type ind time coefhat tstat
1 LS 12 1935 37.14 3.153
2 TC 20 1943 36.38 3.350
Ниже сюжет и мои вопросы.
- Как записать временное изменение в формате уравнения? (Сдвиг уровня можно легко записать в виде двоичной переменной, в любое время до 1935 года / Obs 12 равен 0, а в любое время после 1935 года и после равен 1).
Уравнение для временного изменения в руководстве пакета и в статье дано как:
где составляет 0,7. Я просто пытаюсь перевести это на пример выше.
- Мой второй вопрос касается инновационного выброса, я никогда не
сталкивался с инновационным выбросом на практике. любой числовой пример или пример случая был бы очень полезен.
Редактировать: @Irishstat, функция tsoutliers делает отличную работу по выявлению выбросов и предложению подходящей модели ARIMA. Глядя на набор данных Nile, см. Ниже применение auto.arima и затем применение tsoutliers (со значениями по умолчанию, которые включают auto.arima):
auto.arima(Nile)
Series: Nile
ARIMA(1,1,1)
Coefficients:
ar1 ma1
0.2544 -0.8741
s.e. 0.1194 0.0605
sigma^2 estimated as 19769: log likelihood=-630.63
AIC=1267.25 AICc=1267.51 BIC=1275.04
После применения функции tsoutliers он определяет выбросы LS и аддитивные выбросы и рекомендует порядок ARIMA (0,0,0).
nile.outliers <- tso(Nile,types = c("AO","LS","TC"))
nile.outliers
Series: Nile
ARIMA(0,0,0) with non-zero mean
Coefficients:
intercept LS29 AO43
1097.7500 -242.2289 -399.5211
s.e. 22.6783 26.7793 120.8446
sigma^2 estimated as 14401: log likelihood=-620.65
AIC=1249.29 AICc=1249.71 BIC=1259.71
Outliers:
type ind time coefhat tstat
1 LS 29 1899 -242.2 -9.045
2 AO 43 1913 -399.5 -3.306
источник
tsoutliers
была переименована,tso
чтобы избежать конфликта с функцией с тем же именем в пакетеforecast
.clang
иgcc
и ни работы. Я думаю, что это потрясающий пакет, но установка действительно разбила мне сердце.Ответы:
filter
В вашем примере вы можете использовать функцию
outliers.effects
для представления влияния обнаруженных выбросов на наблюдаемые серии:Инновационный выброс IO более своеобразен. В отличие от других типов выбросов, рассмотренных в
tsoutliers
, влияние IO зависит от выбранной модели и оценок параметров. Этот факт может быть неприятным в серии со многими выбросами. На первых итерациях алгоритма (где влияние некоторых выбросов не может быть обнаружено и скорректировано) качество оценок модели ARIMA может быть недостаточно хорошим, чтобы точно определить IO. Более того, по мере продвижения алгоритма может быть выбрана новая модель ARIMA. Таким образом, можно обнаружить IO на предварительном этапе с помощью модели ARIMA, но в конечном итоге его динамика определяется другой моделью ARIMA, выбранной на последнем этапе.В этом документе показано, что в некоторых обстоятельствах влияние IO может возрасти, поскольку дата его возникновения становится все более отдаленной от прошлого, что трудно интерпретировать или предположить.
У IO есть интересный потенциал, поскольку он может охватывать сезонные выбросы. Другие типы выбросов, рассматриваемые в,
tsoutliers
не могут охватить сезонные модели. Тем не менее, в некоторых случаях может быть лучше искать возможные сезонные сдвиги уровня, SLS вместо IO (как показано в документе, упомянутом ранее).У IO есть привлекательная интерпретация. Иногда его понимают как аддитивный выброс, который влияет на член возмущения, а затем распространяется в серии в соответствии с динамикой модели ARIMA. В этом смысле IO подобен аддитивному выбросу, оба они влияют на одно наблюдение, но IO является импульсом в выражении возмущения, в то время как AO является импульсом, добавляемым непосредственно к значениям, генерируемым моделью ARIMA или процессом генерирования данных. , Вопрос о том, влияют ли выбросы на инновации или находятся за пределами условия нарушения, может быть предметом обсуждения.
В предыдущей ссылке вы можете найти некоторые примеры реальных данных, в которых обнаруживается IO.
источник
forecast::auto.arima
вместе с темtsoutliers
, что все становится автоматизированным. Тем не менее, рекомендуется запускать автоматические процедуры с альтернативными опциями. Вы можете сначала, например, посмотреть ACF или модульные корневые тесты, а затем выбрать модель ARIMA для передачиtsoutliers
. Если для предложенной вами модели найдены какие-либо выбросы, вы можете повторить анализ для скорректированного ряда. Это итеративный процесс. Автоматическая процедура предоставляет полезное руководство, но оно не обязательно дает окончательное или уникальное решение.maxit.iloop
до 5-6 и посмотреть, изменится ли результат. Если предупреждение возвращается с большимmaxit.iloop
(например, 20 или более), это может быть признаком того, что что-то не смоделировано должным образом. Удаление IO из рассматриваемых типов выбросов может быть хорошим вариантом в некоторых случаях. В большинстве случаев вы можете игнорировать предупреждение. Вы можете использовать,suppressWarnings
чтобы избежать их.