例如,我在R中有一个公式
y ~ x + z + xx + zz + tt + x:xx + x:zz + xx:z + zz:xx + xx:zz:tt
或更复杂的(y~x*z*xx*zz*tt)
请注意,公式右侧的名称是故意选择的,以便与至少一个其他术语相似。
现在的问题是如何删除与特定主要效果相关的交互作用术语。例如,如果我删除术语x(主要效果),我想删除也包含x的交互项,这里为x:xx
。
我已经尝试过grepl()
,但是它将删除部分或全部包含该词的词语。在我的示例中,它删除了x,xx,x:xx,xx:z,zz:xx,xx:zz:tt
关于执行此功能的任何想法?
更新: 我已经尝试过的:
f = y ~ x + z + xx + zz + tt + x:xx + x:zz + xx:z + zz:xx + xx:zz:tt
modelTerms = attr(terms(f) , which = 'term.labels')
modelTerms[!grepl(pattern = 'x', x = modelTerms)]
答案 0 :(得分:4)
使用update.formula
:
f <- y~x*z*xx*zz*tt
update(f, . ~ . - x - x:.)
#y ~ z + xx + zz + tt + z:xx + z:zz + xx:zz + z:tt + xx:tt + zz:tt +
# z:xx:zz + z:xx:tt + z:zz:tt + xx:zz:tt + z:xx:zz:tt
f <- y ~ x + z + xx + zz + tt + x:xx + x:zz + xx:z + zz:xx + xx:zz:tt
update(f, . ~ . - x - x:.)
#y ~ z + xx + zz + tt + z:xx + xx:zz + xx:zz:tt
答案 1 :(得分:1)
您在寻找这个吗?
> modelTerms[!grepl(pattern='^x\\:x+', x=modelTerms)]
[1] "x" "z" "xx" "zz" "tt" "x:zz" "z:xx" "xx:zz"
[9] "xx:zz:tt"
答案 2 :(得分:1)
简单:
f = y~x*z*xx*zz*tt
modelTerms = attr(terms(f) , which = 'term.labels')
l = sapply(
strsplit(x = modelTerms, split = '[:*]'),
FUN = function(x) {
'x' %in% x
}
)
modelTerms[!l]