# ROC analysis (Receiver Operating Characteristic example)

## Contents

ROC analysis provides tools to select possibly optimal models and to discard suboptimal ones independently from (and prior to specifying) the cost context or the class distribution. ROC analysis is related in a direct and natural way to cost/benefit analysis of diagnostic decision making. See http://en.wikipedia.org/wiki/Receiver_Operating_Characteristic for more information.

% demo_ROC.m


## Construct the sample set

P = 100; % Number of True,  P=TP+FN  (True posititive + False negative)
N = 100; % Number of False, N=FP+TN  (True posititive + False negative)
muP = -0.5;% Mean of positive
sgP = 1; % Variance of positive
muN = 0.5; % Mean of negative
sgN = 1; % Variance of negative

x=[sgP*randn(P,1)+muP; sgN*randn(N,1)+muN];
y=[ones(P,1);   zeros(N,1)];


## Plot the histogram

figure
hold on
[hP, xP]= hist(x(y==1));  % Histogram vercor for the Positive, along with the histogram values
[hN, xN] = hist(x(y==0)); % The same for the Negative
bar([xP',xN'],[hP',hN']); % Plot both histograms
legend('Positive','Negative');
xlabel('Independent variable, x');
ylabel('Number of the objects');
title('Histograms of two classes');
axis tight
hold off ## Construct the ROC

nSamples = 100; % Number of samples in the threshold
vecThresh = linspace(min(x), max(x), nSamples); % Vector of various thesholds

ROC = []; % ROC is {(FPR, TPR)}set
for t = vecThresh
idxLeft = find(x<=t);
idxRight = find(x>t);
TP = length(find(y(idxLeft)==1));    % Number of the True positive items
TN = length(find(y(idxRight)==0)); % Number of the True negative items

TPR = TP/P;               % Fals positive rate
SPC = TN/N;               % Sensitivity

ROC = [ROC;[1-SPC, TPR]];% Add new element ti the ROC curve
end


## Plot the ROC curve

figure
hold on
plot([0,1],[0,1],'k:'); % Plot the random decision line
plot(ROC(:,1), ROC(:,2)); % Plot the ROC itself
xlabel ('False positive rate, FPR=1-SPC');
ylabel ('True positive rate, TPR'); 