插入带时间戳的患者数据

时间:2014-06-06 13:51:51

标签: matlab time-series interpolation

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

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

数据采用以下格式:

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              Hear Rate(Variable)    Blood Press.    
18:00:00 PM       74                      NaN
18:01:00 PM       74                      100
18:02:00 PM       75                      100 
18:03:00 PM       75                      100
18:04:00 PM       85                      100 
18:05:00 PM       85                      120
18:06:00 PM       71                      120
18:07:00 PM       71                      120 
18:08:00 PM       79                      120
18:09:00 PM       79                      121
18:10:00 PM       72                      121

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

我目前正在参考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

1 个答案:

答案 0 :(得分:1)

您实际上正在尝试按照您提供的链接查看zero-order hold

让我们调用第一组t_hr(字符串的单元格数组)和第二组t_bp(也是字符串的单元格数组)。然后调用心率hr和血压bp

通过合并tt_hr来构建新的单元格数组t_bp

t = [t_hr; t_bp];

使用hr填写bpNaN,使其与t的长度相同。在t中,向量的第一部分对应于我们知道hr的时间,而后半部分对应于bp。相应地使用这些知识:

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

现在你有三个向量:t(好吧,那实际上是一个单元格数组); hrbphrbp的元素对应t中的元素,包括NaN s:

t = 
'18:00:00 PM'
'18:02:00 PM'
'18:04:00 PM'
'18:06:00 PM'
'18:08:00 PM'
'18:10:00 PM'
'18:01:00 PM'
'18:05:00 PM'
'18:09:00 PM'

hr =
74
75
85
71
79
72
NaN
NaN
NaN

bp =
NaN
NaN
NaN
NaN
NaN
NaN
100
120
121

现在,我们可以对t进行排序:

[t_sorted, idx] = sort(t);

idx包含已转移到t的{​​{1}}索引。在这种情况下,t_sorted。我们可以使用它来对idx == [1 7 2 3 8 4 5 9 6].'bp进行排序:

hr

然后,应用零阶保持:

 hr_sorted = hr(idx)
 hr_sorted =
 74
 NaN
 75
 85
 NaN
 71
 79
 NaN
 72

 bp_sorted = bp(idx)
 bp_sorted =
 NaN
 100
 NaN
 NaN
 120
 NaN
 NaN
 121
 NaN

你的最终载体变成了:

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
end

请注意,您的目标答案中有11个不同的时间,但您只提供了9个。 (它缺少18:03和18:07。)您可以通过向hr_sorted = 74 74 75 85 85 71 79 79 72 bp_sorted = NaN 100 100 100 120 120 120 121 121 NaN添加额外的hr,并使bp成为单元格数组来轻松扩展此答案例如,由tt_hr和单元格数组t_bp组成。