Yなどの結果変数と、Yに影響を与える可能性のある100個のディメンションのリスト(X1 ... X100など)があります。
glm
を実行し、モデルの概要を表示した後、統計的に有意な変数が表示されます。これらの変数を選択して別のモデルを実行し、パフォーマンスを比較できるようにしたいと思います。モデルの要約を解析して、重要なものだけを選択する方法はありますか?
関数「summary」を介して、glm結果のp値にアクセスできます。係数行列の最後の列は「Pr(> | t |)」と呼ばれ、モデルで使用される因子のp値を保持します。
次に例を示します。
#x is a 10 x 3 matrix
x = matrix(rnorm(3*10), ncol=3)
y = rnorm(10)
res = glm(y~x)
#ignore the intercept pval
summary(res)$coeff[-1,4] < 0.05
@kithが道を開いたが、できることはまだまだある。実際、プロセス全体を自動化することができます。まず、いくつかのデータを作成しましょう。
_x1 <- rnorm(10)
x2 <- rnorm(10)
x3 <- rnorm(10)
y <- rnorm(10)
x4 <- y + 5 # this will make a Nice significant variable to test our code
(mydata <- as.data.frame(cbind(x1,x2,x3,x4,y)))
_
その場合、モデルは次のようになります。
_model <- glm(formula=y~x1+x2+x3+x4,data=mydata)
_
そして、係数のブールベクトルは実際に次の方法で抽出できます。
_toselect.x <- summary(model)$coeff[-1,4] < 0.05 # credit to kith
_
でもこれが全てじゃない!さらに、これを行うことができます:
_# select sig. variables
relevant.x <- names(toselect.x)[toselect.x == TRUE]
# formula with only sig variables
sig.formula <- as.formula(paste("y ~",relevant.x))
_
編集:後続のポスターが指摘しているように、すべての変数を含めるには、後者の行をsig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+")))
にする必要があります。
そして、OPが当初望んでいたように、有意な変数のみを使用して回帰を実行します。
_sig.model <- glm(formula=sig.formula,data=mydata)
_
この場合、x4をy + 5として定義したため、推定値は1に等しくなり、完全な関係を意味します。
Maxim.Kコマンドに問題がある人のために
sig.formula <- as.formula(paste("y ~",relevant.x))
これを使って
sig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+")))
最終的なコードは次のようになります
toselect.x <- summary(glmText)$coeff[-1,4] < 0.05 # credit to kith
# select sig. variables
relevant.x <- names(toselect.x)[toselect.x == TRUE]
# formula with only sig variables
sig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+")))
これにより、最初の変数のみを選択する際に直面しているバグが修正されます。
に
sig.formula <-as.formula(paste( "y〜"、relevant.x))
related.xの最初の変数のみを貼り付け、他の変数は無視されます(たとえば、条件を> 0.5に反転してみてください)