Predicting Mortality of ICU Patients: The PhysioNet/Computing in Cardiology Challenge 2012 1.0.0
(7,769 bytes)
function plot_means_comparison(X,IHD,ALL_CATEGORIES)
num_params=size(X,2);
for param_idx=1:num_params
mean_all=X(:,param_idx);
mean_1=X(IHD==1,param_idx);
mean_0=X(IHD==0,param_idx);
mean_1_abs=abs(X(IHD==1,param_idx));
mean_0_abs=abs(X(IHD==0,param_idx));
isnan1=sum(~isnan(X(IHD==1,param_idx)))/(sum(IHD==1));
isnan0=sum(~isnan(X(IHD==0,param_idx)))/(sum(IHD==0));
M1 = mode(mean_1);
M0 = mode(mean_0);
max_score1_norm= th_search(X(:,param_idx));
max_score1_abs= th_search(abs(X(:,param_idx)));
% figure(param_idx)
%
% subplot(1,3,1)
% hist(mean_all)
% title([ALL_CATEGORIES{param_idx} ' all'])
%
%
% subplot(1,3,2)
% hist(mean_1)
% title([ALL_CATEGORIES{param_idx} ' 1'])
%
%
% subplot(1,3,3)
% hist(mean_0)
% title([ALL_CATEGORIES{param_idx} ' 0'])
% figure(param_idx+num_params+5)
% hist(mean_1,20)
% h = findobj(gca,'Type','patch');
% set(h,'FaceColor','r','EdgeColor','w','facealpha',0.75)
% hold on;
% hist(mean_0,20)
% h1 = findobj(gca,'Type','patch');
% set(h1,'facealpha',0.75);
% title([ALL_CATEGORIES{param_idx} ' mode0=' num2str(M0) '. ' ' mode1=' num2str(M1)]);
%
%
figure(param_idx+num_params+5)
title([ALL_CATEGORIES{param_idx} ' norm=' num2str(max_score1_norm) '. ' ' abs= ' num2str(max_score1_abs) ]);
subplot(1,2,1)
% [N, X] = hist(mean_1,25);
% bar(X, N./sum(N), 1);
% h = findobj(gca,'Type','patch');
% set(h,'FaceColor','r','EdgeColor','w','facealpha',0.75)
% hold on;
% [N, X] = hist(mean_0, X);
% bar(X, N./sum(N), 1);
% h1 = findobj(gca,'Type','patch');
% set(h1,'facealpha',0.75);
% title([ALL_CATEGORIES{param_idx} ' mode0=' num2str(M0) '. ' ' mode1= ' num2str(M1) '. isnan0= ' num2str(isnan0) '. isnan1= ' num2str(isnan1)]);
scatter(mean_1,ones(size(mean_1)),'xr')
mean1=mean(mean_1(~isnan(mean_1)));
% vari=var(mean_1(~isnan(mean_1)));
medi=median(mean_1(~isnan(mean_1)));
line([mean1 mean1],[1 0.5],'Color','r')
line([medi medi],[1 0.5],'Color','r','LineStyle','--')
hold on
scatter(mean_0,zeros(size(mean_0)),'ob')
mean0=mean(mean_0(~isnan(mean_0)));
%vari=var(mean_0(~isnan(mean_0)));
medi=median(mean_0(~isnan(mean_0)));
line([mean0 mean0],[0 0.5],'Color','b')
line([medi medi],[0 0.5],'Color','r','LineStyle','--')
% title([ALL_CATEGORIES{param_idx} ' mode0=' num2str(M0) '. ' ' mode1= ' num2str(M1) '. isnan0= ' num2str(isnan0) '. isnan1= ' num2str(isnan1)]);
title([ALL_CATEGORIES{param_idx} ' norm=' num2str(max_score1_norm) '. ' ' abs= ' num2str(max_score1_abs) ]);
subplot(1,2,2)
scatter(mean_1_abs,ones(size(mean_1_abs)),'xr')
mean1_abs=mean(mean_1_abs(~isnan(mean_1_abs)));
% vari=var(mean_1(~isnan(mean_1)));
medi_abs=median(mean_1_abs(~isnan(mean_1_abs)));
line([mean1_abs mean1_abs],[1 0.5],'Color','r')
line([medi_abs medi_abs],[1 0.5],'Color','r','LineStyle','--')
hold on
scatter(mean_0_abs,zeros(size(mean_0_abs)),'ob')
mean0_abs=mean(mean_0_abs(~isnan(mean_0_abs)));
%vari=var(mean_0(~isnan(mean_0)));
medi_abs=median(mean_0_abs(~isnan(mean_0_abs)));
line([mean0_abs mean0_abs],[0 0.5],'Color','b')
line([medi_abs medi_abs],[0 0.5],'Color','r','LineStyle','--')
% title([ALL_CATEGORIES{param_idx} ' mode0=' num2str(M0) '. ' ' mode1= ' num2str(M1) '. isnan0= ' num2str(isnan0) '. isnan1= ' num2str(isnan1)]);
title([ALL_CATEGORIES{param_idx} ' norm=' num2str(max_score1_norm) '. ' ' abs= ' num2str(max_score1_abs) ]);
pause(.1)
% data = rand(1, 100);
% [N, X] = hist(data, 0:0.1:1);
%
% subplot(2, 1, 1);
% hist(data, 0:0.1:1);
%
% subplot(2, 1, 2);
% bar(X, N./sum(N), 1);
end
function max_score1_lam= th_search(X_Test)
DATA=zeros(size(X_Test,1),3);
best_lam=0;
max_score1_lam=0;
max_score2_lam=0;
best_lam_score=[];
lam=1;
for lam_idx=1:length(lam)
B = mnrfit(X_Test,IHD+1);
PHAT = mnrval(B,X_Test);
if size(PHAT,2)==1
max_score1_lam=-1;
return
end
% Y=(IHD-1)+IHD; % classes y ={-1,1}
% X=X_Test;
% R=~isnan(X);
% PHAT=teach_log_reg(X,Y,R,lam(lam_idx));
%[IDX,C,sumd] = kmeans(double(R),5);
%X_trunc_saps=[SAPS_SCORES(isnan(PHAT(:,2)))-SAPS_SCORES_48(isnan(PHAT(:,2))) SAPS_SCORES(isnan(PHAT(:,2))) ];
%B_saps = mnrfit(X_trunc_saps,IHD(isnan(PHAT(:,2)))+1);
%PHAT_saps = mnrval(B_saps,X_trunc_saps);
max_score1=0;
max_score2=0;
best_th=0;
for class_th=.1:.01:0.5
DATA(:,1)=str2double('0000');
DATA(:,2)=PHAT(:,2);
%DATA(isnan(PHAT(:,2)),2)=PHAT_saps(:,2);
DATA(:,3)=PHAT(:,2)> class_th;
% DATA(isnan(PHAT(:,2)),3)=PHAT_saps(:,2)> 0.33;
% % % DATA(:,2)=PHAT(:,2);
% % % DATA(isnan(PHAT(:,2)),2)=PHAT_saps(:,2);
% % % DATA(~isnan(PHAT(:,2)),3)=PHAT(~isnan(PHAT(:,2)),2)> class_th;
% % % DATA(isnan(PHAT(:,2)),3)=PHAT_saps(:,2)> 0.33;
DATA(DATA(:,2)<0.01,2)=0.01;
DATA(DATA(:,2)>0.99,2)=0.99;
%DATA(:,3)=PHAT1(:,2)>0.17 & PHAT2(:,2)>class_th ;
% if max_score1==0
% savefile = 'DATA_learn.mat';
% save(savefile, 'DATA')
%
% end
% if(~isempty(results))
% Calculate sensitivity (Se) and positive predictivity (PPV)
TP=sum(DATA(IHD==1,3));
FN=sum(~DATA(IHD==1,3));
FP=sum(DATA(IHD==0,3));
Se=TP/(TP+FN);
PPV=TP/(TP+FP);
show=0; % if show is 1, the decile graph will be displayed by lemeshow()
H=lemeshow([IHD DATA(:,2)],show);
% Use the title of figure to display the results
title(['H= ' num2str(H) ' Se= ' num2str(Se) ' PPV= ' num2str(PPV) '. ' num2str(class_th) ])
% The event 1 score is the smaller of Se and PPV.
score1 = min(Se, PPV);
if score1>max_score1
max_score1=score1;
best_th=class_th;
max_score2=H;
% display(['Unofficial Event 1 score: ' num2str(score1)]);
end
% The event 2 score is the Hosmer-Lemeshow statistic (H).
%display(['Unofficial Event 2 score: ' num2str(H)]);
figure(1000)
hold on
scatter(class_th,score1,'x')
% end
%B'
end
best_lam_score(lam_idx)=max_score1;
if max_score1 > max_score1_lam
best_lam=0;
max_score1_lam=max_score1
max_score2_lam=max_score2
best_th
end
end
end
end