2016-01-12 5 views
1

Примут следующие таймсерии (TS) с заданными значениями:Средние и синхронизировать таймсерии с различными временными метками на определенном пользователь интервал в MATLAB

time val 
15:00 4 
15:45 7 
17:12 2.3 
17:50 2.9 

Каждое значение из метки времени действует до следующего появится. Таким образом, с 15:00 до 15:45 значение составляет 4 или с 15:45 до 17:12 равно 2.3. Каждая новая точка данных между этими метками времени должна иметь одинаковую ценность. То, что я хочу, это новый ts с постоянным интервалом времени и заданной начальной точкой. Предположим, что начальная точка - 15:00, а интервал - 30 минут. Обычно я могу использовать функцию синхронизации, однако функция использует метод интерполяции, и это не то, что мне нужно здесь, так как значения между точками данных не должны быть интерполированы, но усредняются, если временные метки перекрываются.

Новые TS должны быть, как:

time val 
15:00 4 
15:30 5.5 
16:00 7 
16:30 7 
17:00 4.18 

Значение метки времени 15:30 вычисляется как = (4 * 15 + 7 * 15)/30, и так далее. Я внедрил код, способный это исправлять, применяя функцию trapz с множеством операторов if. Тем не менее, мне было интересно, есть ли лучшие/более простые решения, как модифицированная функция синхронизации, так как у меня более 500 000 точек данных.

Заранее спасибо

+0

Когда вы делаете среднее значение, это почти то же самое, что и интерполяция (ее фактически линейная интерполяция). Ваш средний показатель за 16:00 и 16:30 равен 7, как это работает? – GameOfThrows

+0

Верно, но не в случае других временных меток, находящихся в пределах метки времени (например, новая временная метка 16:00, которая берет начало с отметки времени 15:45). Значение 16:00 действует с 16:00 до 16:30, а значение с 16:30 действует до 17:00. Из исходного набора данных значение, полученное за этот период, равно 7 (с отметки времени 15:45, которая действительна до 17:12) – Jonas

+0

Я думаю, что в этом случае вы хотите округлить до ближайшей отметки времени до интерполяции. – GameOfThrows

ответ

1

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

AllValues = interp1(Time,Data,NewTime,'previous')'; 
    [Xdata,Ydata] = stairs(NewTime,AllValues); 
    NewTS = timeseries(Xdata,Ydata); 
    TrapzSum = cumtrapz(NewTS.time,NewTS.data); 
    TrapzSum = TrapzSum(1:2:end); 
    NewResults = diff(TrapzSum(IndicesOfNewInterval))/MinInt; 
+0

Спасибо за предложение изменить мой ответ: http://stackoverflow.com/review/spected-edits/10892141 - Ваше правление было правильным, но причина, по которой он был отклонен (я не отверг его), был вызван тем, что ваш комментарий звучал так, будто вы редактировали его без необходимости. В ваших комментариях относительно изменений вам нужно быть более явным. ** Поясните ** в документации и объясните **, почему ** вы должны были изменить ее с 0.90 до 90 и 0.99 до 99 ... потому что это то, что ** предполагается ** вместо ошибки, которую я имел в прошлое: http://www.mathworks.com/help/stats/prctile.html. Спасибо в любом случае! – rayryeng

+0

Прохладный! Спасибо, что указали на это, я запомню это в следующий раз, и я подумал, что OP ответа должен был принять/отклонить его. На самом деле, я сначала попытался прокомментировать ваш ответ, чтобы вы могли внести изменения (но мне не разрешалось, из-за моего низкого состояния stackoverflow). И наоборот, мне разрешили предложить отредактировать ответ ... – Jonas

+0

Редактирование переходит в очередь просмотра, где пользователи стека переполнения просматривают редактирование, которое вы сделали, чтобы определить легитимность редактирования. http://stackoverflow.com/review/spected-edits/10892141 - Ваши комментарии к редактированию не были достаточно ясными относительно того, почему было сделано правильное изменение, и поэтому оно было отклонено. В любом случае, вы относительно новый пользователь, поэтому вы наверняка получите достаточную репутацию, чтобы в итоге сделать комментарии :) Добро пожаловать и снова спасибо за редактирование. Я внес изменения самостоятельно, даже если ваше редактирование было отклонено. – rayryeng