2011-10-23 9 views
5

Chciałbym obliczyć obszar między niebieską linią a szarą linią przekątną.Oblicz obszar między 2 krzywami

enter image description here

mogę obliczyć powierzchnię pod niebieskiej linii jak:

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

(dzięki Calculate the Area under a Curve in R)

pomysłów, jak znaleźć obszar pomiędzy niebieskim i szarym linii?

góry dzięki WE

+1

ja czegoś brakuje tutaj: czy tęskniłeś za wyjaśnieniami pod linkiem? Jeśli twoje niebieskie [j] i szare [j] są danymi, po prostu obliczyć 'sumę (niebieski [j] -gray [j])' (nie rzeczywisty kod R), skorygowany o odległość między wartościami (twoja różnica (x [id ])). Jeśli niebieski [j] to dane, a szary to funkcja, po prostu wylicz na szaro wartości x w kolorze niebieskim. –

+0

Szara linia jest przekątna. Więc powinno to być coś w rodzaju: z <-abs (y-x); id <- order (x); AUC <- sum (diff (x [id]) * rollmean (z [id], 2)); – ECII

+0

Musisz wskazać (po przemyśleniu na ten temat przez sekundę), czy chcesz policzyć obszar pozytywnie, zarówno gdy niebieska linia jest powyżej i poniżej szarej linii. –

Odpowiedz

1

Wystarczy, aby upewnić się, że jest to do przyjęcia odpowiedź, ale głównie podsumowując innych ludzi propozycje:

«Matematycznie», co chcesz to obszar pod krzywą abs(blue - grey) .

Wartości te (tj. Różnice bezwzględne) można łatwo uzyskać, a po ich uzyskaniu można użyć dowolnej metody podobnej do integracji (takiej jak reguła Simpsona lub sugerowana w artykule, do którego prowadzi łącze) w celu uzyskania powierzchni.

Jako alternatywę, i nieco podobną do @Saurabh zasugerowałeś, możesz użyć faktu, że niebieska linia jest funkcją krokową (czy nie jest?), A druga jest linią prostą. W tym celu sumuje się wszystkie wartości x, dla których przecinają się niebieskie i szare linie lub pojawia się nowa wartość ("krok" jest brany) w niebieskiej linii. Dzielenie takiego obszaru doprowadzi tylko do trójkątów i trapezów, a przed podsumowaniem można po prostu wziąć bezwzględną wartość.

Nawet jeśli niebieska linia nie jest prostą funkcją krok, ale nadal składa się z linii prostych, to powinno działać, mimo że teraz trzeba uwzględnić kilka dodatkowych przypadków ...

+0

Myślę, że dostałem to za pomocą biblioteki reguł Simpsona (Bolstad2); z <-abs (y-x); AUC <-sintegral (x, z) $ int; – ECII

4

obszar pomiędzy krzywymi jest moduł (powierzchnia (w niebieski) - powierzchnia (w szarej linii)) powierzchni pod niebieskiej linii jest 1/2 (BA) (f (b) -f (a)), gdzie a i b są Xs wartości granicznych, a f (a), f (b) Y wartości granicznych. Znajdowanie obszaru pod szarą linią można wykonać za pomocą reguły Simpsona. zobacz te http://en.wikipedia.org/wiki/Simpson%27s_rule Podają regułę oraz implementację + dokładność pod warunkiem, że masz tablice xs i ys.

Mam nadzieję, że to pomaga, Saurabh

+2

Zasady Simpsona lub trapezoidalne to rodzaj przesady w linii prostej :-). –

+0

Powiedziałem, że można je wykorzystać do niebieskiej linii, a nie do szarej.Obszar dla szarego można znaleźć bezpośrednio przez 1/2 (b-a) (f (b) -f (a)) –

+1

Wygląda na to, że OP chce, aby wszystkie różnice powierzchni były liczone jako dodatnie (patrz abs w swoim komentarzu). Jeśli tak, twoje pierwsze zdanie nie działa. –

Powiązane problemy