【问题标题】:Find area of overlap between two curves查找两条曲线之间的重叠区域
【发布时间】:2020-06-16 10:13:28
【问题描述】:

我一直在努力寻找解决方案来找到两条曲线之间的重叠区域。我不是在处理具有已知参数的概率密度函数,而是通过经验数据点的平滑获得的曲线。

我发现的唯一提示是计算此代码中不重叠的区域(来自here):

x <- seq(-6,6,by = 0.01)
y1 <- dnorm(x,0,1)
y2 <- pnorm(x,1,1.1)
f1 <- approxfun(x, y1-y2)
f2 <- function(z) abs(f1(z))
dif <- integrate(f2, min(x), max(x))

plot(x,y1,type="l",ylim=c(0,1))
lines(x,y2,type="l",col="red")
polygon(c(x,rev(x)),c(y1,rev(y2)), col="skyblue")

这本质上是曲线之间的区域,但我需要的不是突出显示的蓝色区域,而是中间的白色区域。所以重叠的区域。

我在一位数学家的博客上读到必须找到两条曲线的交点,但我也找不到如何在 R 中做到这一点。

希望有人能帮帮我。

任何建议都是有帮助的。不过,我提前道歉,我不是数学专家。

【问题讨论】:

  • 一个建议:你可以使用uniroot来寻找交集。然后使用 2 个积分找到白色区域

标签: r interpolation overlap area curve


【解决方案1】:

这是最小值的积分:

x <- seq(-6,6,by = 0.01)
y1 <- dnorm(x,0,1)
y2 <- pnorm(x,1,1.1)
f <- approxfun(x, pmin(y1,y2))
integrate(f, min(x), max(x))

【讨论】:

  • 太棒了!你能帮我理解这个功能吗?所以,我从pmin() 帮助文件中了解到的是,它正在寻找两个向量之间沿 x 轴的每个位置的较低值。这是否意味着如果我使用pmax(),我基本上会计算出我之前计算的相同面积(曲线之间的面积)?
  • @neko 不,pmax 你会发现蓝色区域加上重叠的白色区域。
  • 哦,是的,这是有道理的。我刚刚试了一下,结果和你说的完全一样。谢谢!
【解决方案2】:

做事

z <- c(y2[y2 < y1], y1[y1 < y2])
polygon(x, z, col="skyblue")

.

【讨论】:

  • 我认为 OP 想要区域的价值,而不是绘制区域。
猜你喜欢
  • 2021-01-09
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
相关资源
最近更新 更多