在lm中使用*表示具有通用名称的变量

时间:2014-11-26 06:50:03

标签: r

如果我有100个具有通用名称的变量,例如year_1951,year_1952,year_1953等,有没有办法进行线性回归,包括以year_开头的所有变量?在Stata中,使用*很容易,但是在R中,我不确定如何解决这个问题。

感谢。

Stata示例:

regress y year_ *

R中是否存在等价,例如

ols.lm <- lm(y ~ year_*, data = d)

2 个答案:

答案 0 :(得分:1)

我不认为R支持公式中的那种扩展。它支持y~。有点扩张。

以下是如何做到这一点

variables <- colnames(d)
depVar <- 'y'
indepVars <- variables[grepl('^year_',variables)]
myformulae <- as.formula(paste(depVar,paste(indepVars,collapse=' + '),sep = ' ~ '))
modelfit <-lm(myformulae,data=d)

修改 :解决注释中提到的问题(在公式中添加常量)

variables <- colnames(d)
depVar <- 'y'
indepVars <- variables[grepl('^year_',variables)]
indepVarsCollapse <- paste(paste(indepVars,collapse=' + '), '-1')
myformulae <- as.formula(paste(depVar,indepVarsCollapse,sep = ' ~ '))
modelfit <-lm(myformulae,data=d)

答案 1 :(得分:1)

不是选择公式中的列,而是在data参数中选择它们:

nms <- c("y", grep("year_", names(d), value = TRUE))
lm(y ~., d[nms])

或者,选择grep

中的所有所需列
ix <- grep("^(y$|year_)", names(d))
lm(y ~., d[ix])

或者如果我们知道不需要的列不以y开头:

ix <- grep("^y", names(d))
lm(y ~., d[ix])