如何为 2D 核回归手动设置每个方向的带宽值?

问题描述 投票:0回答:0

我目前有工作代码可以对速度向量的 x 和 y 分量进行插值。当前代码使用 npregbw 来优化带宽值。我想手动覆盖这些值并选择我自己的带宽,但我的尝试都没有成功:

这是当前代码:


krViridisColors <- function(xs, a=min(xs), b=max(xs), palette="viridis") {
  colour_values(c(xs, a, b), palette=palette)[1:length(xs)]
}

krInterpolation <- function(xObs, vObs, xPred, bandwidth_x1, bandwidth_x2) {
  bandwidth <- list(bw=c(bandwidth_x1, bandwidth_x2))
  regression <- npreg(list(bw=c(bandwidth_x1, bandwidth_x2)), exdat=xPred, xdat=xObs, ydat=vObs)
  show(bandwidth)
  vPred <- regression$mean
  vPred
}

dataFrame <- read.table("randomized125_v1.csv", header=TRUE, sep=",")
xObs <- cbind(dataFrame$x1, dataFrame$x2)
v1Obs <- dataFrame$v1
v2Obs <- dataFrame$v2

x1Pred <- seq(from=min(xObs[,1]), to=max(xObs[,1]), length.out=24)
x2Pred <- seq(from=min(xObs[,2]), to=max(xObs[,2]), length.out=46)
xPred <- as.matrix(expand.grid(x1Pred, x2Pred))

v1Pred <- krInterpolation(xObs, v1Obs, xPred, bandwidth_x1 = 200, bandwidth_x2 = 200)

v2Pred <- krInterpolation(xObs, v2Obs, xPred, bandwidth_x1 = 200, bandwidth_x2 = 200)

这大部分是不相关的,但我不明白为什么它不使用设置的带宽进行平滑并且仍然使用优化值。

我尝试修改原始代码:

krInterpolation <- function(xObs, vObs, xPred, bandwidth) {
  bandwidth <- np::npregbw(xdat=xObs, ydat=vObs, regtype="lc")
  show(bandwidth)
  regression <- np::npreg(bws=bandwidth, exdat=xPred)
  vPred <- regression$mean
  vPred
}

改为手动指定两个带宽值,但结果是相同的。

r regression interpolation np
© www.soinside.com 2019 - 2024. All rights reserved.