如果我有100个具有通用名称的变量,例如year_1951,year_1952,year_1953等,有没有办法进行线性回归,包括以year_开头的所有变量?在Stata中,使用*很容易,但是在R中,我不确定如何解决这个问题。
感谢。
Stata示例:
regress y year_
*
R中是否存在等价,例如
ols.lm <- lm(y ~ year_*, data = d)
答案 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])