LINUX.ORG.RU

Поиск точки изгиба в одномерном массиве

 , , ,


3

1

Есть шумная кривая, описывающая синаптический ток:

http://i.stack.imgur.com/RyH5g.png

В ней три фазы: покой, нарастание и спад. Нужно найти точку начала фазы нарастания (помечена красным). Куда копать? Если бы не шум, это была бы тупо точка отклонения от прямой, а так я в растерянности...

★★★★★
Ответ на: комментарий от Axon

0) Желаете мне отказать в праве разочаровываться или просто заткнуть рот?

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

2) Вас «ткнули носом» в http://www.jstatsoft.org/v31/i07/paper fig.1 это дословно чего вы желаете, поскольку никакой особой точки на кривой в этом месте не существует.

3) Если нужна именно фильтрация «без искажений», то указано ключевое словосочетание «state space». Если вы не знаете что это, то можно просто спросить :) Тут же все доброжелательно вам помогут.

psv1967 ★★★★★
()
Ответ на: комментарий от Axon

но это уже спорт

А смысл? Мучаться, определять по среднему графику точку, чтобы потом посчитать погрешность измерения и увидеть, что она в 10 раз больше погрешности определения этой точки?

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

В общем, попробовал таки с dx/dt, и на усреднённой кривой получилось вполне годно. Проверю на более шумных данных и, пожалуй, на этом остановлюсь.

Axon ★★★★★
() автор топика

Свертка твоей функции с вектором -1;0;1 или -0.25;-0.75;0;0.75;0.25 или -0.1;-0.35;-0.55;0;0.55;0.35;0.1 даст тебе производную. В первом случае производная будет сильно шумная, в третьем случае менее шумная. Правильные коэффициенты сам подставь, я наугад написал.

anto215 ★★
()
Ответ на: комментарий от anto215

http://i.imgur.com/c6bEtAa.png

Чёрная - экспериментальная кривая, зелёная - производная, синяя - конволюция вектором [-0.1, -0.35, -0.55, 0, 0.55, 0.35, 0.1]. Что-то не там, где мне надо, у конволюции пик.

Axon ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

то же самое я и предлагал.

Процитируй пожалуйста.

лучше ты задумайся, _почему_ нельзя брать производную от зашумлённых данных?

emulek
()
Ответ на: комментарий от Axon

Дак тебе-ж не пик производной надо, а что-то другое, а это, тупо, первая производная получилась. А кстати, тоже красиво.

Тебе может быть пик второй производной надо?

anto215 ★★
()
Ответ на: комментарий от anto215

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

Дык, а зелёненькое тогда что? Производная и есть, dy/dx при dx = 0.1мс.

Axon ★★★★★
() автор топика
Последнее исправление: Axon (всего исправлений: 2)

БПФ-фильтр не подойдет? При желании можно хоть все шумы убрать без искажения САЗ, только по скорости думаю не самый лучший вариант. В зависимости от исследуемого процесса можно и СКЗ взять (иногда даже более информативно получается).

anonymous
()
Ответ на: комментарий от Axon

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

Зелененький не перевернутый и на производную тоже похож, но почему-то сильно сдвинут в отрицательную сторону по оси х.

anto215 ★★
()
Ответ на: комментарий от anto215

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

Минусы с плюсами в векторе местами поменять, и график будет в нужную сторону.

Зелененький не перевернутый и на производную тоже похож, но почему-то сильно сдвинут в отрицательную сторону по оси х.

Ой, блин, а это я в коде налажал... Получается, не то я ищу.

Axon ★★★★★
() автор топика
Ответ на: комментарий от anto215

Вообще, на самом деле, изначально задача поиска начала события у меня возникла для того, чтобы максимально эффективно выравнивать разные события по началу. На моих данных конволюция эту задачу выполняет не менее успешно, если не более, так что переделал скрипт под неё. Правда, второстепенной целью было нахождение ещё участка baseline для вычета смещения по y, и это пока делается через костыль: тупо вычитаю захардкоженную половину средней длины фазы нарастания из найденной точки.

Axon ★★★★★
() автор топика
Последнее исправление: Axon (всего исправлений: 1)
Ответ на: комментарий от emulek

то же самое я и предлагал.

Процитируй пожалуйста.

