将所选变量与所有其他变量相对应的函数

时间:2016-09-08 11:31:29

标签: r function regression

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

例如,

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

      fitRegression(x2)

但是,此函数仅返回x1的结果。我希望的结果是输入任何变量,并自动用其余变量做公式。

例如:

      fitRegression(x2)

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

以及如果:

     fitRegression(x3)

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

有没有办法将其表达为我的功能,甚至更好的功能。

3 个答案:

答案 0 :(得分:1)

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

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

fitRegression(mtcars, disp)

这将返回模型。

答案 1 :(得分:1)

以下功能使用&#34; purrr&#34;和&#34;插入&#34;它会生成一个模型列表。

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"))

答案 2 :(得分:1)

你可以这样做:

# 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")