【问题标题】:Write a function to list all possible combinations of models编写一个函数来列出所有可能的模型组合
【发布时间】:2020-03-12 00:05:18
【问题描述】:

我正在尝试编写一个函数来为数据集中的变量运行所有可能的回归模型。我能够让它运行每个变量,这就是我到目前为止所拥有的。

library(tidyverse)
library(broom)
data("mtcars")
model1 <- function (DATA) {
DATA %>%
  map(~lm(mpg ~ .x, data = DATA), tidy)%>%   map(summary) %>% 
  map_dbl("adj.r.squared") %>%
  tidy %>% 
  rename(adj.r.squared = x)
}

model1(mtcars) 

我是 R 和编写函数的新手,所以我确信它存在一些问题。我想要所有可能模型的所有调整后的 r 平方值的小标题。如何编写一个对两个、三个或更多变量执行相同操作的函数?

【问题讨论】:

  • 你的意思是你想对数据集的所有可能的输入变量子集运行一个普通的最小二乘回归?
  • 虽然这是可能的,但实际上建议重新考虑,因为随着预测变量数量或模型运行时间的增加以及从统计背景来看,它变得令人望而却步;您应该包括所有您认为可能具有预测性的变量。如果他们是 - 好 - 如果他们不是 - 他们的影响大小会很小
  • 我想要所有可能的子集。
  • 不是一个好主意,但请查看 ols_step_all_possible 包中的函数 olsrr

标签: r function regression lm


【解决方案1】:

我不知道有任何软件包可以自动执行此操作。所以,让我们尝试一种蛮力方法。这个想法是手动生成所有可能的组合并对其进行迭代。

vars <- names(mtcars)[-1]

models <- list()

for (i in 1:5){
  vc <- combn(vars,i)
  for (j in 1:ncol(vc)){
    model <- as.formula(paste0("mpg ~", paste0(vc[,j], collapse = "+")))
    models <- c(models, model)
  }
}

您可以使用这些公式来运行线性模型。

lapply(models, function(x) lm(x, data = mtcars))

【讨论】:

    猜你喜欢
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多