我希望能够计算蓝线和灰色对角线之间的面积。
我可以计算出蓝线下方的面积为:
library(zoo)
id <- order(x)
AUC <- sum(diff(x[id])*rollmean(y[id],2))
有没有想法如何找到蓝线和灰线之间的区域?
提前致谢 EC
我希望能够计算蓝线和灰色对角线之间的面积。
我可以计算出蓝线下方的面积为:
library(zoo)
id <- order(x)
AUC <- sum(diff(x[id])*rollmean(y[id],2))
有没有想法如何找到蓝线和灰线之间的区域?
提前致谢 EC
我偶然发现了这个解决方案,它似乎是另一个可能的解决方案,所以我会将其添加:
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
只是为了确保有一个可接受的答案,但主要是总结其他人的建议:
从“数学上”来看,您想要的是曲线abs(blue - grey)
下的面积。
这些值(即绝对差异)很容易获取,一旦您有了它们,就可以使用任何类似于积分的方法(例如辛普森法则或您链接的文章中建议的方法)来获得表面。
作为替代方案,并且有点像@Saurabh建议的那样,您可以利用蓝色线是阶梯函数(或者不是吗?)而另一条线是直线的事实。为此,您将所有蓝线和灰线交叉或出现新值(进行“步骤”)的x值相加。按此方式划分区域将仅导致三角形和梯形,您可以在将它们全部加起来之前简单地取绝对值。
即使蓝线不是简单的阶梯函数,而是由直线组成,这也应该起作用,尽管现在您必须考虑一些额外的情况...
sum(blue[j]-gray[j])
(不是真正的R代码),并根据值之间的距离(您的diff(x[id]))进行调整。如果blue[j]是数据而gray是一个函数,只需在blue中的x值上计算gray。 - Carl Witthoft