用于在R中找到最佳线性模型的命令

时间:2015-11-16 16:23:09

标签: r model linear-regression lm

有没有办法让R运行所有可能的模型(使用数据集中的所有变量组合)来生成最佳/最准确的线性模型,然后输出该模型?

我觉得有办法做到这一点,但我很难找到这些信息。

4 个答案:

答案 0 :(得分:6)

有很多方法可以实现,但是对于这样做的简单方法,我建议您查看glmulti包,本文将对此进行详细介绍:

或者,Quick-R网站上提供的模型选择的非常简单的示例:

# Stepwise Regression
library(MASS)
fit <- lm(y~x1+x2+x3,data=mydata)
step <- stepAIC(fit, direction="both")
step$anova # display results 

或者为了进一步简化,您可以进行更多手动模型比较:

fit1 <- lm(y ~ x1 + x2 + x3 + x4, data=mydata)
fit2 <- lm(y ~ x1 + x2, data=mydata)
anova(fit1, fit2) 

答案 1 :(得分:3)

这应该让你开始。虽然您应该从上面阅读我的评论。这应该基于数据集中的所有数据构建模型,然后将所有模型与AIC和BIC进行比较。

# create a NULL vector called model so we have something to add our layers to
model=NULL

# create a vector of the dataframe column names used to build the formula
vars = names(data)
# remove variable names you don’t want to use (at least
# the response variable (if its in the first column)
vars = vars[-1]

# the combn function will run every different combination of variables and then run the glm
for(i in 1:length(vars)){
  xx = combn(vars,i)
  if(is.null(dim(xx))){
    fla = paste("y ~", paste(xx, collapse="+"))
    model[[length(model)+1]]=glm(as.formula(fla),data=data)
  } else {
    for(j in 1:dim(xx)[2]){
      fla = paste("y ~", paste(xx[1:dim(xx)[1],j], collapse="+"))
      model[[length(model)+1]]=glm(as.formula(fla),data=data) 
    }
  }
}

# see how many models were build using the loop above
length(model)

# create a vector to extract AIC and BIC values from the model variable
AICs = NULL
BICs = NULL
for(i in 1:length(model)){
  AICs[i] = AIC(model[[i]])
  BICs[i] = BIC(model[[i]])
}

#see which models were chosen as best by both methods
which(AICs==min(AICs))
which(BICs==min(BICs))

答案 2 :(得分:0)

R中的dredge()函数也可以做到这一点。

答案 3 :(得分:0)

这是一个非常老的问题,但是对于那些仍在讨论中的人-包olsrr特别是函数ols_step_all_possible会基于lm对象为所有可能的变量子集详尽地生成ols模型(例如通过(如果使用完整模型,则将获得所有可能的组合),并返回所有模型的R平方,调整后的R平方,aic,bic等数据框。这对于找到最佳的预测指标非常有帮助,但也非常耗时。

请参阅https://olsrr.rsquaredacademy.com/reference/ols_step_all_possible.html

我不建议仅“采摘”性能最好的模型,而实际上我会查看输出并仔细选择以获得最合理的结果。如果您想立即获得性能最佳的模型(根据某些条件,例如预测变量和R2的数量),则可以编写一个函数来保存数据帧,按预测变量的数量对其进行排列,并通过对R2进行降序对其进行排序并吐出最好的结果。