我有回归变量a
,b
,c
,e_1
和e_2
,我想运行以下回归:
y ~ a + b + c + e_1 + e_2 + a.e_1 + a.e_2 + b.e_1 + b.e_2 + c.e_1 + c.e_2
e_1
和e_2
的每个必须与a
,b
和c
变量交互。
我实际上有5个e
和其他5个变量。什么是编写代码而不是单独编写a:e_1
,a:e_2
等的最快方法?
如果您知道公式中交互式部分的变量的分组名称,例如下面的p
和q
p <- c("a","b","c")
q <- c("e_1","e_2")
您可以尝试使用下面的代码使用as.formula
和paste0
来生成整个公式,即,
f <- as.formula(paste0("y ~",paste0(c(p,q,do.call(paste, c(expand.grid(p,q),sep = ":"))),collapse = "+")))
诸如此类
> f
y ~ a + b + c + e_1 + e_2 + a:e_1 + b:e_1 + c:e_1 + a:e_2 + b:e_2 +
c:e_2
和
> class(f)
[1] "formula"
~(a+b+c)*(e1+e2)
怎么样?
示例:
dd <- data.frame(a=1,b=1,c=1,e1=1,e2=1)
colnames(model.matrix(~(a+b+c)*(e1+e2),dd)
## [1] "(Intercept)" "a" "b" "c" "e1"
## [6] "e2" "a:e1" "a:e2" "b:e1" "b:e2"
## [11] "c:e1" "c:e2"