mam model z transformowanych zmiennych, npusunąć zmienną owinięty w zależności od modelu wzorze w R
data = data.frame(y = runif(100,0,10), x1 = runif(100,0,10), x2 = runif(100, 0, 10))
mod = lm(y ~ scale(x1) + scale(x2), data)
ja chce usunąć całą jedną zmienną, na podstawie wzoru, tak jak poniżej:
mod = lm(y ~ scale(x1), # x2 is gone!
data)
Ale chciałbym to zrobić za pomocą dostarczonego przez użytkownika ciągu znaków zmiennej, która ma zostać usunięta (innymi słowy, zawijam to w funkcję i nie można edytować formuły ręcznie, jak mam tutaj).
Jeśli zmienna była nietransformowanego, to byłoby proste używając gsub
:
remove.var = "x2"
update(mod, formula. = as.formula(gsub(remove.var, "", format(formula(mod)))))
ale jako taki, zwraca całkowicie przewidywalny błąd:
> Error in as.matrix(x) : argument "x" is missing, with no default
ponieważ scale()
jest nadal w formule!
Czy istnieje sposób, aby to zrobić z regexpr
, lub w jakiś sposób, że nie widzę, że jest całkowicie oczywiste? Chciałbym, aby był skalowalny do innych typów transformacji, np .: log
, log10
itd.
W innej warstwy złożoności, załóżmy, że zmienna jest usuwana również pojawiła się w interakcji:
mod = lm(y ~ scale(x1) * scale(x2), data)
W tym przypadku trzeba by usuwać interakcję *
oraz (błędny +
s, znalazłem, są ok).
Każda pomoc jest doceniana. Dzięki!
To niby wydaje się jak masz zamiar to do tyłu. W jaki sposób budujesz formułę? Próba usunięcia części (lub funkcji części lub interakcji z częściami) może być dość skomplikowana po fakcie. Wygląda na to, że powinieneś po prostu zbudować formułę na podstawie danych wprowadzanych bezpośrednio przez użytkownika. – MrFlick