%Phase 2 Entry 4 (9) - Hamilton 8/23/12. %Uses statistics toolbox. function [prob,died]=physionet2012(tm,category,val) Xall=var_vals(tm,category,val); Tx=Xall; Tx1=sign(Tx).*abs(Tx).^0.073; X=[Tx Tx1]; b=[-637.759394 -2.839494 -0.255158 -0.003559 0.002912 -0.078425 ... -0.178800 0.010406 -0.027513 -0.006074 -1.284829 -0.039269 ... -0.375362 0.077386 -0.040079 -0.140393 -0.034464 0.009125 ... -0.002369 -0.158427 0.131746 -0.004464 -1.359007 -0.049666 ... -0.021945 -0.050222 0.213305 2.021342 -0.000317 -0.049189 ... -0.066031 118.724492 -1.548487 2.222297 26.854516 6.588410 ... -0.185591 50.662895 -14.946793 -10.657186 14.847681 -0.313795 ... 29.295945 -0.295035 13.766002 -0.165168 47.788079 103.922041 ... 14.298825 88.695888 0.154137 -1.843631 5.576434 6.050360 18.161906]'; include=[ 4 6 8 11 29 34 36 42 53 54 56 65 86 87 91 ... 100 104 111 151 153 161 173 196 211 214 219 222 242 252 260 ... 284 304 309 336 347 349 371 393 407 410 426 431 433 434 461 ... 476 487 491 494 503 519 522 532 540 ]; X=X(1,include); PHAT=mnrval(b,X); %prob=PHAT(2); PHAT_ratio=.4428; %from analysis with set-a died=0; if PHAT(2)/PHAT(1) > PHAT_ratio died=1; end Tx1=sign(Tx).*abs(Tx).^0.046; X=[Tx Tx1]; b=[-981.519499 -2.366329 -0.240325 -0.075240 -0.201572 0.010833 ... -0.027743 -0.005762 -1.237252 -0.039041 -0.359124 0.075271 ... -0.038638 -0.137108 -0.033895 0.008735 -0.002377 -0.150412 ... 0.125555 -0.004568 -1.371826 -0.050619 -0.020975 -0.048473 ... 0.212094 2.001252 -0.000286 -0.044420 -0.065545 164.967902 ... -6.342734 3.601628 47.162864 9.516793 -0.190345 86.851435 ... -25.819714 -16.497386 23.276084 -0.295196 47.214111 -0.294153 ... 23.401073 -0.168441 86.822522 184.913423 24.624774 155.110493 ... 0.151762 -3.534219 10.221708 9.393324 31.944775]'; include=[ 4 6 29 34 36 42 53 54 56 65 86 87 91 100 104 ... 111 151 153 161 173 196 211 214 219 222 242 252 260 284 288 ... 309 336 347 349 371 393 407 410 426 431 433 434 461 476 487 ... 491 494 503 519 522 532 540 ]; X=X(1,include); PHAT=mnrval(b,X); prob=PHAT(2); %PHAT_ratio=.4428; %from analysis with set-a %died=0; %if PHAT(2)/PHAT(1) > PHAT_ratio % died=1; %end end function[Xall]=var_vals(varargin) inputs={'tm','category','val'}; for n=1:nargin if(~isempty(varargin{n})) eval([inputs{n} '=varargin{n};']) end end cap_C={'Albumin' 'ALP' 'ALT' 'AST' 'Bilirubin' 'BUN' 'HCT' 'HR' 'K' 'Lactate' ... 'Mg' 'MAP' 'PaCO2' 'PaO2' 'pH' 'Platelets' 'RespRate' 'Cholesterol' ... 'Creatinine' 'DiasABP' 'FiO2' 'GCS' 'Glucose' 'HCO3' 'MechVent' 'Na' ... 'NIDiasABP' 'NIMAP' 'NISysABP' 'SaO2' 'SysABP' 'Temp' 'TroponinI' 'TroponinT' ... 'Urine' 'WBC' 'Weight' 'Age' 'Gender' 'Height'}; ncols=size(cap_C,2); nrows=7; X_keep=1:ncols*nrows; Xall=zeros(1,size(X_keep,2)); xtmp =[2.7525 2.5921 2.3694 2.8 1.2114 0.41682 2.5528 ... 131.22 153.24 129.04 177.56 1.3839 -1.9813 158.25 ... 215.3 432.91 247.05 607.27 1.39 113.65 475.98 ... 357.7 725.81 354.19 1154.8 1.39 191.29 763.28 ... 3.581 5.9506 5.1964 6.7018 1.4036 0.60069 6.309 ... 36.475 37.252 32.722 41.996 1.5746 0.85382 37.987 ... 31.873 31.239 28.258 34.072 1.6108 -0.80667 30.745 ... 93.408 89.823 70.123 118.14 1.9702 -2.7509 89.092 ... 4.2018 4.1637 3.7155 4.6756 1.6014 -0.076944 4.1043 ... 3.2945 3.4827 2.2085 5.0312 1.3809 -0.69943 2.9986 ... 1.9589 2.0659 1.8184 2.3165 1.5768 0.16685 2.1227 ... 86.378 79.613 55.815 119.93 1.9355 -8.8754 79.916 ... 40.186 38.827 32.406 47.274 1.6425 2.2454 39.014 ... 169.59 136.7 85.207 235.31 1.6487 -24.977 119.1 ... 7.536 7.7541 7.2748 9.3273 1.6514 -2.2315 7.3826 ... 213.15 197.06 169.78 227.94 1.5509 -17.838 182.95 ... 22.828 21.184 13.357 31.126 1.9458 -1.2643 21.302 ... 148.61 0 0 0 0 0 0 ... 1.752 1.7968 1.5433 2.0659 1.5763 0.045016 1.8254 ... 61.538 58.624 42.656 82.893 1.9266 2.6115 59.246 ... 0.76651 0.55773 0.45085 0.83531 1.8081 -0.21026 0.51395 ... 9.7468 9.5512 7.1515 11.779 1.8974 -0.34758 9.3084 ... 162.02 148.69 109.12 201.1 1.5812 -16.693 139.38 ... 22.199 22.244 20.185 24.293 1.5712 0.33446 22.558 ... 1 1 1 1 1.8631 0 1 ... 138.57 139.07 136.73 141.29 1.5889 0.63304 139.37 ... 58.889 54.811 37.584 79.819 1.314 4.8444 54.068 ... 77.793 73.655 55.893 97.003 1.3098 3.3078 72.912 ... 119.27 114.59 88.568 144.62 1.3195 -1.0956 114.27 ... 95.6 95.95 92.941 97.737 1.4636 3.0826 96.075 ... 124.79 116.94 83.897 158.08 1.9266 0.61414 119.64 ... 36.4 36.847 35.299 37.91 1.8917 0.30484 36.932 ... 8.0193 8.3954 6.3222 10.541 1.1394 -1.1581 7.7926 ... 1.0897 1.1854 0.80534 1.6655 1.1667 -0.11389 1.1029 ... 289.34 97.936 23.592 447.8 1.9237 -106.39 100.2 ... 14.451 14.056 11.329 17.069 1.5451 -0.12581 14.03 ... 74.527 81.42 78.72 82.717 1.9626 2.7016 82.045 ... 70.2 5198.3 0 0 0 0 0 ... 0.99336 0 0 0 0 0 0 ... 78.941 0 0 0 0 0 0]; tmp=[repmat('$',size(tm,1),1) char(tm)]; tmp=[reshape(tmp',1,numel(tmp)) '$']; colons=findstr(':',tmp); dollas=findstr('$',tmp); times_mins=zeros(size(colons,2),1); for k2=1:size(colons,2) times_mins(k2)= str2num(tmp(dollas(k2)+1:colons(k2)-1))*60+... str2num(tmp(colons(k2)+1:dollas(k2+1)-1)); end c=cellstr(category); params=unique(c); X=zeros(nrows,ncols); for k2=1:size(params,1) idxs=strcmp(params(k2),c); t=times_mins(idxs); vnam=char(c(idxs,:)); vnam=vnam(1,:); vals=val(idxs); if findstr(vnam,'Age') not_bogus=logical(vals<105); vals=vals(not_bogus); if isempty(vals) vals=64.039; t=0; else vals=vals(end); t=t(end); end end X_col=strcmp(vnam,cap_C); nvals=size(vals,1); if nvals>1 minval=min(vals); maxval=max(vals); dt=diff(t); nonzero_ts=find(t~=0); nonzero_dts=find(dt~=0); dvdt=0; t_in=0; if ~isempty(nonzero_ts)&&~isempty(nonzero_dts) t_in=max(t)/1440; dvdt=(vals(nvals)-vals(1))/((max(t)-min(t))/1440); end average=mean(vals); nonzero_dts=[1;find(dt~=0)+1]; vals=vals(nonzero_dts); t=t(nonzero_dts); nvals=size(vals,1); if nvals==1 predictors=[vals;0;0;0;0;0;0]; X(1:nrows,find(X_col==1))=predictors; break; end post=vals(nvals); predictors=[vals(1);average; minval;maxval;t_in;dvdt;post ]; elseif size(vals,1)==1 predictors=[vals;0;0;0;0;0;0]; end if findstr(vnam,'Age') predictors=[vals; vals*vals; 0;0;0;0;0]; end if sum(X_col) X(1:nrows,find(X_col==1))=predictors; end end tmp=reshape(X,1,numel(X)); Xall(1,1:size(X_keep,2))=tmp(X_keep); Xall_indx=logical(Xall==0); Xall(Xall_indx)=xtmp(Xall_indx); end