2011-10-23 55 views
5

我想計算藍線和灰色對角線之間的面積。計算2條曲線之間的面積

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

(感謝Calculate the Area under a Curve in R

任何想法如何找到藍色和灰色線之間的區域:

enter image description here

我可以在藍線下計算面積?

預先感謝 EC

+1

我想的東西這裏:你錯過了你鏈接的解釋嗎?如果你的藍色[j]和灰色[j]是數據,只需計算'sum(blue [j] -gray [j])'(不是真正的R代碼),通過值之間的距離調整(你的diff(x [id ]))。如果藍色[j]是數據並且灰色是函數,則只需在藍色處計算x值的灰色。 –

+0

灰線是對角線。所以應該像 z <-abs(y-x); id < - order(x); AUC < - sum(diff(x [id])* rollmean(z [id],2)); – ECII

+0

你必須在考慮了一秒之後指出你是否希望在藍線高於和低於灰線的時候對區域進行正數計數。 –

回答

1

只是爲了確保有一個可以接受的答案,但主要是總結其他人的建議:

‘數學’,你想要的是曲線abs(blue - grey)下面積。

這些值(即絕對差值)很容易獲得,一旦你有了它們,你就可以使用任何類似積分的方法(如辛普森規則或文章中建議的鏈接)來獲得表面。

作爲替代方案,有點像@Saurabh建議的那樣,您可以使用藍線是一個階梯函數(或者不是它?)而另一個是直線。爲此,可以總結藍色和灰色線交叉的所有x值,或者在藍色線中顯示新值(採用「步長」)。像這樣劃分區域只會導致三角形和梯形,並且可以在將所有區域總和之前取絕對值。

即使藍線是不是一個簡單的階躍函數,但還是由直線,這應該工作,雖然你現在必須考慮一些額外的情況下...

+0

我想我使用了辛普森的規則庫(Bolstad2)。 z <-abs(y-x); AUC <-sintegral(x,z)$ int; – ECII

4

曲線之間的區域是模數(區域(下藍線) - 區域(下灰線))下的藍線 片區1/2(BA)(F( b)-f(a))其中a和b是極限的Xs,f(a),f(b)是極限的Ys。 在灰線下找到區域可以使用辛普森規則來完成。 看到這個http://en.wikipedia.org/wiki/Simpson%27s_rule 他們已經給出了規則以及執行+準確性,只要你有xs和ys的數組。

我希望它能幫助, SAURABH

+2

辛普森或梯形規則是一種矯枉過正的直線:-)。 –

+0

我說那些可以用於藍線而不是灰線。灰色區域的面積可以直接通過1/2(b-a)(f(b)-f(a))找到。 –

+1

看起來像OP希望所有表面差異都計爲正數(參見他自己的評論中的abs)。如果是這樣,你的第一個聲明不起作用。 –