-1

以下の手順を自動化したい。

  1. を使用して (lm /glm) モデルを近似しstep()ます。
  2. (1) の結果モデルの変数を抽出します。たとえば、(X1+X2) を次のように抽出します。Y~X1+X2
  3. (1) のモデルを新しい lm/glm (およびいくつかの新しい変数) で再利用します。

model$callモデル式は、またはを使用してアクセスできることを理解しています。たとえば、 model$termsmodel」はモデルの元です。

model <- lm(Y~X1+X2)

しかし、私はそれを適切に抽出して、次のような新しいモデルで再利用することができません:

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

model$call で作業が必要なようですが、配列の構造とそれを折りたたむ方法についてはわかりません。ありがとう。

4

1 に答える 1

0

これにより、新しい数式オブジェクトが得られます。環境が関連付けられており、テスト用のデータセットが提供されていないため、それらが適切に機能するかどうかはまだ疑問視されている可能性があります。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 に答える