2011-12-28 1570 views
6

tengo el archivo data.txt con dos columnas y N filas, algo como esto:Matlab, ¿cómo calcular el AUC (área debajo de la curva)?

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

Cada par de valores en el archivo corresponde a uno coordenadas del punto (x, y). Si se traza, estos puntos generan una curva. Me gustaría calcular el área bajo la curva (AUC) de esta curva.

Así que cargar los datos:

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

Así, X contiene todas las coordenadas x de los puntos, y Y todas las coordenadas y.

¿Cómo puedo calcular el área bajo la curva (AUC)?

+1

Depende. ¿Es la [regla trapezoidal] (http://en.wikipedia.org/wiki/Trapezium_rule) lo suficientemente buena para ti? –

+0

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

+0

@Robert: parece que es el área bajo la curva de una * función * (Matlab tiene un montón de ' funciones quad'xxxx()). OP está buscando la integración numérica de datos. –

Respuesta

3

La manera más fácil es la función de regla trapezoidal trapz.

Si se sabe que sus datos son fáciles, puede intentar usar la regla de Simpson, pero no hay nada incorporado en MATLAB para integrar datos numéricos a través de la regla de Simpson. (& no estoy seguro de cómo usarlo para x/Y donde X datos no aumenta de manera constante)

+0

Gracias chicos, lo he intentado con trapz(), pero extrañamente siempre me da valores negativos. ¿Por qué esto? Si es un área, debería ser siempre positiva ... ¿Alguna idea? Gracias! –

+3

Si la curva está por debajo de 0, el área realmente disminuirá. Esto es solo integral, recuerda. Para obtener el AUC positivo, es posible que deba cambiar la línea base. Por ejemplo, restar 'min (Y)' de 'Y'.O puede usar 'abs (Y)' para resumir las áreas positivas y negativas. – yuk

+2

Técnicamente, si usa 'trapz (x, y)', el signo del resultado depende del signo de yy del signo del cambio en x. (recuerde: esto es integral de y dx) Entonces, si sus valores y son positivos pero x está disminuyendo, obtendría un número negativo. En realidad, es un poco más complicado que eso: para curvas cerradas, el signo debe ser positivo para rodear en el sentido de las agujas del reloj y negativo para rodearlo en sentido antihorario (ver http://en.wikipedia.org/wiki/Green%27s_theorem#Area_Calculation). –

1

Puede hacer algo así:

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

Oli, ¿podría por favor agregar una explicación o un enlace para la ecuación que utilizó? – Tin

4

sólo tiene que añadir AUC = trapz (X , y) a su programa y obtendrá el área bajo la curva

1

Fuente: Link

Un ejemplo en MATLAB para ayudarle a obtener su respuesta ...

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

En caso de tener valores negativos en y, se puede hacer como,

y=max(y,0) 
0

Hay algunas opciones a trapz para la persona dispuesta a hacer algo de código por sí mismos. Este enlace muestra la implementación de Simpson's rule, con el código python incluido. También hay un File Exchange en la regla de los simpsons.

Cuestiones relacionadas