将自适应套索函数与引导一起使用时出错
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
我目前有以下代码。当 运行 在 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