21

それぞれを完全に指定せずに、特定の変数を glm 回帰に強制したいと思います。私の実際のデータセットには、約 200 個の変数があります。これまでのオンライン検索では、このサンプルを見つけることができませんでした。

例 (3 つの変数のみ):

n=200
set.seed(39) 
samp = data.frame(W1 = runif(n, min = 0, max = 1), W2=runif(n, min = 0, max = 5)) 
samp = transform(samp, # add A
A = rbinom(n, 1, 1/(1+exp(-(W1^2-4*W1+1))))) 
samp = transform(samp, # add Y
Y = rbinom(n, 1,1/(1+exp(-(A-sin(W1^2)+sin(W2^2)*A+10*log(W1)*A+15*log(W2)-1+rnorm(1,mean=0,sd=.25))))))

すべての主要な用語を含めたい場合、これには簡単なショートカットがあります。

glm(Y~., family=binomial, data=samp)

しかし、すべての主要な用語 (W1、W2、および A) と W2^2 を含めたいとします。

glm(Y~A+W1+W2+I(W2^2), family=binomial, data=samp)

これにはショートカットがありますか?

[公開前に自分自身を編集:] これは機能します!glm(formula = Y ~ . + I(W2^2), family = binomial, data = samp)

さて、これはどうですか!

主要な用語変数を 1 つ省略し、2 つの主要な用語 (A、W2) と W2^2 および W2^2:A のみを含めたいと考えています。

glm(Y~A+W2+A*I(W2^2), family=binomial, data=samp)

明らかに、変数がわずかしかない場合は近道は必要ありませんが、私は高次元のデータを扱っています。現在のデータセットには 200 個の変数しかありませんが、他のいくつかの変数には何千もの変数があります。

4

2 に答える 2

21

.すべてまたはほとんどすべての変数を含む式を作成するために創造的に使用することは、優れたクリーンなアプローチです。便利なもう1つのオプションは、数式を文字列としてプログラムで作成し、次のコマンドを使用して数式に変換することas.formulaです。

vars <- paste("Var",1:10,sep="")
fla <- paste("y ~", paste(vars, collapse="+"))
as.formula(fla)

もちろん、flaオブジェクトをもっと複雑にすることもできます。

于 2010-08-28T13:21:40.493 に答える
16

アニコはあなたの質問に答えました。少し拡張するには:

-:を使用して変数を除外することもできます。

glm(Y~.-W1+A*I(W2^2), family=binomial, data=samp)

変数の大きなグループの場合、変数をグループ化するためのフレームを作成することがよくあります。これにより、次のようなことができます。

vars <- data.frame(
    names = names(samp),
    main = c(T,F,T,F),
    quadratic =c(F,T,T,F),
    main2=c(T,T,F,F),
    stringsAsFactors=F
)


regform <- paste(
    "Y ~",
    paste(
      paste(vars[vars$main,1],collapse="+"),
      paste(vars[1,1],paste("*I(",vars[vars$quadratic,1],"^2)"),collapse="+"),
      sep="+"
    )
)
> regform
[1] "Y ~ W1+A+W1 *I( W2 ^2)+W1 *I( A ^2)"

> glm(as.formula(regform),data=samp,family=binomial)

あらゆる種類の条件(名前、構造など)を使用してデータフレームを埋めることで、大規模なデータセット内の変数のグループをすばやく選択できます。

于 2010-08-29T08:34:50.740 に答える