function [prob,died]=physionet2012(tm,category,val) % [prob,died]=physionet2012(tm,category,val) % Submission for the PhysioNet 2012 Challenge. Entry 9. % REQUIRES: Statistics toolbox. % PROCESS: Pre-processes data, loads model from "pnEntry9.mat", runs % model. % % Inputs: % tm - (Nx1 Cell Array) Cell array containing time of measurement % category- (Nx1 Cell Array) Cell array containing type (category) % measurement % value - (Nx1 Cell Array) Cell array containing value of measurement % % Outputs: % prob - (Scalar) Probability value of the patient dying in the hospital % died - (Logical) Binary classification if the patient is going to die % on the hospital (1 - Died, 0 - Survived) % % Example % [prob,died]=physionet2012(tm,category,val) % Copyright 2012 Alistair Johnson % $LastChangedBy: alistair $ % $LastChangedDate: 2012-05-29 09:01:11 -0400 (Tue, 29 May 2012) $ % $Revision: 1 $ % Originally written on GLNXA64 by Alistair Johnson, 24-Apr-2012 14:02:25 % Contact: alistairewj@gmail.com %=== Miscellanious default values T=0.333320; % Mortality threshold that maximizes SE/PPV %=======================% %=== PREPROCESS DATA ===% %=======================% %=== Put into expected format for function if nargin<3 if iscell(tm) && size(tm,2)>=3 data = tm; % assume multi-observation input else error('Incorrect input.'); end elseif nargin==3 % Convert time from string to numeric minutes tm = cellfun(@(x) str2double(x(1:2)), tm)*60 + cellfun(@(x) str2double(x(4:5)),tm); data = [{1},{tm},{category},{val}]; end data = pnPreprocess(data,0); %==================% %=== LOAD MODEL ===% %==================% model = load('pnEntry9.mat'); %===============================% %=== MODEL FEATURE SELECTION ===% %===============================% % if isfield(model,'idxRem') % %=== Parse data for problematic features % [X,header] = pnParseData(X,header,idxRem); % end %===============================% %=== MODEL PARSING ===% %===============================% % if isfield(model,'T') % T = model.T; % end header = model.header; model = model.model; %=====================% %=== LOAD FEATURES ===% %=====================% [X,header2] = pnBaseFeatures(data,header); X(X<0) = NaN; %===================% %=== CLASSIFY ======% %===================% prob = pnBRFApply(model,X); %===================% %=== SET OUTPUTS ===% %===================% died = prob >= T; % Thresholded probability to maximize PPV/Sens end