Доступ & формула (R) модели Повторного использования

Я хочу автоматизировать следующую процедуру.

  1. Fit a (lm /glm) model using step().
  2. Extract the variables in the outcome model of (1), e.g., (X1+X2) as in Y~X1+X2
  3. Re-use the model from (1) in a new lm/glm (plus some new variables).

Я понимаю, что к образцовым формулам можно получить доступ, используя model$call или model$terms , где' модель ' является моделью от, например.

model <- lm(Y~X1+X2)

Но мне не удается извлечь его правильно и переуловка это в новой модели, такой как:

model2 <- lm(paste('Z~',model$call[[2]],'+X3',sep=""))

Кажется, должен работать над model$call, но я не уверен в структуре множества и как упасть в обморок он. Спасибо.

1
nl ja de
В этом случае это походит на вас haven' t полностью описал вашу проблему, которая мешает отвечать. Попытайтесь быть намного более конкретными. Пробегите определенный пример с фактическим кодом, используемым в каждом шаге.
добавлено автор joran, источник
на основе того, что вы сказали прежде, и @liuminzhao' s комментарий, вы ищете model2 <-обновление (модель, Z ~. + X3) . @DWin' s решение ниже выглядит более сложным, чем это должно быть, начиная с большая часть из обновление() оборудование автоматически извлекает формулу и обновляет его.
добавлено автор Ben Bolker, источник
Попробовать использование обновление ?
добавлено автор liuminzhao, источник
Кажется полезным на первый взгляд, thks.
добавлено автор tomka, источник

1 ответы

Это даст вам новые объекты formul. Работают ли они, правильно может все еще быть рассматриваемым, так как они связали окружающую среду, и вы не обеспечили набор данных для тестирования. Старт с примера на hte update.formula страница:

> ## Annette Dobson (1990) "An Introduction to Generalized Linear Models".
> ## Page 9: Plant Weight Data.
> ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
> trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
> group <- gl(2, 10, 20, labels = c("Ctl", "Trt"))
> weight <- c(ctl, trt)
> lm.D9 <- lm(weight ~ group)
> update.formula(lm.D9$call[[2]], .~.)
weight ~ group  # Just to make sure that we got something sensible.

> update.formula(lm.D9$call[[2]], Z~.)
Z ~ group

Кажется, работает над моим тестовым сценарием, используя случайную перестановку вес :

> Z <- sample(weight)
> lm(update.formula(lm.D9$call[[2]], Z~.), data.frame(Z=Z, group=group) )

Call:
lm(formula = update.formula(lm.D9$call[[2]], Z ~ .), data = data.frame(Z = Z, 
    group = group))

Coefficients:
(Intercept)     groupTrt  
      4.711        0.271  
0
добавлено
Благодаря всем: обновление добивается цели к моему оригинальному вопросу.
добавлено автор tomka, источник