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