2011-12-28 3 views
6

У меня есть файл data.txt с двумя столбцами и N строк, что-то вроде этого:Matlab, как рассчитать AUC (Area Under Curve)?

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 
[...] 

Каждая пара значений в файле соответствуют одной координаты точки (х, у). При построении графика эти точки генерируют кривую. Я хотел бы рассчитать площадь под кривой (AUC) этой кривой.

Так я загружаю данные:

data = load("data.txt"); 
X = data(:,1); 
Y = data(:,2); 

Итак, X содержит все координаты х точек, и Y все координаты у.

Как я могу рассчитать площадь под кривой (AUC)?

+1

Это зависит. Правильно ли [трапецеидальное правило] (http://en.wikipedia.org/wiki/Trapezium_rule) достаточно для вас? –

+0

http://www.mathworks.com/matlabcentral/fileexchange/24597-area-under-a-curve –

+0

@Robert: похоже, что это область под кривой функции * * (Matlab имеет целую кучу ' quad'xxxx()). OP ищет численное интегрирование данных. –

ответ

3

Самый простой способ - функция трапециевидного правила trapz.

Если ваши данные, как известно, являются гладкими, вы можете попробовать использовать правило Симпсона, но нет ничего встроенного в MATLAB для интеграции числовых данных с помощью правила Симпсона. (& я не знаю, как использовать его для х/у данных, где х это стабильно не увеличивается)

+0

Thanx guys, я пробовал с trapz(), но это странно дает мне всегда отрицательные значения. Почему это? Если это область, она всегда должна быть положительной ... Любая идея? Thanx! –

+3

Если кривая опускается ниже 0, площадь фактически будет уменьшена. Помните. Чтобы получить положительную AUC, вам может понадобиться изменить базовый уровень. Например, вычтите 'min (Y)' из 'Y'.Или вы можете использовать 'abs (Y)' для суммирования положительных и отрицательных областей. – yuk

+2

Технически, если вы используете 'trapz (x, y)', знак результата зависит от знака y и знака изменения x. (помните: это интеграл от y dx). Поэтому, если ваши значения y положительны, но x уменьшается, вы получите отрицательное число. На самом деле это немного сложнее: для закрытых кривых знак должен быть положительным для окружения по часовой стрелке и отрицательным для окружения против часовой стрелки (см. Http://en.wikipedia.org/wiki/Green%27s_theorem#Area_Calculation). –

1

Вы можете сделать что-то подобное:

AUC = sum((Y(1:end-1)+Y(2:end))/2.*... 
    (X(2:end)-X(1:end-1))); 
+0

Оли, не могли бы вы добавить объяснение или ссылку для уравнения, которое вы использовали? – Tin

4

просто добавить AUC = trapz (X , Y) к вашей программе и вы получите площадь под кривой

1

Источник: Link

пример в MATLAB, чтобы помочь вам получить ваш ответ ...

x=[3 10 15 20 25 30]; 
y=[27 14.5 9.4 6.7 5.3 4.5]; 
trapz(x,y) 

В случае, если у вас есть отрицательные значения в у, вы можете сделать, как,

y=max(y,0) 
0

Есть несколько вариантов в trapz для человека, готового сделать некоторые кодирования самого по себе. Эта ссылка показывает реализацию Simpson's rule с включенным кодом python. Существует также File Exchange на правило Симпсонов.

 Смежные вопросы

  • Нет связанных вопросов^_^