У меня есть набор данных временных рядов. Каждая серия охватывает один и тот же период, хотя фактические даты в каждом временном ряду могут не совпадать точно.
То есть, если бы временной ряд читался в двухмерной матрице, он бы выглядел примерно так:
date T1 T2 T3 .... TN
1/1/01 100 59 42 N/A
2/1/01 120 29 N/A 42.5
3/1/01 110 N/A 12 36.82
4/1/01 N/A 59 40 61.82
5/1/01 05 99 42 23.68
...
31/12/01 100 59 42 N/A
etc
Я хочу написать сценарий R, который будет разделять временные ряды {T1, T2, ... TN} на «семейства», где семья определяется как набор рядов, которые «имеют тенденцию двигаться в согласии» друг с другом.
Для части «кластеризация» мне нужно будет выбрать / определить вид меры расстояния. Я не совсем уверен, как поступить с этим, поскольку я имею дело с временными рядами, а пара последовательных, которые могут двигаться с сочувствием в течение одного интервала, может не делать этого в последующий интервал.
Я уверен, что здесь гораздо больше опытных / умных людей, чем я, поэтому я был бы благодарен за любые предложения, идеи о том, какой алгоритм / эвристику использовать для измерения расстояния и как использовать его при кластеризации временных рядов.
Я предполагаю, что для этого НЕ существует надежного статистического метода, поэтому мне было бы очень интересно посмотреть, как люди подходят к этой проблеме и решают ее - думая как статистик.
источник
Ответы:
При потоковой передаче данных и извлечении баз данных временных рядов общий подход заключается в преобразовании ряда в символическое представление, а затем в метрике ряда с использованием метрики сходства, например евклидова расстояния. Наиболее популярными являются SAX (Keogh & Lin) или более новый iSAX (Shieh & Keogh):
Страницы выше также содержат ссылки на метрики расстояния и кластеризацию. Кео и его команда занимаются воспроизводимыми исследованиями и довольно восприимчивы к выпуску своего кода. Так что вы можете написать им и спросить. Я считаю, что они, как правило, работают в MATLAB / C ++.
Недавно была предпринята попытка создать реализацию на Java и R:
Я не знаю, как далеко он продвинулся - он ориентирован на поиск мотивов, но, в зависимости от того, как далеко они продвинулись, он должен иметь необходимые биты, которые вам понадобятся, чтобы собрать что-то для ваших нужд (iSAX и метрики расстояния: так как эта часть является общей для кластеризации и поиска мотивов).
источник
Другой способ сказать «склонен двигаться с сочувствием» - это «объединяться».
Существует два стандартных способа вычисления коинтеграции : метод Энгла-Грейнджера и метод Йохансена. Они описаны в «Анализе интегрированных и коинтегрированных временных рядов с помощью R» (Pfaff 2008) и соответствующего пакета R urca . Я очень рекомендую книгу, если вы хотите использовать эти методы в R.
Я также рекомендую вам взглянуть на этот вопрос о многомерных временных рядах и, в частности, на курс Рюи Цея в У. Чикаго, который включает в себя весь необходимый код R.
источник
Временные ряды кластеризации довольно часто проводятся популяционными динамиками, особенно теми, которые изучают насекомых, чтобы понять тенденции вспышек и коллапса. Ищите работу на цыганском моли, еловом будоорме, горном кедре и лиственнице.
Для фактической кластеризации вы можете выбрать любую метрику расстояния, которая вам нравится, у каждой, вероятно, есть свои сильные и слабые стороны в зависимости от типа кластеризованных данных, Кауфманн и Руссее, 1990. Поиск групп в данных. Введение в кластерный анализ - это хорошее место для начала. Помните, что метод кластеризации не заботится о том, что вы используете временной ряд, он только смотрит на значения, измеренные в один и тот же момент времени. Если ваши два временных ряда недостаточно синхронизированы по продолжительности их жизни, они не будут (и, возможно, не должны) объединяться.
У вас будут проблемы с определением количества кластеров (семейств), которые будут использоваться после кластеризации временных рядов. Существуют различные способы выбора отрезка информационных кластеров, но здесь литература не так хороша.
источник
See my answer to a similar question here. Long story short, do a fast Fourier transform of the data, discard redundant frequencies if your input data was real valued, separate the real and imaginary parts for each element of the fast Fourier transform, and use the Mclust package in R to do model-based clustering on the real and imaginary parts of each element of each time series. The package automates optimization over number of clusters and their densities.
источник
You could also use the package clustDDist, which performs the leaders method and the hierarchical clustering method with different error measures:
http://r-forge.r-project.org/projects/clustddist/
The squared Euclidean distance favors patterns of distributions that have one steep high peak and therefore measure
источник