含两个自变量的Nadaraya-Watson核回归R参数调整问题
关于R语言多自变量Nadaraya-Watson核回归的参数调整问题
首先需要明确:R基础包中的ksmooth()是**仅支持单自变量(一维)**的核回归工具,无法直接处理双自变量(x1、x2)的Nadaraya-Watson估计场景。直接调整range.x、n.points、x.points参数无法实现二维核回归,必须换用支持多变量核回归的专用工具包,同时参数逻辑也会因维度扩展发生变化。
替代方案及对应参数调整逻辑
推荐使用np包(非参数统计工具包)的npreg()函数,它原生支持多变量核回归,对应原ksmooth()参数的调整方式如下:
1. 替代range.x
不需要单独设置范围参数,若要限定预测的自变量范围,直接生成对应x1、x2区间内的网格点即可。例如:
# 指定x1和x2的预测范围 x1_min_max <- range(x1) x2_min_max <- range(x2)
2. 替代n.points
单变量场景的n.points是指定预测点数量,二维场景下需要分别指定x1和x2方向的点数,总预测点数为两者的乘积。例如:
# x1和x2各取50个点,总预测点为2500个 x1_points <- seq(x1_min_max[1], x1_min_max[2], length.out = 50) x2_points <- seq(x2_min_max[1], x2_min_max[2], length.out = 50)
3. 替代x.points
将x1和x2的点组合成二维网格,作为预测输入的自变量集,对应ksmooth()的x.points:
# 生成二维预测网格 pred_grid <- expand.grid(x1 = x1_points, x2 = x2_points)
完整示例代码
# 安装并加载np包 install.packages("np") library(np) # 模拟二维自变量数据 set.seed(123) x1 <- rnorm(100) x2 <- rnorm(100) y <- 2*x1 + 3*x2 + rnorm(100, sd = 0.5) # 拟合多变量Nadaraya-Watson核回归(regtype="lc"为局部常数估计,即Nadaraya-Watson) nw_model <- npreg(y ~ x1 + x2, regtype = "lc") # 生成预测网格 x1_grid <- seq(min(x1), max(x1), length.out = 50) x2_grid <- seq(min(x2), max(x2), length.out = 50) pred_grid <- expand.grid(x1 = x1_grid, x2 = x2_grid) # 执行预测 predicted_y <- predict(nw_model, newdata = pred_grid)
手动实现时的参数调整(不推荐)
若坚持手动实现二维Nadaraya-Watson核回归,参数需按二维逻辑调整:
range.x:改为存储x1、x2各自范围的列表,如range_xy <- list(range(x1), range(x2))n.points:改为指定x1、x2方向点数的向量,如n_points <- c(100, 100)x.points:生成二维网格矩阵,如x_points <- as.matrix(expand.grid(seq(range_xy[[1]][1], range_xy[[1]][2], length.out = n_points[1]), seq(range_xy[[2]][1], range_xy[[2]][2], length.out = n_points[2])))
内容的提问来源于stack exchange,提问作者zaira
相关产品推荐
相关产品推荐

