Как охарактеризовать резкое изменение?

13

Этот вопрос может быть слишком основным. Для временной тенденции данных я бы хотел выяснить, где происходит «резкое» изменение. Например, на первом рисунке, показанном ниже, я хотел бы узнать точку изменения, используя какой-либо статистический метод. И я хотел бы применить такой метод в некоторых других данных, для которых точка изменения не очевидна (как на 2-м рисунке). Так есть ли общий метод для этой цели?

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

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

user2230101
источник
3
Термин «поворотный момент» имеет особое значение, которое, я думаю, не относится к внезапному изменению уровня (вверх или вниз). Вы также используете фразу «точка изменения», и я думаю, что это, вероятно, лучший выбор. Пожалуйста, не думайте, что это «слишком просто»; даже основные вопросы приветствуются без необходимости приносить извинения, и этот вопрос не является отдаленно основным.
Glen_b
Спасибо. Я изменил «поворотный момент» на «изменить точку» в вопросе.
user2230101 23.09.14

Ответы:

11

Если наблюдения ваших данных временного ряда коррелируют с непосредственно предыдущими наблюдениями, статья Чена и Лю (1993) [ 1 ] может вас заинтересовать. В нем описан метод обнаружения сдвигов уровня и временных изменений в рамках моделей временных рядов авторегрессии скользящего среднего.[1]

[1]: Чен К. и Лю Л.М. (1993),
«Совместная оценка параметров модели и выбросов в динамических рядах »,
журнал Американской статистической ассоциации , 88 : 421, 284-297.

javlacalle
источник
+1 Я пытался (но не смог) вспомнить достаточно об этой статье, чтобы найти ее. Это хорошая ссылка.
Glen_b
6

Эта проблема в статистике называется (одномерным) обнаружением временных событий. Самая простая идея - использовать скользящее среднее и стандартное отклонение. Любое чтение, которое «из» трех стандартных отклонений (эмпирическое правило), считается «событием». Конечно, есть более продвинутые модели, которые используют HMM или регрессию. Вот вводный обзор области .

user1669710
источник
5
Это единственная публикация, общедоступная во всей сети, в которой есть фраза «Univariate Temporal Event Detection»! Каков ваш источник для этого термина?
whuber
Извините, если это сбивает с толку. Обнаружение событий является более распространенным термином, а временный иногда используется отдельно. Univariate обычно не используется, так как подходы обычно многовариантны, но это его особый случай.
user1669710
1
отредактировал ответ, включив в него свой комментарий @whuber
user1669710
@ ser1669710 Спасибо. Это то, что я ищу. Кажется, что скользящее среднее не может решить мою проблему. Мне нужно взглянуть на более сложную модель.
user2230101 23.09.14
Я хотел бы узнать больше об этом временном обнаружении событий. Слайды, которые вы опубликовали, хороши, но мне было интересно, есть ли у вас ссылка на обзорный документ, который описывает поле более формально?
aaragon
1

