2013-02-25 3 views
-1

Я хочу автоматизировать следующую процедуру.Формула формулы доступа и повторного использования (R)

  1. Fit a (lm/glm) модель с использованием step().
  2. Извлечение переменных в итоговом модели (1), например, (X1 + X2), как и в Y~X1+X2
  3. Повторное использование модели из (1) в новом лм/GLM (плюс некоторые новые переменные).

Я понимаю модели формулы можно получить с помощью model$call или model$terms где «model» является модель из, например,

model <- lm(Y~X1+X2) 

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

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

Кажется, нужно работать на модели $ вызова, но я не уверен, о структуре массива и о том, как свернуть его. Благодарю.

+4

использования Try 'update'? – liuminzhao

+0

Кажется полезным на первый взгляд, thks. – tomka

+1

В этом случае это звучит так, будто вы не полностью описали свою проблему, что затрудняет ответ. Попытайтесь быть более конкретным. Запустите конкретный пример с фактическим кодом, используемым на каждом шаге. – joran

ответ

0

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

> ## 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. 
<environment: 0x1212230b0> 
> update.formula(lm.D9$call[[2]], Z~.) 
Z ~ group 
<environment: 0x102799fc8> 

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

> 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

 Смежные вопросы

  • Нет связанных вопросов^_^