在下面的MWE中,我有一个包含70个潜在预测因子的数据集来解释我的变量price1
。我想对所有变量进行单变量分析,但包glmulti
表示我有too many predictors
。单变量分析如何有太多预测因子?
*我可以通过loop
/ apply
来实现,但我正在寻找更详细的内容。类似的问题here也没有解决问题。
test <- read.csv(url("https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/Ecdat/Car.csv"))
library(glmulti)
glmulti.lm.out <- glmulti(data = test, price1 ~ .,
level = 1,
method = "h",
maxK = 1,
confsetsize = 10,
fitfunction = "lm")
Error
Warning message:
In glmulti(y = "price1", data = test, level = 1, maxK = 1, method = "h", :
!Too many predictors.
答案 0 :(得分:1)
这个问题更适合CrossValidated,但这是我的两分钱。运行详尽的搜索以找到要包含在模型中的最佳变量,计算量非常大,并且很快就会失控。考虑一下您要求计算机执行的操作:
当您进行详尽的搜索时,计算机正在为每个可能的变量组合构建模型。对于尺寸为1的型号,这不是太糟糕,因为它只有70个型号。但即使对于双变量模型,计算机也必须运行n!/(r!(n-r)!)= 70!/(2!(68)!)= 2415种不同的模型。事情从那里开始失控。
作为解决方法,我会指向leaps
包,其中包含regsubsets
功能。然后,您可以运行前向或后向子集选择模型,并以逐步方式查找最重要的变量。运行每个变量后,您可以抛弃每个变量,并使用glmulti
以较少的预测变量运行模型,但不承诺。
test.data <-
read.csv(url("https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/ma
ster/csv/Ecdat/Car.csv"))[,2:71]
library(leaps)
big_subset_model <- regsubsets(x = price1 ~ ., data = test.data, nbest = 1,
method = "forward", really.big = TRUE, nvmax = 70)
sum.model <- summary(big_subset_model)
答案 1 :(得分:0)
使用lapply进行univariate
分析的简单解决方案。
test <- read.csv(url("https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/Ecdat/Car.csv"))
reg <- function(indep_var,dep_var,data_source) {
formula <- as.formula(paste(dep_var," ~ ", indep_var))
res <- lm(formula, data = data_source)
summary(res)
}
lapply(colnames(test), FUN = reg, dep_var = "price1", data_source = test)