Обнаружение выбросов во временных рядах (LS / AO / TC) с использованием пакета tsoutliers в R. Как представить выбросы в формате уравнения?

35

Комментарии: Во - первых , я хотел бы сказать большое спасибо автору этого новые tsoutliers пакет , который реализует Чен и Лю обнаружения временных рядов останец , который был опубликован в журнале Американской статистической ассоциации в 1993 году Open Source программного обеспечения .р

Пакет итеративно обнаруживает 5 различных типов выбросов в данных временных рядов:

  1. Аддитивный выброс (АО)
  2. Инновационный выброс (IO)
  3. Сдвиг уровня (LS)
  4. Временное изменение (ТС)
  5. Сезонный сдвиг уровня (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).

Уравнение для временного изменения в руководстве пакета и в статье дано как:

L(В)знак равно11-δВ

где составляет 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

введите описание изображения здесь

предсказатель
источник
8
Я рад видеть, что вы нашли пакет полезным, спасибо! Кстати, я исправил опечатку в функции, которая отображает результаты так, что в следующем выпуске пакета ось Y будет охватывать диапазон как исходного, так и скорректированного ряда.
javlacalle
2
В последней версии пакета функция tsoutliersбыла переименована, tsoчтобы избежать конфликта с функцией с тем же именем в пакете forecast.
javlacalle
1
@javlacalle Я скачал последнюю версию пакета tsoutliers, в которой все еще есть tsoutliers, а не tso. Я не уверен, когда пакет будет обновлен. Я рад, что у нас разные названия.
синоптик
Я бросился немного информируя об обновлении. Это займет некоторое время, пока он не будет обновлен на CRAN. Я только что видел, что последнюю версию 0.4 можно скачать с CRAN.
javlacalle
@javlacalle Я обнаружил, что tsoutliers очень сложно установить на мой Mac. Я Brew установлен GSL, я попытался собрать с помощью clangи gccи ни работы. Я думаю, что это потрясающий пакет, но установка действительно разбила мне сердце.
B.Mr.W.

Ответы:

19

filterδзнак равно0δзнак равно1

tc <- rep(0, 50)
tc[20] <- 1
tc1 <- filter(tc, filter = 0, method = "recursive")
tc2 <- filter(tc, filter = 0.3, method = "recursive")
tc3 <- filter(tc, filter = 0.7, method = "recursive")
tc4 <- filter(tc, filter = 1, method = "recursive")
par(mfrow = c(2,2))
plot(tc1, main = "TC delta = 0")
plot(tc2, main = "TC delta = 0.3")
plot(tc3, main = "TC delta = 0.7")
plot(tc4, main = "TC delta = 1", type = "s")

современное изменение

В вашем примере вы можете использовать функцию outliers.effectsдля представления влияния обнаруженных выбросов на наблюдаемые серии:

# unit impulse
m1 <- ts(outliers.effects(outlier.chicken$outliers, n = length(chicken), weights = FALSE))
tsp(m1) <- tsp(chicken)
# weighted by the estimated coefficients
m2 <- ts(outliers.effects(outlier.chicken$outliers, n = length(chicken), weights = TRUE))
tsp(m2) <- tsp(chicken)

Инновационный выброс IO более своеобразен. В отличие от других типов выбросов, рассмотренных в tsoutliers, влияние IO зависит от выбранной модели и оценок параметров. Этот факт может быть неприятным в серии со многими выбросами. На первых итерациях алгоритма (где влияние некоторых выбросов не может быть обнаружено и скорректировано) качество оценок модели ARIMA может быть недостаточно хорошим, чтобы точно определить IO. Более того, по мере продвижения алгоритма может быть выбрана новая модель ARIMA. Таким образом, можно обнаружить IO на предварительном этапе с помощью модели ARIMA, но в конечном итоге его динамика определяется другой моделью ARIMA, выбранной на последнем этапе.

В этом документе показано, что в некоторых обстоятельствах влияние IO может возрасти, поскольку дата его возникновения становится все более отдаленной от прошлого, что трудно интерпретировать или предположить.

У IO есть интересный потенциал, поскольку он может охватывать сезонные выбросы. Другие типы выбросов, рассматриваемые в, tsoutliersне могут охватить сезонные модели. Тем не менее, в некоторых случаях может быть лучше искать возможные сезонные сдвиги уровня, SLS вместо IO (как показано в документе, упомянутом ранее).

У IO есть привлекательная интерпретация. Иногда его понимают как аддитивный выброс, который влияет на член возмущения, а затем распространяется в серии в соответствии с динамикой модели ARIMA. В этом смысле IO подобен аддитивному выбросу, оба они влияют на одно наблюдение, но IO является импульсом в выражении возмущения, в то время как AO является импульсом, добавляемым непосредственно к значениям, генерируемым моделью ARIMA или процессом генерирования данных. , Вопрос о том, влияют ли выбросы на инновации или находятся за пределами условия нарушения, может быть предметом обсуждения.

В предыдущей ссылке вы можете найти некоторые примеры реальных данных, в которых обнаруживается IO.

javlacalle
источник
Спасибо за подробный ответ. я очень ценю это. У меня есть несколько дополнительных вопросов. Есть ли какие-либо преимущества в использовании auto.arima, идентифицируют p, d, q, а затем используют tsoutliers, используя arima в качестве метода?
синоптик
1
Основное преимущество использования forecast::auto.arimaвместе с тем tsoutliers, что все становится автоматизированным. Тем не менее, рекомендуется запускать автоматические процедуры с альтернативными опциями. Вы можете сначала, например, посмотреть ACF или модульные корневые тесты, а затем выбрать модель ARIMA для передачи tsoutliers. Если для предложенной вами модели найдены какие-либо выбросы, вы можете повторить анализ для скорректированного ряда. Это итеративный процесс. Автоматическая процедура предоставляет полезное руководство, но оно не обязательно дает окончательное или уникальное решение.
javlacalle
1
Процедура обнаружения выбросов является итерационной. В целях безопасности установлено ограничение на количество допустимых итераций. Когда вы увидите предупреждение, вы можете попробовать запустить алгоритм, увеличив аргумент maxit.iloopдо 5-6 и посмотреть, изменится ли результат. Если предупреждение возвращается с большим maxit.iloop(например, 20 или более), это может быть признаком того, что что-то не смоделировано должным образом. Удаление IO из рассматриваемых типов выбросов может быть хорошим вариантом в некоторых случаях. В большинстве случаев вы можете игнорировать предупреждение. Вы можете использовать, suppressWarningsчтобы избежать их.
javlacalle
2
@mugen Я не знаю учебника, подробно освещающего этот вопрос. Поскольку подход, обсуждаемый в этом посте, связан с анализом вмешательства, любой учебник (по эконометрике или временным рядам) с главой по этой проблеме будет полезен; например, анализ временных рядов. При использовании в R . Для получения более подробной информации вы должны просмотреть некоторые из многочисленных журнальных статей, посвященных этой проблеме, начиная, например, с Чена и Лю (1993) и ссылок в них.
javlacalle
2
@mugen, я бы тоже проверил статью Цая . Кроме того, я бы проверил классическую книгу Панкраца, которая хорошо освещает выбросы.
синоптик