r - 在向量中的点内插值

标签 r statistics interpolation

向量 V1 包含 X 的 56 个观测值,向量 BS 包含长度为 100000 的 V1 的自举样本。我想在 BS 中的点内进行线性插值以填充任何缺失值。例如,V1 不包含 0.27 值,因此 BS 也不包含。但 BS 会包含一些 0.28 和 0.26。我希望插值创建一些 0.27 值并将它们添加到 BS。对于向量中两个极值内的任何缺失值,依此类推。

V1 <- c(0.18, 0.2, 0.24, 0.35, -0.22, -0.17, 0.28, -0.28, -0.14, 0.03, 0.87, -0.2, 0.06, -0.1, -0.72, 0.18, 0.01, 0.31, -0.36, 0.61, -0.16, -0.07, -0.13, 0.01, -0.09, 0.26, -0.14, 0.08, -0.62, -0.2, 0.3, -0.21, -0.11, 0.05, 0.06, -0.28, -0.27, 0.17, 0.42, -0.05, -0.15, 0.05, -0.07, -0.22, -0.34, 0.16, 0.34, 0.1, -0.12, 0.24, 0.45, 0.37, 0.61, 0.9, -0.25, 0.02)
BS <- sample(V1, 100000, replace=TRUE)

approxfun 函数对于在数据集中进行插值没有帮助。发现了一些涉及不同数据集内插值的问题/答案,但不在一个数据集中内插值。感谢您的帮助。

编辑:请注意,我不想拟合正态分布(或任何其他分布)来创建这些点。

最佳答案

您可以使用 approx() (或 approxfun()) 来完成此操作,方法是将 BS 视为 y 坐标并使用顺序x 坐标:

set.seed(1L); BS <- sample(V1,1e5L,T);
res <- approx(seq_along(BS),BS,n=length(BS)*2L-1L)$y;

这里n的规范很重要。它确保在每对相邻输入值之间准确地生成一个插值。


下面是结果摘录图,以相邻对 0.26 和 0.28 第一次出现的位置为中心:

i <- which(BS[-length(BS)]==0.26 & BS[-1L]==0.28)[1L];
j <- i*2L-1L;
xlim <- c(j-6L,j+8L);
ylim <- c(-1,1);
xticks <- seq(xlim[1L],xlim[2L]);
yticks <- seq(ylim[1L],ylim[2L],0.05);
plot(NA,xlim=xlim,ylim=ylim,xlab='res index',ylab='y',axes=F,xaxs='i',yaxs='i');
abline(v=xticks,col='lightgrey');
abline(h=yticks,col='lightgrey');
axis(1L,xticks,cex.axis=0.7);
axis(2L,yticks,sprintf('%.02f',round(yticks,2L)),las=1L,cex.axis=0.7);
x <- seq(xlim[1L],xlim[2L],2L); y <- BS[seq(i-3L,len=8L)];
points(x,y,pch=16L,col='red',xpd=NA);
x <- seq(xlim[1L],xlim[2L]); y <- res[x];
points(x,y,pch=4L,cex=1.2,col='blue',xpd=NA);
text(x+0.24,y+0.03,y,cex=0.7,xpd=NA);
legend(xlim[1L]+1.5,0.87,c('input value','interpolated'),col=c('red','blue'),pch=c(16L,4L));

plot

关于r - 在向量中的点内插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37104994/

相关文章:

r - 为什么此 R CSV 列选择失败?

python - 返回分布的 z 值 - python

MATLAB:时间序列中 NaN 的插值

r - ApproxNA 在大型栅格堆栈中产生不同且不正确的结果

machine-learning - 机器学习中的成本函数是如何确定的?

r - 通过列名称中的参数使用 dplyr 选择

r - 如何在不执行的情况下进入 R 命令提示符的下一行?

r - 如何使用 R 在我的数据中找到最常见的序列?

r - 创建正则表达式以从行值中删除字符串和字符

python - 人口平衡分层随机抽样