R 中用于非参数分位数回归的网格搜索

Grid Search in R for Nonparametric Quantile Regression

我在 R 中使用了一个名为 "quantreg" 的库,并尝试在时间序列的基础上估计完整的非参数分位数回归。为了获得具有统计意义的结果,我尝试了很多变量和平滑参数值 (lambda)。但这很累人,而且非常耗时。因此,我想应用网格搜索,但对我来说有点难。我想确定最佳平滑值,所以我应该构造一个 for 循环。但我希望该循环尝试每种组合。在我想拥有最佳模型或模型的 lambda 值(所有变量的 p 值 < 0.05 条件)。 例如,如果我的方程式中有三个变量,我会这样写:

lambdas1<-rbind(1,2,3)
lambdas2<-rbind(1,2,3)
lambdas3<-rbind(1,2,3)
    
mylist<-list()
    for (i in 1:3) {
      for (j in 1:3) {
        for (n in 1:3) {
          f <-try(rqss(Y~qss(X1,lambda = lambdas1[i])+qss(X2,lambda = lambdas2[j])+qss(X3,lambda = lambdas3[n]), tau=0.05)) 
          sf<-summary(f)
          if( (sf[["qsstab"]]['X1','Pr(>F)']<0.05)&(sf[["qsstab"]]['X2','Pr(>F)']<0.05)&(sf[["qsstab"]]['X3','Pr(>F)']<0.05) ){
            mylist[[i]]<-f$lambdas
          }
        }
      }
    }

如何重新排列此代码? 有捷径吗?

如有任何帮助,我们将不胜感激。 提前谢谢你。

您可以使用baseR expand.grid创建所有可能组合的data.frame,然后使用apply(grid, MARGIN=2, ...)循环遍历其行,我也“优化”了如果每个 p-value 我都将其更改为使用 all(p.vals < .05)

lambdas <- expand.grid(1:3,1:3,1:3) 
check_lambdas <- function(lambdas){
    f <-try(rqss(Y~qss(X1,lambda = lambdas[1])+qss(X2,lambda = lambdas[2])+qss(X3,lambda = lambdas[3]), tau=0.05)) 
    if( all(summary(f)$qsstab[,'Pr(>F)']<0.05) ) f$lambdas else NULL
}
apply(lambdas, 2, check_lambdas)