对分箱数据进行插值,以便保留分箱平均值

机器算法验证 算法 插值 分箱
2022-02-28 10:42:59

假设我有这个分箱数据作为输入。区间,给出平均值为简单起见,我们假设每个 bin 内的采样密度是均匀的。y¯iΔxi

现在我想估计基础函数 ( ),即我希望能够为任意、准时的值(例如 = 2.3 或 2.5 或其他)要求是:yxyxx

  1. 该函数必须保留每个 bin 的平均值,以免引入偏差y(x)¯i=y¯i
  2. 函数必须是连续的(即没有间断)
  3. 该函数必须是非负的。(负值是非物理的。)

简单地查找给定的 bin 值将满足 #1,但违反 #2(在所有 bin 边缘都存在不连续性)。x

另一方面,将整个 bin 权重分配给每个 bin 中心,然后在这些点之间进行插值,满足 #2,但违反了 #1(无论是线性插值还是高阶样条插值)。在下图中,没有保留 2< <3 的 bin 平均值;它减少了,因为两个角都被向下切割了。x

如何以同时满足这两个要求的方式做到这一点?

另外,这个操作叫什么?这是插值吗?(不知道如何标记这个问题。)

在此处输入图像描述

4个回答

这是一篇论文,描述了一种迭代方法,可以满足您的要求:

平滑插值平均数据的均值保持算法

MD Rymes,DR Myers,用于平滑插值平均数据的均值保持算法,太阳能,第 71 卷,第 4 期,2001,第 225-231 页,ISSN 0038-092X, https://doi.org/10.1016/S0038-092X( 01)00052-4http://www.sciencedirect.com/science/article/pii/S0038092X01000524

摘要: 测量太阳辐射的小时平均值或月平均值是汇总太阳辐射和气象数据的典型工具。通常,基于太阳能的可再生能源系统设计师、研究人员和工程师更喜欢使用时间分辨率更高的数据,例如详细的昼夜剖面或每日平均值。本文的目的是提出一种简单的方法,用于将平均(粗解析)数据平滑地插值到具有更精细分辨率的数据中,同时保留数据的确定性平均值。该技术保留了直接、漫射和全球太阳辐射之间的正确分量关系(当至少两个分量的值可用时),以及粗略解析数据的确定性平均值。

可以从“正常”插值样条生成均值保留或平均保留样条。您的要求:

  • 1xi+1xixixi+1f(x)dx=avgi
  • fC1或至少fC0
  • f(x)0

可以通过定义积分 等价地写出:F(x)=x0xf(t)dt

  • F(xi+1)=F(xi)+avgi(xi+1xi)
  • FC2,或至少FC1
  • F(x)是单调的

现在这是的标准样条插值。在 R 中,您可以执行以下操作:F

avg = c(2.2, 3.5, 5.5, 4.5, 2.2, 0.2, 4.5)
X=0:length(avg)

Y=vector(length=length(X))
Y[0]=0
for(i in 2:length(Y)) Y[i]=Y[i-1]+avg[i-1]*(X[i]-X[i-1])

#s=splinefun(X,Y,method="natural")
#s=splinefun(X,Y,method="monoH.FC")
s=splinefun(X,Y,method="hyman")

Xplot=seq(X[1],tail(X,n=1),by=0.02)
Yplot=s(Xplot,deriv=1)

barplot(avg, space=0,ylim=c(-0.5,6))
lines(Xplot,Yplot)

结果s=splinefun(X,Y,method="natural")(不保证为正) 带有方法=“自然”的样条线

结果为s=splinefun(X,Y,method="monoH.FC") 带有 method="monoH.FC" 的样条

结果为s=splinefun(X,Y,method="hyman") 带有 method="hyman" 的样条

到目前为止,我得到的最佳解决方案是在 bin 中心的点之间进行线性插值,如问题中的图表所示,在对所有进行数值优化之后,迭代直到满足条件#1(并且使用违反#3)的严厉处罚)。不幸的是,数值优化的过程比我希望的要复杂一些。yi

我没有进行数值优化,而是尝试建立和求解一组线性方程。这真的很简单快速,但它对要求 #3 并不稳健:一些最终可能是负数,这是荒谬的。不幸的是,据我所知,#3 是非线性的,不能并入线性方程组。yi

由于效率低下、不连续性和任意性,非常不鼓励分档。但是您已经隐含地假设这些箱应该是不重叠的。尽管回归样条更好,但使箱重叠并拥有更多箱将缓解一些问题。

不要使用 bin 中心来表示在 bin 内的分布。使用每个 bin 内的平均值xx