如何干净地使用点之间的插值来生成 R 中的平均值
How to cleanly use interpolation between points to generate a mean in R
我在尝试生成一个代码时遇到问题,该代码将基于使用插值的简单点图干净地生成平均值(特别是加权平均值)。
例如;
ex=c(1,2,3,4,5)
why=c(2,5,9,15,24)
这显示了我正在使用的信息类型。
plot(ex, why, type="o")
在这一点上,我想要每个点 "binned" 所以它们之间的线是直的。为此,我一直在 excel 中手动将点添加到 x 值作为 (x+0.01)。
这是新的输出:
why=c(2,2,5,5,9,9,15,15,24,24)
ex=c(1,2,2.01,3,3.01,4,4.01,5,5.01,6)
plot(ex, why, type="o")
这就是我的问题所在。我必须多次这样做并且不想生成大量新的向量和对象。为了获得加权平均值,我一直在使用插值法将 y 值插值到新对象中,以 0.01 的 x 增量进行插值。然后我可以进入这个新对象并在一个点落在实际 ex 值之间时得到一个平均值,即
mean(newy[1:245])
因为我为 x 的 100 个增量创建了新的 y 值(基本上)沿着一条直线,所以我在这里得到 x= 1 到 2.45 的加权平均值。
有没有更简单、更优雅的方法将插值代码嵌入到平均代码中,所以我可以说 "average of interpolated y for nonreal x to nonreal x?"
根据你的第二个绘图示例,我认为你可能正在寻找这个:
library(ggplot2)
qplot(ex, why, geom="step")
这给出:
或者如果你想让线条先垂直,你可以使用:
qplot(ex, why, geom="step", direction = "vh")
给出:
它并不完全符合您的要求,但您应该考虑 stepfun
函数——这会在两个系列中创建阶跃函数。
plot(stepfun(ex[-1], why))
stepfun
很方便,因为它为您提供了一个在该区间内定义的函数,因此您可以轻松地通过在任何地方进行评估来进行插值。它的缺点是它没有严格定义在给定的范围内(这就是为什么我们必须切断 ex
中的第一个值)。
我在尝试生成一个代码时遇到问题,该代码将基于使用插值的简单点图干净地生成平均值(特别是加权平均值)。
例如;
ex=c(1,2,3,4,5)
why=c(2,5,9,15,24)
这显示了我正在使用的信息类型。
plot(ex, why, type="o")
在这一点上,我想要每个点 "binned" 所以它们之间的线是直的。为此,我一直在 excel 中手动将点添加到 x 值作为 (x+0.01)。 这是新的输出:
why=c(2,2,5,5,9,9,15,15,24,24)
ex=c(1,2,2.01,3,3.01,4,4.01,5,5.01,6)
plot(ex, why, type="o")
这就是我的问题所在。我必须多次这样做并且不想生成大量新的向量和对象。为了获得加权平均值,我一直在使用插值法将 y 值插值到新对象中,以 0.01 的 x 增量进行插值。然后我可以进入这个新对象并在一个点落在实际 ex 值之间时得到一个平均值,即
mean(newy[1:245])
因为我为 x 的 100 个增量创建了新的 y 值(基本上)沿着一条直线,所以我在这里得到 x= 1 到 2.45 的加权平均值。
有没有更简单、更优雅的方法将插值代码嵌入到平均代码中,所以我可以说 "average of interpolated y for nonreal x to nonreal x?"
根据你的第二个绘图示例,我认为你可能正在寻找这个:
library(ggplot2)
qplot(ex, why, geom="step")
这给出:
或者如果你想让线条先垂直,你可以使用:
qplot(ex, why, geom="step", direction = "vh")
给出:
它并不完全符合您的要求,但您应该考虑 stepfun
函数——这会在两个系列中创建阶跃函数。
plot(stepfun(ex[-1], why))
stepfun
很方便,因为它为您提供了一个在该区间内定义的函数,因此您可以轻松地通过在任何地方进行评估来进行插值。它的缺点是它没有严格定义在给定的范围内(这就是为什么我们必须切断 ex
中的第一个值)。