лучше ты задумайся, _почему_ нельзя брать производную от зашумлённых данных?

Не очень похоже на цитату, о которой я просил.

i-rinat ★★★★★
()
Ответ на: комментарий от Axon

Нет, а, правда, почему?

Потому что производная от шума больше, чем от искомой кривой. Измеряя что-то по производной от сырых данных, измеряешь параметры шума.

Работает же.

А что ты искал? Если точку перегиба, то выпуклость меняется уже на спаде. Если точку, где «начинается» спад, то опять мимо. Там какие-то колебания около горизонтального участка. До спада ещё далеко. В общем, нашлось что-то, а что — непонятно.

Но если устраивает так — то всё ok.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

А что ты искал? Если точку перегиба, то выпуклость меняется уже на спаде. Если точку, где «начинается» спад, то опять мимо. Там какие-то колебания около горизонтального участка. До спада ещё далеко. В общем, нашлось что-то, а что — непонятно.

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

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

Но на картинках же видно, что это так только в неинтересных областях кривой?

Axon ★★★★★
() автор топика
Ответ на: комментарий от Axon

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

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

Это предполагается делать вручную?

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

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

А в каком случае так не выйдет? От чего это зависит? От монотонности функции?

Это предполагается делать вручную?

Нет, конечно, иначе в чём смысл? Можно, например, с порядком производной поиграть. Можно какое-то другое преобразование задействовать.

Axon ★★★★★
() автор топика

Куда копать? Если бы не шум, это была бы тупо точка отклонения от прямой, а так я в растерянности...

см. «автокорреляция» (а также «корреляция», «ковариация» и вообще мат.стат)

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

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

Axon ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Думаю, от изначального соотношения сигнал-шум.

Я выше приводил картинку, на которой с SNR всё_очень_плохо. А экстремум производной берёт и обнаруживается в нужном месте.

Axon ★★★★★
() автор топика
Ответ на: комментарий от Axon

обнаруживается в нужном месте.

Лично мне кажется, что место совсем не то — там ещё горизонтальный участок, а не начало спада. Ну или я тебе тут наврал с три короба. Выбирай вариант по вкусу.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Лично мне кажется, что место совсем не то — там ещё горизонтальный участок, а не начало спада.

Место совсем не то, потому что я там в коде накосячил и у меня кривая относительно сигнала влево уползла на 10 точек. Суть в том, что пик на точно том же месте, что и у более чистого сигнала.

Axon ★★★★★
() автор топика
Последнее исправление: Axon (всего исправлений: 1)
Ответ на: комментарий от Axon

Ну тогда выбрасывай все советы, которые тебе надавали, и делай как делаешь. А то ведь сколько людей — столько мнений.

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

Тут надо не на форуме совета спрашивать, а искать живого человека, чтобы потом на него можно было свалить, в случае косяка. Так все делают.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Тут надо не на форуме совета спрашивать, а искать живого человека, чтобы потом на него можно было свалить, в случае косяка. Так все делают.

На меня в лабе с моим питоном и линуксом как на пришельца с альфа-центавры смотрят. Тут второго такого оболдуя-то за семь вёрст не сыщешь, а вы говорите, советов спрашивать...

Axon ★★★★★
() автор топика
Ответ на: комментарий от Axon

На меня в лабе с моим питоном и линуксом как на пришельца с альфа-центавры смотрят

Но тебе же совет по математике нужен, а не по питону с линуксом.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

А тут и математиков нет. Есть толпа биологов и один физик.

Axon ★★★★★
() автор топика
Ответ на: комментарий от Axon

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

ставь какой-нить мат.пакет, R или обкладывайся скриптами exel (к сожалению не OO) и смотри как выглядят ACF и иже с ними. На ней «точки перелома» будут очень чётко видны. Точнее будут диапазоны «тут цикличный процесс»,«тут тренд»,«тут фигня какая-то»

Можно ещё Хи2 проверять, например с равномерным и получить ещё диапазоны «тут близко к случайному»,«а тут уже нет». Можно проверять корреляцию с теоретически предсказанным поведением.

в любом случае искомая «точка перелома» - на самом деле диапазон [x1,x2] получаемый как пересечение всех применённых методов.

PS. Зря вы экспериментальные данные фильтровали ДО поиска закономерностей

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

