将自适应套索函数与引导一起使用时出错

Error while using Adaptive Lasso Function with Boot

我目前有以下代码。当 运行 在 boot() 函数之外使用时该函数有效,但是当使用 boot() 函数时,它会提供错误

Error in t.star[r, ] <- res[[r]] : number of items to replace is not a multiple of replacement length.

当我使用 boot() 函数时,较低的 R 值允许该函数正常 运行。是否需要在我的函数中添加一些内容以确保我不会继续收到此错误?


    alassoOLS_ydot_n10_fn <- function(data,index){ #index is the bootstrap sample index
      x <- data[index,-1]
      y <- data[index,1]
      cv.out <- cv.glmnet(x,y,alpha=1,nfolds=10, penalty.factor = 1 / abs(best_ridge_coef.ydot.n10)) #alpha=1, lasso
      bestlam <- cv.out$lambda.min #the best lambda chosen by CV
      lasso.mod <- glmnet(x,y,alpha=1,lambda=bestlam, penalty.factor = 1 / abs(best_ridge_coef.ydot.n10))
      coef <- as.vector(coef(lasso.mod))[-1]
      coef_nonzero <- coef != 0
      ls.obj <- lm(y ~x[, coef_nonzero, drop = FALSE])
      ls_coef <- (ls.obj$coefficients)[-1]
      return(ls_coef)
    }

boot(ydot_matrix_n10,alassoOLS_ydot_n10_fn,R=500)

alassoOLS_ydot_n10_fn返回的向量长度不是常量,而是取决于glmnet选择的变量个数。
我修改了你的函数如下:

alassoOLS_ydot_n10_fn <- function(data,index){ 
  x <- data[index,-1]
  y <- data[index,1]
  cv.out <- cv.glmnet(x,y,alpha=1,nfolds=10) 
  bestlam <- cv.out$lambda.min #the best lambda chosen by CV
  lasso.mod <- glmnet(x,y,alpha=1,lambda=bestlam, penalty.factor = 1/abs(best_ridge_coef.ydot.n10))
  coef <- as.vector(coef(lasso.mod))[-1]
  coef_nonzero <- coef != 0
  ls.obj <- lm(y ~x[, coef_nonzero, drop = FALSE])
  ls_coef <- (ls.obj$coefficients)[-1]
  # Generate a fixed-length vector fo OLS coefficients
  # The coefficients of variables not selected by glmnet were set to zero.
  vect_coef <- rep(0,length(coef_nonzero))
  vect_coef[coef_nonzero] <- ls_coef
  return(vect_coef)
}

现在输出是一个固定长度的系数向量。
我将 glmnet 未选择的协变量的系数设置为 0。
(我不知道从你调查的统计角度来看是否正确。
我的目的只是为了显示 boot 给出的错误消息的来源。)
现在 boot 可以正常工作了。请参阅以下示例。

set.seed(1)
ydot_matrix_n10 <- matrix(runif(1000), ncol=10)
best_ridge_coef.ydot.n10 <- 10
boot(ydot_matrix_n10,alassoOLS_ydot_n10_fn,R=50)

输出报告如下。

ORDINARY NONPARAMETRIC BOOTSTRAP

Bootstrap Statistics :
       original       bias    std. error
t1*  0.00000000 -0.002330197  0.02319543
t2*  0.13530886 -0.001906712  0.09889174
t3* -0.19509877 -0.013020365  0.07251921
t4* -0.01954785  0.015227018  0.09184750
t5*  0.05600451  0.008896392  0.08729263
t6*  0.12978757 -0.013795860  0.11320119
t7*  0.06525111 -0.007208380  0.09703813
t8*  0.09368079 -0.017343037  0.08947958
t9* -0.09518469 -0.003352512  0.08575450