向量 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));
关于r - 在向量中的点内插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37104994/