Оценка пиков во временных рядах данных сигнала ячейки

9

Я измеряю наличие ответа в измерениях сигнала клетки. Сначала я применил алгоритм сглаживания (Hanning) к временным рядам данных, а затем обнаружил пики. Что я получаю, это: временные ряды ответа сотового сигнала

Если бы я хотел сделать обнаружение ответа более объективным, чем «да, вы видите повышение в непрерывном падении», какой подход был бы лучшим? Это чтобы получить расстояние от пиков от базовой линии, определяемое линейной регрессией?

(Я программист на Python и почти не разбираюсь в статистике)

Спасибо

Радек
источник
4
Я не думаю, что существует "лучший подход". Есть много способов проанализировать или сообщить о пиках во временных рядах. Ваш вопрос не дает понять, что вы можете быть после. Возможно, вы проконсультируетесь со статьями в своей области, для подсказок или ориентиров.
ttnphns
Я не знаю, какую информацию предоставить, чтобы дать вам подсказки. По сути, у вас есть график с нисходящим трендом (вы получаете меньше отклика от ячейки с течением времени), и где-то посередине вы можете увидеть увеличение выхода. Вот и все. Считаете ли вы, что в основном я должен субъективно сказать, что, скажем, увеличение ответа на 10% = что я хочу?
Радек
1
Предполагая, что вы иногда видите поведение, как показано, а иногда просто непрерывное уменьшение (приблизительно), у вас будет гораздо больше шансов получить разумный ответ, если вы замените один большой график на 6-10 маленьких, где половина имеет это увеличение, а другая половина нет.
AVB
Может ли он иметь более одного локального максимума (шишка)?
Emre
1
почему бы вам не опубликовать свои данные, и я воспользуюсь этим. Предполагаемая фильтрация, предложенная вами и другими, имеет побочные эффекты. Если вы хотите объективный способ справиться с этим, я мог бы дать вам несколько советов. Но все начинается с данных, а не с презумпции!
IrishStat

Ответы:

2

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

Вот что я бы попробовал:

  1. Используйте такую ​​подпрограмму, как numpy.ma.polyfit, чтобы сопоставить , скажем, полином 4-й степени с вашими данными. Это должно учитывать первоначальное падение, за которым следует рост / падение, но сглаживает многочисленные, но незначительные колебания. Надеюсь, эта степень полинома будет достаточно гибкой, чтобы хорошо подходить к другим аналогичным рядам. Я думаю, что главная цель состоит в том, чтобы получить функцию, которая учитывает основной шаблон, который вы ищете.
  2. Используйте подпрограммы Python для вычисления производной полиномиальной функции, соответствующей данным. Примерами процедур являются scipy.misc.derivative и numpy.diff. Вы ищете значения времени, когда 1-я производная равна нулю, указывая на возможные локальные мин или макс функции. Второй производной тест может быть использован для подтверждения которого точка соответствует в мин или макс. Предположительно у вас будет три таких точки, если график, который вы показали, является репрезентативным. Обратите внимание, что проект мудреца может быть очень ценным здесь.
  3. На этом этапе вы будете иметь значения времени, связанные с

    а. начало первоначального распада

    б. начало подъема

    с. начало второго распада

Затем вы можете делать то, что вы хотите, аналитически, чтобы оценить изменения.

Лучше всего позволить данным говорить самим за себя: для нескольких серий, когда вы применяете этот метод, каково типичное изменение размера при подъеме, когда оно обычно происходит в период затухания и как долго оно длится? И как выглядит распределение этого подъема с точки зрения того, где, насколько оно велико и как долго? Зная эти статистические данные, вы можете лучше охарактеризовать конкретный подъем как находящийся в пределах допуска, с точки зрения того, где во времени он происходит, а также его размера и продолжительности. Ключом от моего понимания было бы легко определить, где происходят эти изменения. Остальное из того, что я описал, просто подсчитать.

Джош Хеманн
источник
4
Полиномы не будут работать с этими данными, если вы не сделаете степень настолько большой, что они угрожают ввести ложные пики.
whuber
Возможно, я должен уточнить свой ответ, что ему все еще нужно применить функцию Хеннинга, а затем выполнить полиномиальную подгонку. Возможно, придется изменить окно Ханнинга, чтобы получить более плавную функцию. Или вы говорите, что полином низкой степени не будет работать для сглаженных данных?
Джош Хеманн
5
Полиномиал низкой степени определенно не сработает, Джош. Вам нужен локальный сглаживатель - подумайте о сглаживании ядра или определенных видах сплайнов - и он не должен быть полиномом, который обладает ужасными свойствами. (Многочлены могут вводить ложные, огромные пики между тем, что в противном случае выглядит как ряд данных с хорошим поведением.)
whuber
е(Икс)знак равное(Икс0)+(Икс-Икс0)е'(Икс0)+(Икс-Икс0)22!е"(Икс0)+,,,
3
Спасибо за разъяснение этого вопроса, @Sameer. Я согласен с тем, что локальное полиномиальное соответствие низкой степени может быть эффективным, и я не хотел подразумевать обратное в своем предыдущем комментарии (который подразумевал, что «полином» следует понимать как глобальное соответствие). Что касается того, является ли это «лучшим», я должен согласиться с комментарием ttnphns к первоначальному вопросу: все зависит. Я ожидал бы, что локальные квадратичные подгонки с плотными рядами данных будут близко приближаться к сглаживанию ядра Гаусса, что дает нам один подход. Еще одно чувство «лучшего» - это кригинг, который может быть похож на сплайн.
whuber
1

Вот несколько идей, но я не могу понять, что может сработать ...

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

Скользящие средние: возможно, использование 2-х запаздывающих (экспоненциальных или оконных) скользящих средних может выявить большой удар, игнорируя при этом маленький. По сути, ширина меньшего скользящего среднего окна должна быть больше ширины неровностей, которые вы хотите игнорировать. Более широкая EMA должна быть шире, но не слишком широкой, чтобы обнаружить удар.

Вы ищите, когда они пересекут и вычтут отставание (window / 2), и это приблизительная оценка вашего удара. http://www.stockopedia.com/content/trading-the-golden-cross-does-it-really-work-69694/

Линейные модели: создайте серию линейных моделей достаточной ширины, несколько маленьких шишек, скажем, 100 точек. Теперь проведите цикл по набору данных, генерируя линейные регрессии по переменной X. Просто посмотрите на коэффициент X и посмотрите, где произошло большое изменение знака. Это большой удар.

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

Крис
источник