将所选变量与所有其他变量进行回归的函数
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")
在我的数据集中,我有 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")