-1

我想自动化以下过程。

  1. 使用 . 拟合 (lm /glm) 模型step()
  2. 提取 (1) 的结果模型中的变量,例如 (X1+X2),如Y~X1+X2
  3. 在新的 lm/glm(加上一些新变量)中重新使用 (1) 中的模型。

我了解模型公式可以使用model$callmodel$terms从哪里访问模型公式model,例如

model <- lm(Y~X1+X2)

但我无法正确提取它并在新模型中重新使用它,例如:

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

似乎需要对 model$call 进行处理,但我不确定数组的结构以及如何折叠它。谢谢。

4

1 回答 1

0

这将为您提供新的公式对象。它们是否正常工作可能仍然存在问题,因为它们具有关联的环境并且您没有提供用于测试的数据集。从 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.
<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  
于 2013-02-25T20:14:14.540 回答