作者:电信他爹_186 | 来源:互联网 | 2022-12-06 21:15
我有一个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 ExplVar2
,reg DependentVar ExplVar1 ExplVar3
,..., reg DependentVar ExplVar60 ExplVar59
。取决于计算的标准,该回归树的分支可以提前,也可以终止。例如,第一个分支reg DependentVar ExplVar1 ExplVar2
要么继续增长为reg DependentVar ExplVar1 ExplVar2 ExplVar3
,reg DependentVar ExplVar1 ExplVar2 ExplVar4
等等,要么终止为reg DependentVar ExplVar1 ExplVar2
。包含多个解释性因素的分支也会被剪切-例如reg DependentVar ExplVar1 ExplVar1
或reg DependentVar ExplVar1 ExplVar2 ExplVar1
。因此,总的来说,我设计了一种模型选择方法。我知道已经存在的模型选择命令,但是需要针对给定数据集的特定属性进行定制的命令。
1> Parfait..:
考虑rapply
与combn
。下面演示了5个解释变量。对于实际用例:
替换paste0("ExplVar", 1:5)
为您的60个变量的名称(可能使用names(df)
)
替换序列1:5
,1: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个变量的组合数量非常多!