Jязнак равно{0Икс<Икся1ИксИкся
Икс1<Икс2<<ИксмJяJaпряLJdесемберИкся

J1J2Икс1Икс2

Русь Лент
источник
1
PS - @ user1669710 и я выложил ответы одновременно. Я голосовал за это, потому что он, очевидно, лучше исследован. Но я оставляю это здесь, поскольку это альтернатива, которая работает и легко реализуется.
Расс Лент
1
Поскольку он использует ступенчатую регрессию и использует много переменных-кандидатов, эта процедура выглядит подозрительной. Где он был изучен и какими свойствами он обладает? Как это соотносится с другими Changepoint методами?
whuber
@ whuber, моя точка зрения точно. Вот почему я проголосовал за другой ответ. Это не будет слишком выгодно, если у вас есть очень детальный набор значений точек изменения. И это может даже не сравнить это благоприятно в противном случае. Я просто излагаю это как специальный метод, и я думаю, что представил это как таковой. Но я думаю, что такой метод обещает быть хорошим способом получения начальных значений для нелинейного метода.
Расс Лент
Идея лежит в основе некоторых из наиболее эффективных методов Changepoint я нашел, но использование пошаговой регрессии в частности , заставляет меня подозревать (хотя я не уверен) , что этот метод может нарушаться даже производить разумные отправные точки для других способов улучшить. Вот почему мне любопытно, изучалось ли оно вообще.
whuber
Я думаю, что было бы немного проблем с выбором всех подмножеств, пока действительно есть определенное количество переходов (скажем, два), поскольку мы нашли бы два перехода, которые лучше всего объясняют данные. Другие методы выбора могут быть проблематичными, как и в других ситуациях. Я думаю, это зависит от того, насколько важно получить лучший ответ, хороший ответ или быстрый ответ. Не все проблемы одинаковы, и не все клиенты. Лучший ответ в мире - полный провал, если вы не можете это объяснить.
Расс Лент
1

Существует связанная проблема разделения ряда или последовательности на заклинания с идеально постоянными значениями. См. Как я могу сгруппировать числовые данные в естественные «скобки»? (например, доход)

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

Более прямой ответ - сказать, что мы ищем большие прыжки, поэтому единственная реальная проблема - определить прыжок. Тогда первая идея - просто посмотреть на первые различия между соседними значениями. Даже не ясно, что вам нужно уточнить это, сначала удаляя шум, как будто скачки не могут быть отличены от различий в шуме, они, конечно, не могут быть резкими. С другой стороны, спрашивающий, очевидно, хочет, чтобы резкое изменение включало в себя как ступенчатое, так и ступенчатое изменение, поэтому, кажется, необходим некоторый критерий, такой как дисперсия или диапазон в пределах окон фиксированной длины.

Ник Кокс
источник
1

Область статистики, которую вы ищете, - это анализ точек изменения. Существует сайт здесь , что даст вам обзор области , а также есть страница для программного обеспечения.

Если вы Rпользователь, то я бы порекомендовал changepointпакет для изменений в среднем и strucchangeпакет для изменений в регрессии. Если вы хотите быть байесовским, то bcpпакет тоже хорош.

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

Адуунаика
источник
1
ФП выделил два примера, один из которых я назвал бы шагом, а другой - рампой, хотя всегда есть возможность спорить о словах. Смотрите также мой ответ здесь. Как эти методы справляются с пандусами? Есть ли у них молчаливая или явная модель ступенчатых изменений?
Ник Кокс
Спасибо за вопрос, Ник. Как правило, это зависит от длины рампы. Если это короткая рампа, то она рассматривается как 1 изменение, если рампа длиннее, то часто методы изменения точек определяют 2 изменения: 1 в начале рампы и 1 в конце. Очевидно, это зависит от базовой модели, которую вы предполагаете.
adunaic
1

Эта проблема логического вывода имеет много названий, включая точки изменения, точки переключения, точки разрыва, регрессию ломаной линии, регрессию ломаной палочки, билинейную регрессию, кусочно-линейную регрессию, локальную линейную регрессию, сегментированную регрессию и модели разрыва.

Вот обзор пакетов точек изменения с плюсами / минусами и проработанными примерами. Если вы знаете количество точек изменения априори, ознакомьтесь с mcpпакетом. Во-первых, давайте смоделируем данные:

df = data.frame(x = seq(1, 12, by = 0.1))
df$y = c(rnorm(21, 0, 5), rnorm(80, 180, 5), rnorm(10, 20, 5))

Для вашей первой проблемы это три сегмента только для перехвата:

model = list(
  y ~ 1,  # Intercept
  ~ 1,  # etc...
  ~ 1
)
library(mcp)
fit = mcp(model, df, par_x = "x")

Мы можем построить результирующее соответствие:

plot(fit)

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

Здесь точки изменения очень хорошо определены (узкие). Давайте подведем итоги подгонки, чтобы увидеть их предполагаемые местоположения ( cp_1и cp_2):

summary(fit)

Family: gaussian(link = 'identity')
Iterations: 9000 from 3 chains.
Segments:
  1: y ~ 1
  2: y ~ 1 ~ 1
  3: y ~ 1 ~ 1

Population-level parameters:
    name   mean lower upper Rhat n.eff
    cp_1   3.05   3.0   3.1    1  6445
    cp_2  11.05  11.0  11.1    1  6401
   int_1   0.14  -1.9   2.1    1  5979
   int_2 179.86 178.8 180.9    1  6659
   int_3  22.76  19.8  25.5    1  5906
 sigma_1   4.68   4.1   5.3    1  5282

Вы можете создавать гораздо более сложные модели mcp, включая моделирование авторегрессии N-го порядка (полезно для временных рядов) и т. Д. Отказ от ответственности: я разработчик mcp.

Йонас Линделёв
источник