4

R で回帰を実行し、タイプ ファクターを使用すると、データにカテゴリ変数を設定するのを避けることができます。しかし、重要でない変数を回帰から削除して、重要な変数だけを表示するにはどうすればよいでしょうか?

例えば:

dependent <- c(1:10)
independent1 <- as.factor(c('d','a','a','a','a','a','a','b','b','c'))
independent2 <- c(-0.71,0.30,1.32,0.30,2.78,0.85,-0.25,-1.08,-0.94,1.33)
output <- lm(dependent ~ independent1+independent2)
summary(output)

次の回帰モデルが得られます。

Coefficients:
          Estimate Std. Error t value Pr(>|t|)   
(Intercept)     4.6180     1.0398   4.441  0.00676 **
independent1b   3.7471     2.1477   1.745  0.14148   
independent1c   5.5597     2.0736   2.681  0.04376 * 
independent1d  -3.7129     2.3984  -1.548  0.18230   
independent2   -0.1336     0.7880  -0.170  0.87203   

重要でない独立した 1 レベル (b、d) を引き出したい場合、それを行う方法はありますか?

この場合、カテゴリ変数を持つようにデータを設定するのは簡単ですが、週番号や多くのレベルを持つ別の要因を含めると不便になります。

カテゴリ変数を使用してモデルを構築する方法は次のとおりです。ご覧のとおり、データを構造化するのは面倒ですが、より多くの制御が可能になります。

regressionData <- data.frame(cbind(1:10,c(-0.71,0.30,1.32,0.30,2.78,0.85,-0.25,-1.08,-0.94,1.33),c(0,1,1,1,1,1,1,0,0,0),c(0,0,0,0,0,0,0,1,1,0),c(0,0,0,0,0,0,0,0,0,1),c(1,0,0,0,0,0,0,0,0,0)))

names(output) = c('dependent','independent2','independenta', 'independentb','independentc','independentd')

attach(regressionData)

result <- lm(dependent~independent2+independentb+independentc+independentd)
summary(result)

これで、independent2 は重要ではないので削除できます

result <- lm(dependent~independentb+independentc+independentd)
summary(result)

重要ではないため、独立したものを削除します

result <- lm(dependent~independentb+independentc)
summary(result)

しかし、この場合、調整済み R 2 乗は有意であるため低下します (部分 F 検定は実行しません)。しかし、多くの場合、これは正しくなく、回帰からカテゴリカルを削除する必要があります。この場合に重要な自由度を食い尽くし、重要な他の変数の値を覆い隠す可能性があります。

4

3 に答える 3

1

要約全体ではなく、係数の表だけを取得する場合は、次のようにすることができます。

係数テーブル全体を抽出します。

ss <- coef(summary(output))

必要な行のみを取得します。

ss_sig <- ss[ss[,"Pr(>|t|)"]<0.05,]

printCoefmat有意差星などの係数表をきれいに印刷します。

> printCoefmat(ss_sig)
              Estimate Std. Error t value Pr(>|t|)   
(Intercept)     4.6180     1.0398  4.4414 0.006756 **
independent1c   5.5597     2.0736  2.6811 0.043760 * 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(この回答は@Jilberと似ていますが、重要でない行を手動で指定するのではなく、自動的に検出する点が異なります。)

ただし、これは悪い統計手法であるという上記の@Charlieのコメントに同意する必要があります...予測子を人為的に有意/非有意に二分します(p=0.049とp=0.051の予測子は異なる方法で処理されます)。重要なパラメータの特定のセットがコントラスト/ベースラインとして使用されているレベルに依存するカテゴリ予測子...

于 2012-09-08T01:19:25.610 に答える
1

出力から重要でないレベルのみを削除して推定に含めたい場合は、パッケージのcoeftest関数を使用するだけAERで、適切に indexig を使用すると、必要なものが得られます。

 library(AER)
 coeftest(output)[-c(2,4), ]
                Estimate Std. Error    t value    Pr(>|t|)
(Intercept)    4.6180039  1.0397726  4.4413595 0.006756325
independent1c  5.5596699  2.0736190  2.6811434 0.043760158
independent2  -0.1335893  0.7880382 -0.1695214 0.872031752

パッケージを使用したくない場合AERは、次のこともできます。

summary(output)$coefficients[-c(2,4),]
                Estimate Std. Error    t value    Pr(>|t|)
(Intercept)    4.6180039  1.0397726  4.4413595 0.006756325
independent1c  5.5596699  2.0736190  2.6811434 0.043760158
independent2  -0.1335893  0.7880382 -0.1695214 0.872031752

追加のパッケージをインストールする必要がないため、最後のものをお勧めします。

これがあなたが探しているものかどうかはわかりません。

于 2012-09-07T23:07:24.717 に答える