Matlab, how to calculate AUC (Area Under Curve)?
Solution 1
Easiest way is the trapezoidal rule function trapz
.
If your data is known to be smooth, you could try using Simpson's rule, but there's nothing built-in to MATLAB for integrating numerical data via Simpson's rule. (& I'm not sure how to use it for x/y data where x doesn't increase steadily)
Solution 2
just add AUC = trapz(X,Y) to your program and you will get the area under the curve
Solution 3
[~,~,~,AUC] = perfcurve(labels,scores,posclass);
% posclass might be 1
http://www.mathworks.com/matlabcentral/newsreader/view_thread/252131
Solution 4
Source: Link
An example in MATLAB to help you get your answer ...
x=[3 10 15 20 25 30];
y=[27 14.5 9.4 6.7 5.3 4.5];
trapz(x,y)
In case you have negative values in y, you can do like,
y=max(y,0)
Solution 5
You can do something like that:
AUC = sum((Y(1:end-1)+Y(2:end))/2.*...
(X(2:end)-X(1:end-1)));
DavideChicco.it
Machine learning & biomedical informatics University of Toronto Toronto, Ontario, Canada http://www.davidechicco.it davidechicco(AT)davidechicco.it
Updated on April 07, 2020Comments
-
DavideChicco.it about 4 years
I have the file
data.txt
with two columns and N rows, something like this:0.009943796 0.4667975 0.009795735 0.46777886 0.009623984 0.46897832 0.009564759 0.46941447 0.009546991 0.4703958 0.009428543 0.47224948 0.009375241 0.47475737 0.009298249 0.4767201 [...]
Every couple of values in the file correspond to one point coordinates (x,y). If plotted, this points generate a curve. I would like to calculate the area under curve (AUC) of this curve.
So I load the data:
data = load("data.txt"); X = data(:,1); Y = data(:,2);
So,
X
contains all the x coordinates of the points, andY
all the y coordinates.How could I calculate the area under curve (AUC) ?
-
DavideChicco.it over 12 yearsThanx guys, I have tried with trapz(), but it strangely gives me always negative values. Why this? If it is an area, it should be always positive... Any idea? Thanx!
-
yuk over 12 yearsIf the curve go below 0 the area actually will be decreased. This is just integral, remember. To get the positive AUC you might need to change the baseline. For example, subtract the
min(Y)
fromY
. Or you can useabs(Y)
to sum up positive and negative areas. -
Jason S over 12 yearsTechnically, if you use
trapz(x,y)
, the sign of the result depends on the sign of y and the sign of the change in x. (remember: this is integral of y dx) So if your y values are positive but x is decreasing, you'd get a negative number. It's actually a little more complicated than that: for closed curves, the sign should be positive for clockwise encircling and negative for counterclockwise encircling (see en.wikipedia.org/wiki/Green%27s_theorem#Area_Calculation ). -
Tin about 7 yearsOli, could you pls add an explanation or link for the equation you used?