首页 > 解决方案 > 如何在预测变量周围粘贴字符串以在 R 中创建模型组合列表?

问题描述

我有一个包含十二个预测变量的向量,我想要所有可能的组合:

#variable vector
d_pred <- c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K" , "L")

#all possible combinations 
library(combinat)
pred_mat  <- combn(d_pred, 4)

然后,我试图将 pred_mat (预测矩阵)中的每一列组合成一个 gam 模型,所以我想要的第一列(V1)的输出将是:

log(Y) ~ s(A,k=4) + s(B, k=4) + s(C, k=4) + s(D, k=4)

其中 Y 是响应变量。最终,我希望将每一列都放入一个模型列表中,这样我就可以将列表输入一个函数来计算每个组合的模型:

library(mgcv)
data= my_data
allModelsResults <- lapply(allModelsList,
                           function(x) gam(x, data=data))

要创建我尝试过的“allModelList”:

allModelsList <- apply(pred_mat, 1, function(x) as.formula(
  paste(c("log(Y) ~ s(", pred_mat[x]), "(k= 4)"
        collapse=" + ")) )

但它不起作用。我环顾四周,但没有运气。有谁知道如何在组合列(即 pred_mat 中的每一列)的每个预测变量周围添加“s(”和“),k=4”?

太感谢了!

标签: rcombinationsapplypastemgcv

解决方案


你可以试试

allModelsList <- apply(pred_mat, 1, function(x) as.formula(
  paste0("log(Y) ~ ", paste("s(", x, ", k=4)", collapse ="+")) ))

这应该返回

head(allModelsList)
#> [[1]]
#> log(Y) ~ s(A, k = 4) + s(B, k = 4) + s(C, k = 4) + s(D, k = 4)
#> <environment: 0x00000230b4c16968>
#> 
#> [[2]]
#> log(Y) ~ s(A, k = 4) + s(B, k = 4) + s(C, k = 4) + s(E, k = 4)
#> <environment: 0x00000230b4c1bcc0>
#> 
#> [[3]]
#> log(Y) ~ s(A, k = 4) + s(B, k = 4) + s(C, k = 4) + s(F, k = 4)
#> <environment: 0x00000230b4d30760>
#> 
#> [[4]]
#> log(Y) ~ s(A, k = 4) + s(B, k = 4) + s(C, k = 4) + s(G, k = 4)
#> <environment: 0x00000230b4d31c38>
#> 
#> [[5]]
#> log(Y) ~ s(A, k = 4) + s(B, k = 4) + s(C, k = 4) + s(H, k = 4)
#> <environment: 0x00000230b4d33110>
#> 
#> [[6]]
#> log(Y) ~ s(A, k = 4) + s(B, k = 4) + s(C, k = 4) + s(I, k = 4)
#> <environment: 0x00000230b4d3a428>

推荐阅读