Длина вектора, возвращаемого 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)
}
Теперь output представляет собой вектор коэффициентов фиксированной длины.
Я установил в 0 коэффициенты ковариат, не выбранных с помощью gl mnet.
(я не знаю, является ли это правильным со статистической точки зрения в Ваше расследование.
Моя цель - только показать источник сообщения об ошибке, выданного 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