gpt4 book ai didi

r - 循环嵌套循环(在 R 或 Stata 中)

转载 作者:行者123 更新时间:2023-12-02 03:30:34 28 4
gpt4 key购买 nike

我有一个 60 维的嵌套循环,即我将 60 个循环相互嵌套。在 Stata 中,MWE 如下所示:

forvalues i = 1/60 {
forvalues j = 1/60 {
forvalues k = 1/60 {
forvalues l = 1/60 {
... imagine the 56 remaining loops here
}
}
}
}

R 中的等价物是:

for(i in 1:60) {
for(j in 1:60) {
for(k in 1:60) {
for(l in 1:60) {
... imagine the 56 remaining loops here
}
}
}
}

这里的目标是避免在我的代码中输入所有 60 个级别,而是为循环结构本身创建一个循环。这个问题显得如此微不足道。但由于某种原因,我很难找到解决方案。

感谢您的任何建议。

其他信息:

我有一个包含 60 个解释变量的数据集,并且希望对这些变量的每种可能的组合进行回归。更具体地说,我分别对所有 60 个解释变量进行因变量的单变量回归,并计算某些标准。然后,我在估计方程中添加第二个回归量并再次计算标准。 IE。 reg DependentVar ExplVar1 ExplVar2reg DependentVar ExplVar1 ExplVar3、...、reg DependentVar ExplVar60 ExplVar59。根据计算的标准,该回归树的分支要么前进,要么终止。例如。第一个分支reg DependentVar ExplVar1 ExplVar2要么继续增长为reg DependentVar ExplVar1 ExplVar2 ExplVar3reg DependentVar ExplVar1 ExplVar2 ExplVar4等,要么终止为reg DependentVar ExplVar1 ExplVar2。多次包含解释因素的分支也会被删除 - 例如 reg DependentVar ExplVar1 ExplVar1 或 reg DependentVar ExplVar1 ExplVar2 ExplVar1 。总的来说,我因此设计了一种模型选择方法。我知道已经存在的模型选择命令,但需要一个针对给定数据集的特定属性进行定制的命令。

最佳答案

考虑使用combnrapply。下面演示了 5 个解释变量。对于实际用例:

  • paste0("ExplVar", 1:5) 替换为 60 个变量的名称(可能使用 names(df))
  • 将序列 1:5 替换为 1:60,其中包括简单的单变量回归
  • DepVar 替换为实际因变量

作为apply家族的递归成员,rapply(我做梦也没想到它会被从架子上拿下来以获得如此答案!)将构建一个字符向量来自嵌套列表的线性公式,然后可以使用 lm 进行迭代:

expvar_list <- lapply(1:5, function(x) combn(paste0("ExplVar", 1:5), x, simplify=FALSE))

formulas_list <- rapply(expvar_list, function(x) paste("DepVar ~", paste(x, collapse="+")))
formulas_list
# [1] "DepVar ~ ExplVar1"
# [2] "DepVar ~ ExplVar2"
# [3] "DepVar ~ ExplVar3"
# [4] "DepVar ~ ExplVar4"
# [5] "DepVar ~ ExplVar5"
# [6] "DepVar ~ ExplVar1+ExplVar2"
# [7] "DepVar ~ ExplVar1+ExplVar3"
# [8] "DepVar ~ ExplVar1+ExplVar4"
# [9] "DepVar ~ ExplVar1+ExplVar5"
# [10] "DepVar ~ ExplVar2+ExplVar3"
# [11] "DepVar ~ ExplVar2+ExplVar4"
# [12] "DepVar ~ ExplVar2+ExplVar5"
# [13] "DepVar ~ ExplVar3+ExplVar4"
# [14] "DepVar ~ ExplVar3+ExplVar5"
# [15] "DepVar ~ ExplVar4+ExplVar5"
# [16] "DepVar ~ ExplVar1+ExplVar2+ExplVar3"
# [17] "DepVar ~ ExplVar1+ExplVar2+ExplVar4"
# [18] "DepVar ~ ExplVar1+ExplVar2+ExplVar5"
# [19] "DepVar ~ ExplVar1+ExplVar3+ExplVar4"
# [20] "DepVar ~ ExplVar1+ExplVar3+ExplVar5"
# [21] "DepVar ~ ExplVar1+ExplVar4+ExplVar5"
# [22] "DepVar ~ ExplVar2+ExplVar3+ExplVar4"
# [23] "DepVar ~ ExplVar2+ExplVar3+ExplVar5"
# [24] "DepVar ~ ExplVar2+ExplVar4+ExplVar5"
# [25] "DepVar ~ ExplVar3+ExplVar4+ExplVar5"
# [26] "DepVar ~ ExplVar1+ExplVar2+ExplVar3+ExplVar4"
# [27] "DepVar ~ ExplVar1+ExplVar2+ExplVar3+ExplVar5"
# [28] "DepVar ~ ExplVar1+ExplVar2+ExplVar4+ExplVar5"
# [29] "DepVar ~ ExplVar1+ExplVar3+ExplVar4+ExplVar5"
# [30] "DepVar ~ ExplVar2+ExplVar3+ExplVar4+ExplVar5"
# [31] "DepVar ~ ExplVar1+ExplVar2+ExplVar3+ExplVar4+ExplVar5"

models_list <- lapply(formulas_list, function(x) summary(lm(as.formula(x), mydata)))

注意:要小心,因为 60 个不同长度的变量的组合数量非常多!

关于r - 循环嵌套循环(在 R 或 Stata 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51969529/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com