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)
我在 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)