Bootstrap LASSO Lambda

时间:2016-02-05 23:50:53

标签: r bootstrapping

我正在尝试在LASSO回归中引导lambda1参数(库惩罚)(不是系数估计,因为我知道计算例如它们的95%CI是没有意义的,这只是关于lambda1的问题)。 这是我到目前为止的地方:

df <- read.table(header=T, text="group class v1 v2 
1          Ala         1          3.98         23.2  
2          Ala         2          5.37         18.5  
3          C         1          4.73         22.1  
4          B         1          4.17         22.3  
5          C         2          4.47         22.4  
") 

试过这个:

X<-df[,c(3,4)] # data, variables in columns, cases in rows
Y<-df[,2] # dichotomous response
for (i 1:100) {
opt1<-optL1(Y,X)
opt1$lambda
}

但得到错误:意外&#34;}&#34;在&#34;}&#34;

试过这个:

f<-function(X,Y,i){
opt1<-optL1(Y,X,[i])
}
boot(X,f,100)

但是在启动时出现错误(X,f,100):矩阵上的下标数量不正确...有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

以下是for循环的错误:

1)它需要(i in 1:100){}的语法才能工作;

2)它需要在适当的对象中保存opt1 $ lambda;

3)它很可能需要值(Y,X)从循环的一次迭代变为另一次循环。

上述项目1)和2)的R代码可以写成如下:

lambda <- NULL 
for (i in 1:100) {

    opt1 <- optL1(Y,X)  # opt1 will NOT change
                  # since Y and X are the SAME
                  # over each iteration of the for loop
    lambda <- c(lambda, opt1$lambda)

}

lambda

在此代码中,将使用命令lambda - &gt;在for循环的顶部声明将存储在每次迭代时生成的值opt1 $ lambda的对象lambda。 NULL然后在每次迭代后使用该命令进行扩充 lambda&lt; - c(lambda,opt1 $ lambda)。

通常,建议不要对大量迭代使用NULL技巧。更好的选择是:

lambda <- list('vector', 100) 
for (i in 1:100) {

  opt1 <- optL1(Y,X)  # opt1 will NOT change
                  # since Y and X are the SAME
                  # over each iteration of the for loop
  lambda[i] <- opt1$lambda

}

lambda <- unlist(lambda) 

lambda

使用第二种方法,我们在for循环的顶部预先分配lambda为一个包含100个组件的列表,这样第i个组件将存储在第i次迭代期间产生的值opt1 $ lambda。在for循环中,我们使用以下命令将opt1 $ lambda的值保存在名为lambda的列表中:

lambda[i] <- opt1$lambda. 

在循环结束时,我们取消lambda,使其成为常规向量(即数字列)。

答案 1 :(得分:0)

您可以更改函数以接收data.frame,并在optL1中指定用于响应和协变量的列:

library(boot)
library(penalized)

f<-function(data,ind){
fit = optL1(data[ind,"class"],data[ind,c("v1","v2")])
fit$lambda
}

df = data.frame(group=sample(c("A","B","C"),100,replace=TRUE),
class=sample(2,100,replace=TRUE),
v1 = rnorm(100),
v2 = rnorm(100)
)

bo = boot(df,f,100)

o

ORDINARY NONPARAMETRIC BOOTSTRAP


Call:
boot(data = df, statistic = f, R = 100)


Bootstrap Statistics :
    original    bias    std. error
t1* 2.887399 0.2768409     1.85466