2013-02-25 29 views
-1

我想自動執行以下過程。訪問和重用模型公式(R)

  1. 適合使用step()的(lm/glm)模型。
  2. 提取物(1)中,例如,(X1 + X2)的結果模型中的變量作爲一個新的流明/ GLM(加上一些新變量)在Y~X1+X2
  3. 重新使用來自(1)的模型。

我明白模型公式可以使用model$callmodel$terms其中「model」是模型從被訪問,例如

model <- lm(Y~X1+X2) 

但我不管理,以適當的解壓縮和重新詭計在一個新的模式,比如:

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

似乎需要在模型$工作隨叫隨到,但我不知道關於數組的結構以及如何摺疊它。謝謝。

+4

嘗試使用'update'? – liuminzhao 2013-02-25 18:05:19

+0

看起來很有用,乍一看。 – tomka 2013-02-25 18:15:28

+1

在這種情況下,聽起來好像你還沒有完全描述你的問題,這很難回答。嘗試更具體。運行一個特定的例子,用每一步中使用的實際代碼。 – joran 2013-02-25 18:54:01

回答

0

這會給你新的formul對象。它們是否正常工作可能仍然存在問題,因爲它們具有關聯的環境,並且您沒有提供用於測試的數據集。與興田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. 
<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 2013-03-04 12:42:33