2011-10-23 20 views
5

Me gustaría calcular el área entre la línea azul y la línea diagonal gris.Calcular área entre 2 curvas

enter image description here

puedo calcular el área bajo la línea azul como:

library(zoo)  
id <- order(x) 
AUC <- sum(diff(x[id])*rollmean(y[id],2)) 

(gracias a Calculate the Area under a Curve in R)

Alguna idea de cómo encontrar el área entre la línea azul y gris?

Gracias de antemano CE

+1

me falta algo aquí: ¿extrañaste las explicaciones de tu enlace? Si su azul [j] y gris [j] son ​​datos, simplemente calcule 'sum (azul [j] -gray [j])' (no código R real), ajustado por la distancia entre los valores (su diff (x [id ])). Si el azul [j] es información y el gris es una función, simplemente calcule gris en los valores x en azul. –

+0

La línea gris es la diagonal. Entonces debería ser algo como z <-abs (y-x); id <- order (x); AUC <- sum (diff (x [id]) * rollmean (z [id], 2)); – ECII

+0

Debe indicar (después de pensarlo un segundo) si desea que el área cuente positivamente tanto cuando la línea azul está arriba como debajo de la línea gris. –

Respuesta

1

Sólo para asegurarse de que no es una respuesta aceptable, pero resumiendo, principalmente de otras personas sugerencias:

'Matemáticamente', lo que quiere es el área bajo la curva abs(blue - grey) .

Estos valores (es decir, las diferencias absolutas) se obtienen fácilmente, y una vez que los tiene, puede usar cualquier método de integración (como la regla de Simpson o lo que se sugiere en el artículo al que enlaza) para obtener la superficie.

Como alternativa, y algo así como sugirió @Saurabh, puede utilizar el hecho de que la línea azul es una función de paso (¿o no?) Y la otra es una línea recta. Para esto, suma todos los valores x para los cuales se cruzan las líneas azul y gris, o se presenta un nuevo valor (se toma un 'paso') en la línea azul. Dividir el área de esta manera solo conducirá a triángulos y trapecios, y simplemente puede tomar el valor absoluto antes de resumirlos todos.

Incluso si la línea azul no es una función simple paso, pero todavía compuesta de líneas rectas, esto debería funcionar, aunque ahora tiene que dar cuenta de algunos casos adicionales ...

+0

Creo que lo obtuve usando la biblioteca de reglas de Simpson (Bolstad2); z <-abs (y-x); AUC <-integral (x, z) $ int; – ECII

4

El área entre las curvas es el módulo (área (en línea azul) - área (en línea gris)) Área bajo la línea azul se media (ba) (f (b) -f (a)) donde a y b son X de los límites yf (a), f (b) son Ys de los límites. Encontrar el área debajo de la línea gris se puede hacer usando la regla de Simpson. ver esto http://en.wikipedia.org/wiki/Simpson%27s_rule Han dado reglas así como implementación + precisión siempre que tengas matrices de xs e ys.

espero que ayude, Saurabh

+2

Las reglas de Simpson o trapezoidales son un poco exageradas para una línea recta :-). –

+0

Dije que esos pueden usarse para la línea azul y no para la gris.El área para el gris se puede encontrar directamente por 1/2 (b-a) (f (b) -f (a)) –

+1

Parece que el OP quiere que todas las diferencias de superficie cuenten como positivas (vea los abs en su propio comentario). Si es así, su primera declaración no funciona. –

Cuestiones relacionadas