在R中的lm()中键入多个解释变量是否有捷径?

时间:2018-04-19 22:17:29

标签: r regression linear-regression shortcut lm

我对R中的lm()函数有疑问 我知道lm()用于回归建模,我知道可以做到这一点:

lm(response ~ explanatory1 + explanatory2 + ... + explanatoryN, data = dataset)

现在我的问题是:"假设N很大,是否有我可以使用的捷径,这并不意味着我必须编写所有N变量名称?"

提前致谢!

编辑:我遗漏了一个很大的问题,我真的需要回答。假设我想删除1k解释变量,并且只包含这些变量的n-k

4 个答案:

答案 0 :(得分:2)

您可以使用点符号选择所有变量,只需使用减号选择那些不应用作预测变量的变量。

lm(Sepal.Length ~ .-Species -Petal.Length, iris)

Call:
lm(formula = Sepal.Length ~ . - Species - Petal.Length, data = iris)

Coefficients:
(Intercept)  Sepal.Width  Petal.Width  
 3.4573       0.3991       0.9721  

答案 1 :(得分:2)

假设mtcars为例:

我会抓住预测者。我坚持一个基本的例子,但是可以使用正则表达式grep并保持相同的逻辑(见下文)。我正在使用除第一列(“mpg”)之外的所有列。

predictors <- names(mtcars)[-1] 
# [1] "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"

myFormula <- paste("mpg ~ ", paste0(predictors, collapse = " + "))
# [1] "mpg ~  cyl + disp + hp + drat + wt + qsec + vs + am + gear + carb"

lm(data = mtcars, formula = myFormula)

正则表达式示例

假设iris为例。我想匹配包含“Petal”的所有列名称。

predictors <- grep(x = names(iris), pattern = "Petal", value = TRUE)
#[1] "Petal.Length" "Petal.Width" 

myFormula <- paste("Sepal.Width ~ ", paste0(predictors, collapse = " + "))
# [1] "Sepal.Width ~  Petal.Length + Petal.Width"

lm(data = iris, formula = myFormula)

答案 2 :(得分:1)

您可以使用.

lm(response~., data = data)

答案 3 :(得分:1)

您可以使用点lm(response ~ ., data= dataset)

使用mtcars数据集(已在R中)的示例

ex = lm(mpg~., data = mtcars)
summary (ex)