将所选变量与所有其他变量进行回归的函数

Function to regress chosen variable against all others

在我的数据集中,我有 6 个变量(x1、x2、x3、x4、x5、x6),我希望创建一个允许我输入一个变量的函数,它会用其余的变量执行公式数据集中的变量。

例如,

      fitRegression <- function(data, dependentVariable) {
      fit = lm(formula = x1 ~., data = data1) 
      return(fit) 
      }

      fitRegression(x2)

但是,此函数仅 returns 我具有 x1 的结果。我想要的结果是输入任何变量,并自动用其余变量计算公式。

例如:

      fitRegression(x2)

应该从变量列表中减去 x2,因此我们只将 x2 与 x1、x3、x4、x5、x6 进行比较。

如果:

     fitRegression(x3)

应该从比较列表中减去 x3,因此我们将 x3 与 x1,x2,x4,x5,x6 进行比较。

有什么方法可以将其表达到我的函数中,或者更好的函数中。

您想 select 参数中的 Y 变量。主要的困难是在你的函数中传递这个参数而不用任何引号(这显然是你的代码中的预期结果)。因此,您可以使用此方法,使用组合 deparse(substitute(...)):

fitRegression <- function(data, dependentVariable) {
  formula <- as.formula(paste0(deparse(substitute(dependentVariable)), "~."))
  return(lm(formula, data) ) 
}

fitRegression(mtcars, disp)

这将 return 模型。

下面的函数使用 "purrr" 和 "caret" 生成模型列表。

df <-mtcars
library(purrr);library(caret)
#create training set
vect <- createDataPartition(1:nrow(df), p=0.8, list = FALSE)
#build model list
ModList <- 1:length(df) %>% 
  map(function(col) train(y= df[vect,col], x= df[vect,-col], method="lm"))

你可以这样做:

# sample data
sampleData <- data.frame(matrix(rnorm(500),100,5))
colnames(sampleData) <- c("A","B","C","D","E")

# function
fitRegression <- function(mydata, dependentVariable) {

  # select your independent and dependent variables
  dependentVariableIndex<-which(colnames(mydata)==dependentVariable)
  independentVariableIndices<-which(colnames(mydata)!=dependentVariable)

  fit = lm(formula = as.formula(paste(colnames(mydata)[dependentVariableIndex], "~", paste(colnames(mydata)[independentVariableIndices], collapse = "+"), sep = "" )), data = mydata) 
  return(fit) 
}

# ground truth
lm(formula = A~B+C+D+E, data = sampleData)

# reconcile results
fitRegression(sampleData, "A")