Predicting Mortality of ICU Patients: The PhysioNet/Computing in Cardiology Challenge 2012 1.0.0
(3,623 bytes)
function [ X ] = pniExtractFeaturesF(data)
%PNIALISTAIR Alistair's initial entry
% [ pred ] = pniAlistair(data) calculates a mortality prediction for each
% each row (observation/subject) in data
%
% The score uses the following variables:
%
%
% Inputs:
% data - Cell array of data.
% Column 1 - Subject IDs
% Column 2 - Time stamp vectors for each subject
% Column 3 - Feature name vectors for each subject
% Column 4 - Data value vectors for each subject
%
% Outputs:
% pred - Column vector of predictions
%
% Example
% %=== Load data in
% load('data_processed_cell.mat');
%
% %=== Calculate prediction
% [ score ] = pniAlistair(data);
%
% See also PNMAIN PNPREPROCESSDATA
% References:
% Physionet Challenge 2012
% http://physionet.org/challenge/2012/
% Copyright 2012 Alistair Johnson
% $LastChangedBy: alistair $
% $LastChangedDate: 2012-04-24 17:46:42 +0100 (Tue, 24 Apr 2012) $
% $Revision: 339 $
% Originally written on GLNXA64 by Alistair Johnson, 15-Apr-2012 14:40:03
% Contact: alistairewj@gmail.com
%
N = size(data,1);
%=== Generate labels
header={'BUN','Creatinine','GCS',...
'HR','NIMAP',...
'RespRate','Temp','Urine','WBC',...
'Weight','pH',...
'Albumin',...
'Bilirubin',};
header2 = {'Age','Gender','Height'};
%=== Pre-allocate
X.last = nan(N,numel(header));
X.total = nan(N,numel(header));
X.median = nan(N,numel(header));
X.maximum = nan(N,numel(header));
X.minimum = nan(N,numel(header));
for k=1:numel(header)
temp = pnExtractField(data,header{k});
idxEmpty = ~cellfun(@isempty,temp(:,4));
X.last(idxEmpty,k) = cellfun(@(x) x(end), temp(idxEmpty,4));
X.total(idxEmpty,k) = cellfun(@(x) numel(x), temp(idxEmpty,4));
X.median(idxEmpty,k) = cellfun(@(x) median(x), temp(idxEmpty,4));
X.maximum(idxEmpty,k) = cellfun(@(x) max(x), temp(idxEmpty,4));
X.minimum(idxEmpty,k) = cellfun(@(x) min(x), temp(idxEmpty,4));
end
additional = nan(N,numel(header2));
for k=1:numel(header2)
temp = pnExtractField(data,header2{k});
idxEmpty = ~cellfun(@isempty,temp(:,4));
additional(idxEmpty,k) = cellfun(@(x) x(end), temp(idxEmpty,4));
end
pafi = pnPaFi(data);
pafilast = nan(N,1);
pafimedian = nan(N,1);
pafimaximum = nan(N,1);
pafiminimum = nan(N,1);
idxEmpty = ~cellfun(@isempty,pafi(:,4));
pafilast(idxEmpty) = cellfun(@(x) x(end), pafi(idxEmpty,4));
pafimedian(idxEmpty) = cellfun(@(x) median(x), pafi(idxEmpty,4));
pafimaximum(idxEmpty) = cellfun(@(x) max(x), pafi(idxEmpty,4));
pafiminimum(idxEmpty) = cellfun(@(x) min(x), pafi(idxEmpty,4));
%=== Combine into one data matrix
X = [X.last,X.total,X.median,X.maximum,X.minimum,additional,...
pafilast,pafimedian,pafimaximum,pafiminimum];
%=== Add in severity score/day difference
[ X1 ] = pniAndrew(data);
[ X2 ] = pniLouis(data);
X = [X,X1,X2];
idxRemove = [6,12,13,19,25,26,32,38,39,45,51,52,58,64,65];
X(:,idxRemove)=[];
medianVals = [19,0.900000000000000,15,85,75,37,90,11.1000000000000,78.6500000000000,7.40000000000000,3,3,13,55,25,14,38,3,37,7,18.5000000000000,0.900000000000000,14,86,74.3300000000000,37.0500000000000,80,11.3500000000000,78.4000000000000,7.39000000000000,22,1,15,110,96,37.8000000000000,450,13.5000000000000,79.3000000000000,7.44000000000000,16,0.800000000000000,7,68,58.6700000000000,35.9000000000000,10,9.50000000000000,76,7.32000000000000,67,1,152.400000000000,205,221,350,130,51,0.467200822797920;];
for k=1:size(X,2)
X(isnan(X(:,k)),k) = medianVals(k);
end
end