r - 如何在 R 模型中生成变量的所有可能组合?

标签 r combinations permutation

假设我有一个包含多个变量的表,a - h,其中h是目标/y/预测变量:

a <- rnorm(10,5,1)
b <- rnorm(10,5,1)
c <- rnorm(10,5,1)
d <- rnorm(10,5,1)
e <- rnorm(10,5,1)
f <- rnorm(10,5,1)
g <- rnorm(10,5,1)
h <- rnorm(10,5,1)

df = data.frame(a,b,c,d,e,f,g,h)

我想运行AIC确定预测 h 的最佳模型。为此,我需要运行 df[1:7] 的每个组合。所以我需要以下 AIC:

lm(fomula= h ~ a+b+c+d+e+f+g)
lm(fomula= h ~ a+b+c+d+e+f)
lm(fomula= h ~ a+b+c+d+e)

以及变量的所有其他配置。请问有什么办法可以做到这一点吗?

为了获得我尝试过的变量的所有可能的公式:

library(combinat)
combn(colnames(df[,1:7]))

但是,我只得到:

[1] "a" "b" "c" "d" "e" "f" "g"

上述代码的输出与我最终想要的相去甚远。

最佳答案

使用step函数。这应该给你最好的模型:

step(lm(h~., df),direction = 'both', trace = 0)

Call:
lm(formula = h ~ b + e + f, data = df)

Coefficients:
(Intercept)            b            e            f  
     4.3494      -0.8705      -0.3266       1.2877  

此模型具有最低的AIC。您可以更改 trace = 1,以查看运行的中间模型

关于r - 如何在 R 模型中生成变量的所有可能组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74493903/

相关文章:

r - findInterval 不适用于 R data.frame 和查找表

r - 优化 sapply() 或 for()、paste(),以有效地将稀疏三元组矩阵转换为 libsvm 格式

SQL:如何检查列中的值是否等于行中其他列的任意组合的总和

java - 掷骰子的所有可能排列

r - 数据框列的组合和排列

r - 等待2个事件。如果其中之一发生,做点什么

r - 使用动态创建的变量来选择 mutate 中的列

java - 数组中元素的组合,用于获取数字的因子

algorithm - k-sub算法子集生成函数的时间复杂度计算

r - 使用堆算法生成排列