多时间序列内插数据的问题

时间:2014-06-20 11:12:11

标签: matlab time-series interpolation

我正在处理患者数据,其中参数以不同的采样频率记录,因此具有不同的时间戳。

我想创建一个矩阵,其中数据按"最后已知值"进行插值。直到新的原始值在时间上变化。所以最后我有统一的矩阵,每个参数在每个时间戳都有值。

这是我上一个问题的扩展版本,

Interpolate the time stamped patient data

数据采用以下格式:

Time              Hear Rate(Variable)         
18:00:00 PM       74 
18:02:00 PM       75
18:04:00 PM       85     
18:06:00 PM       71        
18:08:00 PM       79        
18:10:00 PM       72  

Time              Blood Press.(Variable)         
18:01:00 PM       100
18:05:00 PM       120
18:09:00 PM       121

Time              pH.(Variable)         
18:10:00 PM       7.5
18:15:00 PM       7.31
18:20:00 PM       7.42

Time              SaO2.(Variable)         
18:01:00 PM       100
18:11:00 PM       98
18:21:00 PM       95

缺失位置的插值数据应该是已知事件的先前值,并且应该保持相同,直到下一次更改发生。

我目前正在参考MATLAB用户论坛的以下主题

http://www.mathworks.com/matlabcentral/answers/101237-how-can-i-do-1-d-interpolation-with-interp1-to-find-the-nearest-value-to-the-left-of-the-point-i-e

现在我正在使用以下方法,但在最后两个时间序列的插值中遇到一些问题,即phsao2,它不按时间序列的零顺序保持工作。

T = [t_hr; t_bp; t_ph; t_sao2];

使用T值填充NaN的长度,其中原始值不存在。

hr = [hr; nan(length(t) - length(hr),1)];
bp = [nan(length(t) - length(bp),1); bp];
ph = [nan(length(t) - length(ph),1); ph];
sao2 = [nan(length(t) - length(sao2),1); sao2];

对主时间序列T

进行排序
[Tsort, idx] = sort(T);

hr_sorted = hr(idx);
bp_sorted = bp(idx);
ph_sorted = ph(idx);
sao2_sorted = sao2(idx);

应用零序保持

for ii = 2:length(T)
if isnan(hr_sorted(ii))
        hr_sorted(ii) = hr_sorted(ii-1);
    end
    if isnan(bp_sorted(ii))
        bp_sorted(ii) = bp_sorted(ii-1);
    end
if isnan(ph_sorted(ii))
        ph_sorted(ii) = ph_sorted(ii-1);
    end
    if isnan(bp_sorted(ii))
        sao2_sorted(ii) = sao2_sorted(ii-1);
    end
end

合并主矩阵中的所有数据

main = [Tsort, hr_sort, bp_sort, ph_sort, sao2_sort];

问题是最后两个数据没有根据时间序列进行插值,使用这种方法将它们置于不同于原始值的值。

  • pH 数据放在最后3个时间戳
  • SaO2 数据放在最后3个时间戳

但是他们应该放在时间序列的第三和第四部分,我不知道如何使用这种方法放置它们。

0 个答案:

没有答案