我必须在回归中添加大约30个虚拟变量。
如果我的变量名为dummy1
- dummy30
,我会在STATA
中用星号通配符表示。它只是regress y dummy*
而STATA
会添加所有以' dummy'开头的变量。
任何人都可以在[R]
中提示我使用类似的方便程序来阻止我写出30个变量名吗?
答案 0 :(得分:4)
您有两种选择。要么data.frame
的子集只包含虚拟*变量和因变量。在这种情况下,您可以致电lm(dep ~ ., data = your.data)
。 dot参数将假设您尝试使用除dep
以外的所有预测变量。
要仅data.frame
dep
个your.data[grepl("dep|dummy", names(your.data)), ]
和预测变量的子集,您可以使用formula(paste("dep ~", paste("dummy", 1:10, sep = "", collapse = "+")))
。
第二个选项是使用paste构建一个公式参数。
{{1}}
答案 1 :(得分:2)
函数reformulate
是基于字符串创建公式的正确选项。
示例数据框:
set.seed(1)
dat <- data.frame(y = rnorm(10),
dummy1 = rnorm(10),
dummy2 = rnorm(10),
dummy3 = rnorm(10),
other = rnorm(10))
现在,grep
用于查找所有dummy*
个变量。结果用于函数reformulate
:
form <- reformulate(grep("^dummy", names(dat), value = TRUE), response = "y")
# y ~ dummy1 + dummy2 + dummy3
此公式可用于lm
:
lm(form, dat)
# Call:
# lm(formula = form, data = dat)
#
# Coefficients:
# (Intercept) dummy1 dummy2 dummy3
# 0.04785 0.09323 -0.63404 -0.19547