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

r

我有一个具有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个解释变量运行因变量的单变量回归并计算某些条件。然后,将第二个回归变量添加到估计方程式,然后再次计算标准。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 ExplVar1reg DependentVar ExplVar1 ExplVar2 ExplVar1总体而言,我因此设计了一种模型选择方法。我知道已经存在的模型选择命令,但是需要针对给定数据集的特定属性定制的命令。

完善

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

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

作为apply系列的递归成员rapply(我从来没有想过会被淘汰以获取SO答案!)将从嵌套列表中构建线性公式的字符向量,然后可以使用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个变量的组合数量非常多!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章