Predicting Acute Hypotensive Episodes: The PhysioNet/Computing in Cardiology Challenge 2009 1.0.0
(11,004 bytes)
% _________________________________________________________________________
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
% PREDICTION OF ACUTE HYPOTENSIVE EPISODES USING NEURAL NETWORK MULTIMODELS
% _________________________________________________________________________
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
% Copyright (C) 2009
% : Jorge Henriques ... <jh@dei.uc.pt>,
% : Teresa Rocha ... <teresa@sun.isec.pt>
% This software is released under the terms of the GNU
% General Public License (http://www.gnu.org/copyleft/gpl.html)
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
% mainPreprocessingABPSignal.m
%__________________________________________________________________________
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
%__________________________________________________________________________
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
% Prepare datasets (A, B, H, C)
% 1. Load a raw signal (ABP in this case) from SOURCE folder
% 2. Preprocessing (missing values + noise reduction)
% 3. Save the final result TARGET folder
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ INPUT
% : Training {H, C}
% source= '..\MIMIC_TRAIN_TXT\';
% target= '..\dataTrain\';
% : Testing {A, B}
% source= '..\MIMIC_TEST_MAT\';
% target= '..\dataTest\';
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ OUTPUT
% DAT=[ YR YF YA]
% : YR - Raw data (660x1) - minutes (10+1 h : before/after t0)
% : YF - Filter data (660x1) - minutes (10+1 h : before/after t0)
% : YA - AHE episode (660x1) - minutes (10+1 h : before/after t0)
% : for dataSet A and B [600:660]=value(600)
%__________________________________________________________________________
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
clc; clear; close all
warning off
showDAT= 1; %.. (0/1) Show results
saveDAT= 1; %.. (0/1) Save results
disp('___________________________________________________________________')
disp('จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ')
disp(' mainPreprocessingABPSignal ')
disp('___________________________________________________________________')
disp('จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ')
pause(1)
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
% DEFINITIONS 1.
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%__________________________________________________________________________
% Data Set - 1.1
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
option=menu(' -------- DATASET -------- ', ...
' . H ', ' . C ',' . A ',' . B ');
switch option
case 1; dataSet='H';
case 2; dataSet='C';
case 3; dataSet='A';
case 4; dataSet='B';
end
if dataSet=='A' | dataSet=='B'
numSet='1'
else
option=menu(' -------- DATASET -------- ', ' . 1 ', ' . 2 ');
switch option
case 1; numSet='1';
case 2; numSet='2';
end
end
sinal ='BP'; %.. Only ABP is considered
%__________________________________________________________________________
% Time - 1.2
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
BEFORE=600; %... 10 hours before
AFTER = 60; %... 1 hours after
mmHG = 60; %... Limit value for computing AHE episodes
%__________________________________________________________________________
% Data Sets - 1.3
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
%Downloaded from Physionet/MIMIC II
% 1.Hour 2.Day
% 3.HR 4.ABPSys 5.ABPDias 6.ABPMean 7.PULSE
% 8.RESP 9.SpO2 10.NBPSys 11.NBPDias 12.NBPMean
ABP=6; %.. Number of column corresponding to ABP
listH1={
'h1_a40439', 'h1_a40493', 'h1_a40764', 'h1_a40834', 'h1_a40928', ...
'h1_a41200', 'h1_a41447', 'h1_a41770', 'h1_a41835', 'h1_a41882', ...
'h1_a41925', 'h1_a42277', 'h1_a42397', 'h1_a42410', 'h1_a42928'};
indBPH1= ABP*ones(length(listH1),1);
indBPH1([2 8])=8; %..... consider column 8 for dataSet 2 and 8
listH2={
'h2_a40006', 'h2_a40012', 'h2_a40050', 'h2_a40051', 'h2_a40064', ...
'h2_a40076', 'h2_a40096', 'h2_a40099', 'h2_a40113', 'h2_a40119', ...
'h2_a40125', 'h2_a40127', 'h2_a40154', 'h2_a40164', 'h2_a40172'};
indBPH2= ABP*ones(length(listH2),1);
indBPH2([9 13])=8; %..... consider column 8 for dataSet 9 and 13
listC1={
'c1_a40282', 'c1_a40473', 'c1_a40551', 'c1_a40802', 'c1_a40921', ...
'c1_a41137', 'c1_a41177', 'c1_a41385', 'c1_a41434', 'c1_a41466', ...
'c1_a41495', 'c1_a41664', 'c1_a41934', 'c1_a42141', 'c1_a42259' };
indBPC1= ABP*ones(length(listC1),1);
listC2={
'c2_a40207', 'c2_a40215', 'c2_a40225', 'c2_a40234', 'c2_a40260', ...
'c2_a40264', 'c2_a40277', 'c2_a40306', 'c2_a40329', 'c2_a40355', ...
'c2_a40374', 'c2_a40376', 'c2_a40384', 'c2_a40408', 'c2_a40424' };
indBPC2= ABP*ones(length(listC2),1);
indBPC2([4])=8; %..... consider column 8 for dataSet 4
listA1={...
'101bnm','102bnm','103bnm','104bnm','105bnm', ...
'106bnm','107bnm','108bnm','109bnm','110bnm'};
listB1={...
'201bnm','202bnm','203bnm','204bnm','205bnm', ...
'206bnm','207bnm','208bnm','209bnm','210bnm', ...
'211bnm','212bnm','213bnm','214bnm','215bnm', ...
'216bnm','217bnm','218bnm','219bnm','220bnm', ...
'221bnm','222bnm','223bnm','224bnm','225bnm', ...
'226bnm','227bnm','228bnm','229bnm','230bnm', ...
'231bnm','232bnm','233bnm','234bnm','235bnm', ...
'236bnm','237bnm','238bnm','239bnm','240bnm'};
%__________________________________________________________________________
% Source and Target - 1.4
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
if dataSet=='H' | dataSet=='C'
source= '..\MIMIC_TRAIN_TXT\';
target= '..\dataTrain\';
cmd = [ 'list = list' char(dataSet) char(numSet) ';'];
eval(cmd)
cmd=['t0=load(''' source char(dataSet) char(numSet) '_Indice.txt'');'];
eval(cmd);
end
if dataSet=='A' | dataSet=='B'
source ='..\MIMIC_TEST_MAT\';
target ='..\dataTest\';
cmd = [ 'list = list' char(dataSet) char(numSet) ';'];
eval(cmd)
end
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
% PREPROCESSING 2.
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
clc
for itlist=1:length(list)
file = char(list(itlist));
%______________________________________________________________________
% Training Data {H,C}
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
if dataSet=='H' | dataSet=='C'
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ Load raw data
cmd=[' Yraw=load(''' source file '.txt'');'];
eval(cmd);
cmd=[ 'indBP=indBP' char(dataSet) char(numSet) '(itlist);'];
eval(cmd)
Yraw = Yraw(:,indBP);
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ Missing+Noise
Yraw = mmMissingValues(Yraw);
Yfil = mmFilter(Yraw, 0.8, 1);
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ t0 = start of AHE
indt0= t0(itlist,1);
Yahe = 0*Yraw;
Yahe(indt0:end) = mmHG;
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ 10+1 h(before+after)
YR=Yraw(indt0-BEFORE+1:indt0+AFTER);
YF=Yfil(indt0-BEFORE+1:indt0+AFTER);
YA=Yahe(indt0-BEFORE+1:indt0+AFTER);
YRFA=[YR YF YA];
end
%______________________________________________________________________
% Testing Data {A,B}
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
if dataSet=='A' | dataSet=='B'
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ Load raw data
cmd=[' Yraw=load(''' source file ''');'];
eval(cmd)
Yraw= mmBaseGain(Yraw.val, itlist, sinal, dataSet);
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ Resampling+Missing+Noise
Yraw = mmResampling(Yraw, 60);
Yraw = mmMissingValues(Yraw);
Yfil = mmFilter(Yraw, 0.75, 1);
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ 10+1 h(before+after)
YP=Yfil(end)*ones(AFTER,1); % Forecast = After = last value
YR=[ Yraw; YP];
YF=[ Yfil; YP];
YA=[ 0*Yfil; mmHG*ones(size(YP))];
YRFA=[YR YF YA];
end
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
% SAVE 3.
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
if saveDAT
DAT=YRFA;
saveFile=[ 'save ' char(target) char(sinal) '_' ...
char(dataSet) char(numSet) '_' num2str(itlist) ' DAT' ];
eval(saveFile);
end
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
% SHOW 4.
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
if showDAT
mmMaximize
N=size(YRFA,1);
figure(1)
hold on
plot(1:N,YRFA(:,1),'r', 1:N,YRFA(:,2),'b', 1:N,YRFA(:,3),'k',...
'LineWidth',1.5)
plot(1:N,60*ones(N,1),'g:')
axis([0 BEFORE+AFTER -5 max(max(YRFA))+5 ])
legend('Missing','Filter','AHE')
strTitle=[ 'file: ' char(file) ' # ' ...
char(dataSet) char(numSet) '-' num2str(itlist) ];
mmLabel(strTitle,'minutes','mmHG')
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
pause
close all
end
end
clc
disp('___________________________________________________________________')
disp('จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ')
disp([' Dataset ' char(dataSet) ' has been processed '])
disp('___________________________________________________________________')
disp('จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ')
pause(1)
option=1;