首页 文章

在向量中的点内插值

提问于
浏览
0

向量V1包含56个X的观测值,向量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 函数没有像数据集中的插值那样有用 . 已经找到了一些问题/答案,包括在不同数据集内插值,但不在一个数据集内 . 谢谢您的帮助 .

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

1 回答

  • 1

    您可以使用 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

相关问题