Виявлення випускників у часових рядах (LS / AO / TC) за допомогою пакету tsoutliers в Р. Як представити форматів у форматі рівнянь?


35

Коментарі: По-перше, я хотів би сказати велике спасибі авторові нового пакету tsoutliers, який реалізує виявлення зовнішнього часу Чен та Лю, який був опублікований в Журналі Американської статистичної асоціації в 1993 році в програмному забезпеченні Open Source .R

Пакет ітераційно виявляє 5 різних типів випускників у даних часових рядів:

  1. Адитивна добавка (AO)
  2. Інновації Outlier (IO)
  3. Зсув рівня (LS)
  4. Тимчасові зміни (TC)
  5. Сезонний зсув рівня (SLS)

Що ще більше, це те, що цей пакет реалізовує auto.arima з пакету прогнозу, тому виявлення людей, що не впадають в норму, є безпроблемним. Також пакунок створює приємні сюжети для кращого розуміння даних часових рядів.

Нижче мої запитання:

Я спробував запустити кілька прикладів за допомогою цього пакету, і він чудово працював. Аддитивне виснаження та зміна рівня інтуїтивно зрозумілі. Однак у мене виникли два питання щодо надання тимчасової зміни та інноваційних людей, які я не можу зрозуміти.

Приклад тимчасової зміни:

Розглянемо наступний приклад:

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(B)=11δB

де 0,7. Я просто намагаюся перекласти це на приклад вище.δ

  • Друге моє запитання - про інноваційну зовнішність, я ніколи не
    стикався з інноваційною формою. будь-який числовий приклад або приклад випадку буде дуже корисним.

чужинці

Редагувати: @Irishstat, функція tsoutliers виконує відмінну роботу з виявлення людей, що випускаються, та пропонування відповідної моделі ARIMA. Дивлячись на набір даних Нілу, див. Нижче додаток 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 outlier та добавку outlier та рекомендує замовлення 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 дуже важко встановити на моєму комп'ютері. Я заварював встановлений gsl, я намагався компілювати, використовуючи clangі, gccі не працює. Я думаю, що це дивовижний пакет, але установка справді розбила моє серце.
B.Mr.W.

Відповіді:


19

Тимчасова зміна, TC, є загальним типом зовнішньої форми. Рівняння, подане в документації пакета, і яке ви написали, - це рівняння, яке описує динаміку цього типу випередження. Ви можете створити його за допомогою функції, filterяк показано нижче. Освітлює її відображення для кількох значень дельти. Дляδ=0TC руйнується в добавці, що виходить; з іншого крайності,δ=1, TC - це як зсув рівня.

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")

tremporary change

У вашому прикладі ви можете скористатися функцією 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 , афект ІО залежить від обраної моделі та оцінок параметрів. Цей факт може стати клопітким у серії з багатьма випускниками. У перших ітераціях алгоритму (де ефект деяких вибуху може бути не виявлений і відрегульований) якість оцінок моделі ARIMA може бути недостатньо хорошою для точного визначення IO. Більше того, по мірі просування алгоритму може бути обрана нова модель ARIMA. Таким чином, можна виявити IO на попередньому етапі за допомогою моделі ARIMA, але з часом його динаміка визначається іншою моделлю ARIMA, обраною на останній стадії.

У цьому документі показано, що в деяких обставинах вплив ІО може зростати, коли дата його виникнення стає більш віддаленою у минуле, що важко інтерпретувати чи припускати.

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

IO має привабливе тлумачення. Іноді його розуміють як добавку, що впливає на термін порушення, а потім поширюється в серії відповідно до динаміки моделі ARIMA. У цьому сенсі ІО - це як добавка, що відрізняється від обох добавок, обидва вони впливають на одне спостереження, але ІО є імпульсом у терміні порушення, тоді як АО є імпульсом, доданим безпосередньо до значень, що генеруються моделлю ARIMA або процесом генерування даних. . Незалежно від того, чи впливають на інновації чужі люди чи вони поза терміном збурення, може бути предметом обговорення.

У попередньому посиланні ви можете знайти кілька прикладів реальних даних, де виявлено IO.


Дякуємо за детальну відповідь. Я дійсно ціную це. У мене є кілька додаткових запитань. Чи є якісь переваги у використанні auto.arima, ідентифікуйте p, d, q, а потім використовуйте toutouters, використовуючи arima як tsmethod?
синоптик

1
Основна перевага використання forecast::auto.arimaпоряд з tsoutliersтим, що все стає автоматизованим. Однак доцільно запускати автоматичні процедури з альтернативними варіантами. Спочатку, наприклад, ви можете переглянути кореневі тести ACF або Unit, а потім вибрати модель ARIMA, до якої потрібно перейти tsoutliers. Якщо для запропонованої моделі знайдені будь-які вилучення, ви можете повторити аналіз за скоригованою серією. Це ітераційний процес. Автоматична процедура дає корисний посібник, але це не обов'язково може дати остаточне або унікальне рішення.
javlacalle

1
Процедура пошуку людей, що не впадають у життя, є ітеративною. Для безпеки встановлюється обмеження на кількість допустимих ітерацій. Коли ви дотримуєтесь попередження, ви можете спробувати запустити алгоритм, збільшивши аргумент maxit.iloopдо 5-6, і побачити, чи змінюються результати. Якщо попередження повернеться з великим розміром maxit.iloop(наприклад, 20 або більше), це може бути знаком того, що щось не моделюється належним чином. Вилучення IO з типів, що розглядаються, що розглядаються, може бути хорошим варіантом у деяких випадках. У більшості випадків ви можете ігнорувати попередження. Ви можете використовувати їх suppressWarningsдля уникнення.
javlacalle

2
@mugen Я не знаю підручника, який ретельно висвітлює цю проблему. Оскільки підхід, обговорений у цій публікації, пов'язаний з аналізом інтервенції, будь-який підручник (з економетрики чи часових рядів) з розділом про це питання буде корисним; наприклад, Аналіз часових рядів. При використанні в R . Для детальної інформації слід переглянути деякі статті журналів, що займаються цією проблемою, починаючи, наприклад, від Chen and Liu (1993) та посилання на них.
javlacalle

2
@mugen, я також перевірив статтю Цей . Крім того, я хотів би перевірити класичну книгу Панкраца, яка має гарне висвітлення серед людей, що вижили .
синоптик
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.