2012-02-15 3 views
2

У меня есть непрерывно входящие данные, представленные массивом целого x = [x1, ..., xn], n < 1 000 000. Каждые два элемента удовлетворяют следующему условию x [i] < x [i + 1 ].Алгоритм: существует ли линейный тренд в данных?

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

Я попытался вычислить

k = (x[i+1] - x[i])/ (x[i] - x[i-1]) 

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

Спасибо за вашу помощь ...

+0

Как это ненадежное? насколько точны ваши данные? Сколько «колебания» есть в вашей линейной тенденции, это реальные данные (измерения) или цифровые (математические совершенные) данные и т. Д.? – Nanne

+0

Мы тестируем только небольшой интервал, только триплет ... Это не является надежным ... Данные представляют собой некоторые кумулятивные значения, где прогнозируется линейная или сублинейная тенденция. Но у меня нет дополнительной информации о данных ... – justik

+0

Вы посмотрели график данных? Как шумно? Если вы не можете увидеть наглядно, где линейное поведение превратится в квадратичное, вы не сможете сделать что-то лучше с компьютером. Если вы можете, то в зависимости от шума это может быть возможно, сравнивая смежные точки, или вам, возможно, придется оглядываться назад на многие шаги, чтобы обнаружить тренд. – James

ответ

0

Фактически вы вычисляете производную от функции.Возможно, вы должны использовать больше очков для его расчета, например. 5, см. Five-point stencil

1

Keep след первой производной и второй вывод. То есть, сохраняйте среднее значение и дисперсию x [i] -x [i-1]. И сохраните сумму и дисперсию (x [i + 1] -x [i]) - (x [i] -x [i-1]).

Для линейного тренда среднее значение первой производной должно быть постоянным, и если вы наблюдаете отклонение от среднего (которое вы можете рассчитать с помощью дисперсии), то вы можете сказать, что что-то не так. Среднее значение второй производной должно быть 0.

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

Алгоритм (с использованием только второй производной):

  1. Для каждого входа, вычислить знак (+ или ве-ве) вторая производная
  2. Отслеживайте сколько однородных признаков, которые вы получили в последнее время (т.е. если последовательность - + - ++++ ответ 4)
  3. Если длина однородных признаков больше, чем пороговое значение (скажем, 40), а затем пометить его как начало квадратичной последовательности
?
+0

@ ElKamina Спасибо, я попробую ... – justik

0

Вы можете нам Здесь приведена регрессия рабочего окна.

Вычисление коэффициентов линейной регрессии по точкам W включает в себя суммы членов вида X [i], i.X [i] и X [i]^2. Если вы храните эти суммы, вы легко сдвигаетесь на одну точку, выведя термины для самой левой точки и добавляя термины для самой правой точки (iX [i] становится (i + 1) .X [i], ieiX [i] + X [I]). Значения ваших данных целые, накопления округления не будут.

Это говорит о том, что вы можете вычислить текущую регрессию в постоянное время для каждой последовательной точки W и определить падение коэффициента корреляции.

0

Для ультра-быстрого решения, вы можете рассмотреть тест, как:

| X[i + s] - 2 X[i] + X[i - s] | > k (X[i + s] - X[i - s]) 

для хорошо выбранных с и к.

Посмотрите на участок | X [i + s] - 2 X [i] + X [i - s] |/(X [i + s] - X [i - s]) как функция от i для возрастания значений s.

Смежные вопросы