我想创建一个唯一变量组合的向量来估计不同变量集的各种回归模型,同时固定一个变量始终包含在内。例如,我总是想包含变量X1,加上最多三个的不同组合(这个阈值可能会根据手头的具体数据和研究问题而变化)来自可用变量X2, X3,…,XN的完整列表中的其他变量。我想双变量的情况相当简单。然而,已经对于三变量模型,变量组合“X1 X2 X3”将产生与“X1 X3 X2”相同的系数。此外,我还想排除两次包含相同变量的组合,例如“X1 X2 X2”。
如何最好地排除这些“重复计算”/冗余组合?或者如何创建所有可能的不同组合的这样一个向量?
到目前为止我尝试过的测试代码(用下划线分隔变量):
library(dplyr)
'%!in%' <- function(x,y)!('%in%'(x,y))
A <- c("X1", "X2", "X3", "X4", "X5") # all variables in dataset
a <- "X1" # keep X1 in all models
A_minus_a <- A[A %!in% a]
# first combination:
C1 <- outer(a, A_minus_a, paste, sep = "_")
# second set of combinations:
C2 <- outer(C1, A_minus_a, paste, sep = "_") %>% as.vector
# third set of combinations:
C3 <- outer(C2, A_minus_a, paste, sep = "_") %>% as.vector
# full list of model combinations, but including many "double-counted"/redundant models:
C <- c(C1, C2, C3)
非常感谢您提供的任何帮助!
另外,对于第二步,我可以通过将外层()的结果格式化为矩阵,然后提取没有矩阵对角线的下三角元素来防止这个问题。然而,当转向第三组组合时,这不再起作用。所以,从一开始可能会有更好的解决方案。
使用compn()
怎么样?例如对于三个变量的集合:
cc <- combn(A_minus_a, m=3)
apply(cc,2,paste,collapse="_")
## [1] "X2_X3_X4" "X2_X3_X5" "X2_X4_X5" "X3_X4_X5"