Удаление терминов взаимодействия при удалении основного эффекта - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть формула в 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)]

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Простой:

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]
0 голосов
/ 12 февраля 2019

Использование 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
0 голосов
/ 12 февраля 2019

Вы ищете это?

> modelTerms[!grepl(pattern='^x\\:x+', x=modelTerms)]
[1] "x"        "z"        "xx"       "zz"       "tt"       "x:zz"     "z:xx"     "xx:zz"   
[9] "xx:zz:tt"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...