0

テストするモデル仕様のセットがたくさんあります。これらはdvを共有していますが、固有のIVを持っています。次の例では

foo <- data.frame(dv  = sample(c(0,1), 100, replace=T),
                  x1 = runif(100),
                  x2 = runif(100))

最初のモデルにはx1、2番目のx2、3番目の両方、4番目の相互作用のみを含める必要があります。したがって、賢明な方法は、数式ステートメントのリストを作成することだと思いました。

bar <- list("x1",
            "x2", 
            "x1+x2",
            "x1*x2")

次に、パッケージllplyからの呼び出しでこれを使用して、モデルオブジェクトのリストを取得します。plyr

require(plyr)
res <- llply(bar, function(i) glm(dv ~ i, data = foo, family = binomial()))

残念ながら私は言われています

Error in model.frame.default(formula = dv ~ i, data = foo, drop.unused.levels = TRUE):variable lengths differ (found for 'i')

明らかに、私は何か基本的なことを混同しています-元のfooリストを何らかの方法で操作する必要がありますか?

4

2 に答える 2

3

関数iの内部は変数であるため、問題は数式の指定方法にあります。これはうまくいくでしょう:

glm(paste("dv ~", i), data = foo, family = binomial())
于 2012-08-07T15:57:32.797 に答える
2

問題は、それdv ~ iが公式ではないということです。i(無名関数内で)は、文字値を含む変数を表す単なるシンボルです。

これを試して:

bar <- list("dv~x1",
            "dv~x2", 
            "dv~x1+x2",
            "dv~x1*x2")

res <- llply(bar, function(i) glm(i, data = foo, family = binomial()))

しかし、統計的な問題はさておき、これに似たタスクには、MASSパッケージのよう?stepなものを使用する方が簡単かもしれません。?stepAIC

于 2012-08-07T15:46:37.883 に答える