PS. Зря вы экспериментальные данные фильтровали ДО поиска закономерностей

Это синаптический ток, он ещё до оцифровки фильтруется в обязательном порядке, иначе SNR будет <<1. Да и закономерностей я не ищу, только параметры.

Axon ★★★★★
() автор топика

Почему нельзя отфильтровать шум и посчитать производную, затем, задавшись пороговыми значениями в местах (абсолютными или заданными относительно значения на «прямой») сгиба определить точки? Где затык?

anonymous
()
Ответ на: комментарий от Axon

Да и закономерностей я не ищу, только параметры.

судя по графику ваша функция (к которой параметры) вообще представляется одной гладкой кривой..

начерно по min,max,0 определяете стартовые параметры и ищите участок где данные с ней достаточно коррелируют.

Потом перебирая параметры теор.функции добиваетесь макс.корреляции на выбранном участке.

PROFIT

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

судя по графику ваша функция (к которой параметры) вообще представляется одной гладкой кривой..

Нет. Кинетика фазы нарастания определяется диффузией глутамата, а кинетика спада - десенситизацией рецепторов. И, говоря о параметрах, я имел в виду не параметры функции, а характеристики тока. Хотя, конечно, теоретически одно сводится к другому.

Axon ★★★★★
() автор топика
Последнее исправление: Axon (всего исправлений: 2)
Ответ на: комментарий от Axon

Еще раз...Имеем «время-амплитуда», после БПФ получаешь «частота-амплитуда», обрезаешь все высшие частоты - шум, делаешь обратное преобразование и получаешь «время-амплитуда» БЕЗ шума. Только есть 2 нюанса: 1) если нужно в реальном времени, то скорость работы алгоритма может неустроить; 2) т.к. тренд довольно ярко выражен необходимо применять БПФ не ко всем данным, а последовательно для определенного размера окна с перекрытием. Тогда и данные можно фильтровать вплоть до практически прямой линии - среднего значения и ничего никуда не уползет. Проверено на сильно нестационарном процессе с большим количеством шума, причем лично.

anonymous
()
Ответ на: комментарий от Axon

Кинетика фазы нарастания определяется диффузией глутамата, а кинетика спада - десенситизацией рецепторов

:-)

самое простое - берешь OO, там есть функция correl - и считаешь корреляцию окна твоей выборки с таким-же окном сдвинутым назад. то где полученный коэф. устойчиво выше 0.8 и есть искомое место. величину окна, сдвига и пороговое требование выбираеш по вкусу или исходя из диффузий и десент@#$ать, язык сломать можно

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

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

Axon ★★★★★
() автор топика
Последнее исправление: Axon (всего исправлений: 1)
Ответ на: комментарий от Axon

Боюсь и тут не всегда гладко отрабатывать будет

я вообще-то прогонял ваши данные перед тем как советавать. Искомая точка «перегиба» находится очень чётко.

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

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

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

я вообще-то прогонял ваши данные перед тем как советавать.

Так то усреднённые. ☺ Вы индивидуальные попробуйте.

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

Мне в том треде книжек насоветовали, но я всё никак не доберусь. Последний год аспирантуры, сейчас не до того...

Axon ★★★★★
() автор топика
Последнее исправление: Axon (всего исправлений: 2)
Ответ на: комментарий от Axon

От чего это зависит?

от природы шума. Точнее от его «частоты». i-rinat прав, если речь о _производной_, но Δx/Δy это НЕ производная. Она становится производной лишь в пределе, когда Δx→0. И вот в этом пределе она зависит только от шума.

У тебя такой большой Δx, что за его протяжённость шум слабо меняется в среднем.

с порядком производной поиграть.

не нужно. Чем выше порядок, тем сильнее влияние шума. Со второй уже точно не получится.

emulek
()

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

MyTrooName ★★★★★
()
Ответ на: комментарий от emulek

но Δx/Δy это НЕ производная. Она становится производной лишь в пределе, когда Δx→0.

Я знаю, я сам выше об этом говорил. ☺

У тебя такой большой Δx, что за его протяжённость шум слабо меняется в среднем.

А разве то, что данные дискретны, тут не влияет? У меня минимально возможный dx - 0.1 мс, при rise time 10-90% порядка 1 мс.

Axon ★★★★★
() автор топика
Последнее исправление: Axon (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.