我想计算蓝线和灰色对角线之间的区域。
我可以将蓝线下面积计算为:
library(zoo)
id <- order(x)
AUC <- sum(diff(x[id])*rollmean(y[id],2))
(感谢Calculate the Area under a Curve in R)
如何找到蓝线和灰线之间的区域?
提前致谢 EC
答案 0 :(得分:4)
曲线之间的区域是模数(面积(蓝线下) - 面积(灰线下)) 蓝线下面积是1/2(b-a)(f(b)-f(a))其中a和b是极限的Xs,f(a),f(b)是极限的Ys。 在灰线下找到区域可以使用simpson的规则来完成。 看到这个http://en.wikipedia.org/wiki/Simpson%27s_rule 如果你有xs和ys的数组,他们给出了规则以及实现+准确性。
我希望它有所帮助, SAURABH
答案 1 :(得分:1)
只是为了确保有一个可接受的答案,但主要是总结其他人的建议:
'数学',你想要的是曲线下面积abs(blue - grey)
。
这些值(即绝对差异)很容易获得,一旦你拥有它们,你可以使用任何类似集成的方法(如Simpson的规则或你链接的文章中建议的那样)来获得表面。 / p>
作为替代方案,有点像@Saurabh建议的那样,你可以使用蓝线是阶梯函数(或不是吗?)而另一条是直线的事实。为此,您将蓝色和灰色线交叉的所有x值相加,或者在蓝线中显示新值(“步骤”)。像这样划分区域只会导致三角形和梯形,你可以在将它们全部加起来之前简单地取绝对值。
即使蓝线不是一个简单的阶梯函数,但仍然由直线组成,这应该可行,尽管你现在必须考虑其他一些情况......
答案 2 :(得分:1)
偶然发现这是另一个可能的解决方案,因此我将其添加:
library(geiger)
geiger:::.area.between.curves(x, f1, f2)
# x is the vector of x-axis values
# f1 the y-axis values for the first line
# f2 the y-axis values for the second line