运行 变量幂集中的线性模型
Run linear model in a powerset of variables
我正在尝试获取具有不同变量的数据框和 运行 这些变量的每个组合的线性模型。
一个简单的例子是:
names <- c("Var1", "Var2", "Var3")
vars <- ggm::powerset(names, sort = T, nonempty = T)
powerset
函数给出了 3 个变量的所有组合——一个包含 7 个元素的列表,每个元素都是字符类型。 (我尝试 运行 的实际代码有 16 个变量,这就是为什么我不想手动编写每个模型的原因)。
我现在想做的是 运行 每个变量组合中的模型。现在,我已经编写了以下代码(它不起作用,但可能是一个好的开始):
i <- 1
for (dep_var in vars){
assign(paste0("modelo", i), lm(lapply(paste("Y", dep_var, sep = "~"), formula),
data = data))
i <- i+1
}
最终,我想创建不同的模型,select 结合样本内 AIC 和 BIC 以及样本外 MAE 和 RMSE 的最佳模型。
非常感谢!感谢您的帮助!
一个简单的例子,使用 mtcars
数据,mpg
作为因变量,AIC 集合用于模型选择。我同意有很多 R 包可以根据某些标准(bestglm
、leaps
、glmulti
、MASS
)测试多个模型。
mtcars_exp <- mtcars %>%
select(-mpg)
vars <- ggm::powerset(names(mtcars_exp), sort = T, nonempty = T)
results <- data.frame(AIC_lm_fit = vector("numeric"),
model = vector("character"))
用于拟合线性模型的 For 循环
for (j in 1:length(vars)){
lm_fit <- lm(mpg ~ ., data = mtcars[,c("mpg", vars[[j]])])
results <- rbind(results,
data.frame(AIC_lm_fit = AIC(lm_fit),
model = toString(vars[[j]])))
}
选择具有最小 AIC 的模型
results[AIC_lm_fit==min(AIC_lm_fit),]
AIC_lm_fit model
105 154.1194 wt, qsec, am
与MASS::stepAIC函数
的结果比较
library(MASS)
lm_fit <- lm(mpg ~ ., data = mtcars)
lm_fit_2 <- stepAIC(lm_fit)
lm_fit_2$call
lm(formula = mpg ~ wt + qsec + am, data = mtcars)
我正在尝试获取具有不同变量的数据框和 运行 这些变量的每个组合的线性模型。
一个简单的例子是:
names <- c("Var1", "Var2", "Var3")
vars <- ggm::powerset(names, sort = T, nonempty = T)
powerset
函数给出了 3 个变量的所有组合——一个包含 7 个元素的列表,每个元素都是字符类型。 (我尝试 运行 的实际代码有 16 个变量,这就是为什么我不想手动编写每个模型的原因)。
我现在想做的是 运行 每个变量组合中的模型。现在,我已经编写了以下代码(它不起作用,但可能是一个好的开始):
i <- 1
for (dep_var in vars){
assign(paste0("modelo", i), lm(lapply(paste("Y", dep_var, sep = "~"), formula),
data = data))
i <- i+1
}
最终,我想创建不同的模型,select 结合样本内 AIC 和 BIC 以及样本外 MAE 和 RMSE 的最佳模型。
非常感谢!感谢您的帮助!
一个简单的例子,使用 mtcars
数据,mpg
作为因变量,AIC 集合用于模型选择。我同意有很多 R 包可以根据某些标准(bestglm
、leaps
、glmulti
、MASS
)测试多个模型。
mtcars_exp <- mtcars %>%
select(-mpg)
vars <- ggm::powerset(names(mtcars_exp), sort = T, nonempty = T)
results <- data.frame(AIC_lm_fit = vector("numeric"),
model = vector("character"))
用于拟合线性模型的 For 循环
for (j in 1:length(vars)){
lm_fit <- lm(mpg ~ ., data = mtcars[,c("mpg", vars[[j]])])
results <- rbind(results,
data.frame(AIC_lm_fit = AIC(lm_fit),
model = toString(vars[[j]])))
}
选择具有最小 AIC 的模型
results[AIC_lm_fit==min(AIC_lm_fit),]
AIC_lm_fit model
105 154.1194 wt, qsec, am
与MASS::stepAIC函数
的结果比较library(MASS)
lm_fit <- lm(mpg ~ ., data = mtcars)
lm_fit_2 <- stepAIC(lm_fit)
lm_fit_2$call
lm(formula = mpg ~ wt + qsec + am, data = mtcars)