2015-10-28 2 views
0

У меня есть несколько кривых, которые содержат много точек данных. Ось x - это время и, скажем, имеет n кривых с точками данных, соответствующими временам на оси x.Усреднение многих кривых с разными значениями x и y

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

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

Может ли Excel или MATLAB это сделать?

Я также хотел бы построить стандартное отклонение усредненной кривой.

Одна из проблем: распределение между значениями х не является однородным. Есть еще много значений ближе к t = 0, но при t = 5 (например) частота точек данных намного меньше.

Еще одна проблема. Что произойдет, если два значения попадают в 1 бит? Я предполагаю, что мне понадобится среднее значение этих значений до вычисления усредненной кривой.

Надеюсь, это передает то, что я хотел бы сделать.

Любые идеи о том, какой код я мог бы использовать (MATLAB, EXCEL и т. Д.) Для достижения моей цели?

+1

Interpolate -> тогда средний. Будет ли это работать на вас? –

+1

Пожалуйста, разместите несколько значений образца ... – kkuilla

+0

@AnderBiguri Мне нравится ответ Андера. Сначала я не думал об интерполяции. Я предполагаю, что MATLAB мог бы выполнить это – Jack

ответ

1

Поскольку ваши ряды «неравномерно распределены, интерполирование до вычисления среднего является одним из способов избежать смещения в моменты времени, когда у вас более частые образцы. Обратите внимание: по определению интерполяция, скорее всего, уменьшит диапазон ваших значений, т. Е. Интерполированные точки вряд ли упадут точно во время ваших измеренных точек. Это оказывает большее влияние на экстремальные статистические данные (например, 5-й и 95-й процентили), а не среднее. Если вы планируете идти по этому маршруту, вам понадобятся функции interp1 и mean

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

timeStep = diff(t); 
weightedMean = timeStep .* x(1:end-1)/sum(timeStep); 

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

+0

Спасибо! Функция интерпретации - это то, что я искал! Работает как шарм !! – Jack

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