在 R 中使用 map() 函数的特定交叉验证过程?

Specific cross-validation procedure using map() function in R?

提问人:entropy 提问时间:3/27/2023 最后编辑:entropy 更新时间:3/27/2023 访问量:33

问:

假设我有 N 个火车集都放在一个名为 dat 的列表中:

dat <- map(tscv$train, ~subset(data, select = .x))

此外,对于每个火车组,我都使用 glmnet 运行套索。对于每个训练集,我使用了 100 个 lambda 值。对于每个训练集,我有 100 个不同的变量子集,由以下方法获得:

selected <- map(dat, ~coef.glmnet(glmnet(.x[ , names(Xlagged)],
                                                   .x[ , "errs"], alpha = 1, lambda = lambdas)))

“selected”是列表列表。例如,将返回特定训练集 (Training1930) 和特定正则化参数 (“s0”) 的最佳变量子集列表。现在,我想从训练集 (dat) 列表中选择最佳变量子集。selected$Training1930$s0

我尝试了以下方法:

dat |> map(~subset(.x, select = map_depth(selected, 2, ~.))) 

它返回错误,如下所示:

其中错误(!as.logical(j)): 不能强制“list”对象键入“logical”

此外,我尝试编写一个函数,该函数适用于特定的训练集和 lambda:


a <- function(nom, s){
  return(dat[[nom]][, selected[[nom]][[s]]])
}
mylist <- list()
for(s in names(selected$Training1638)) {
  mylist[[s]] <- print(map(names(dat), ~a(.x, s)))
}

上面的代码似乎解决了我的问题。但是,我不想使用 for 循环。还有其他解决方法吗?

可重现代码:


    tscv <- list()
    tscv[["train"]] <- list()
    tscv[["train"]][["Training1"]] <- c(1,2,3,4)
    tscv[["train"]][["Training2"]] <- c(1,2,3,4,5)
    set.seed(1)
    full_data <- data.frame(replicate(10,rnorm(10)))
    dat <- map(tscv$train, ~full_data[.x, ])
    
    # Lasso selected features for each train set for 10 different lambdas:
    selected = list(list(list()))
    for (i in paste("s", 1:10, sep = "")) {
      selected[["Training1"]][[i]] <- sample(paste("X", 1:10, sep = ""), 3, rep = TRUE)
      selected[["Training2"]][[i]] <- sample(paste("X", 1:10, sep = ""), 3, rep = TRUE)
    }

目的是对每个训练集(训练 1 和训练 2)进行子集 根据套索根据每个 lambda 选择的变量:

    dat |> map(~subset(.x, select = map_depth(selected, 2, ~.))) 

x[j] 中的错误:下标类型“list”无效


    a <- function(nom, s){
      return(dat[[nom]][, selected[[nom]][[s]]])
    }
    
    # The code below solves my problem and works ok, but I want to avoid for loop:
    mylist <- list()
    for(s in names(selected$Training1)) {
      mylist[[s]] <- map(names(dat), ~a(.x, s))
    }

R 字典 嵌套列表

评论

0赞 akrun 3/27/2023
您展示了一个用于测试的小型可重复示例
0赞 Onyambu 3/27/2023
TRY 而不是 .此外,是一个列表,而列表不是要选择的名称 注意,它适用于数据帧而不是列表selectsubsetmap_depth(selected, 2, ~.)select/subset
0赞 entropy 3/27/2023
@akrun,我添加了一个可重现的代码。

答: 暂无答案