15

Y という結果変数と、Y に影響を与える可能性のある 100 個の次元のリスト (X1...X100 など) があります。

my を実行しglmてモデルの概要を表示すると、統計的に有意な変数が表示されます。これらの変数を選択して別のモデルを実行し、パフォーマンスを比較できるようにしたいと考えています。モデルの要約を解析し、重要なものだけを選択する方法はありますか?

4

4 に答える 4

26

@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 に等しくなり、完全な関係を意味します。

于 2013-04-22T18:58:50.373 に答える
6

関数「summary」を使用して、glm 結果の pvalue にアクセスできます。係数行列の最後の列は "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
于 2013-04-22T18:24:01.747 に答える
1

sig.formula <- as.formula(paste("y ~",relevant.x))

related.x の最初の変数のみを貼り付けます。他の変数は無視されます (たとえば、条件を >0.5 に反転してみてください)。

于 2013-05-03T17:46:50.180 に答える