皆さんこんにちは。神奈川大学経営学部・准教授の尻無濱です。
重回帰分析でクラスターロバスト標準誤差を活用するとき、クラスター数が少ないことがあります。クラスター数は一般に20~30は必要と言われます。クラスター数が少ないと、クラスターロバスト標準誤差は真の標準誤差を過小に推定してしまい、誤った仮説検定の結果を導いてしまうそうです(詳しい議論は太田浩司先生の論文を参照)。
そのため、クラスター数が少ない場合には何らかの対応をしなければいけません。いろいろな方法が提案されているのですが、Cameron et al. (2008)が推奨しているwild cluster boostrapがRのパッケージを使うと簡単に実行できるので、ここで紹介しておきます。
使うパッケージは、fwildclusterbootパッケージです。このパッケージに含まれる boottest() 関数を使うことで、簡単にwild cluster boostrapを活用した結果を得ることができます。以下に、簡単な分析コードを書いておきます。
#パッケージをインストール install.packages("fwildclusterboot") library("fwildclusterboot") #まずは普通の回帰分析を行う。2乗項や交差項が入っていてもOK fit_lm <-lm(valueY ~ valueX1 + valueX2 + valueX3 + I(valueX1^2) + valueX1 * valueX2, data=D1) summary(fit_lm) #変数の数を設定 valnum <-length(names(fit_lm$coefficients)) #何も入っていないデータフレームを用意 WCboot <- data.frame(names=rep(NA,valnum),coef=rep(NA,valnum), t_value=rep(NA,valnum),p_value=rep(NA,valnum), CI_low=rep(NA,valnum),CI_high=rep(NA,valnum)) #wild-cluster bootstrapの実行 for (i in 1:valnum){ #シード値を設定しておく set.seed(3776) #clustidにクラスターとして設定する変数を入れる。Bはリサンプリングの回数 #paramは分析結果を返す変数の名前。すでに実行した回帰分析の結果から取得 lm_boot <- boottest(fit_lm, clustid = c("cluster1"), B = 9999, param = names(fit_lm$coefficients)[i]) WCboot$names[i] <- names(fit_lm$coefficients)[i] WCboot$coef[i] <- lm_boot$point_estimate WCboot$t_value[i] <- lm_boot$t_stat WCboot$p_value[i] <- lm_boot$p_val WCboot$CI_low[i] <- lm_boot$conf_int[1] #95%信頼区間の下限 WCboot$CI_high[i] <- lm_boot$conf_int[2] #95%信頼区間の上限 } #分析結果を確認 WCboot #install.packages("modelsummary") library("modelsummary") msummary(lm_boot) #分散説明率などを確認できる
より詳しい解説は、このページやこのページなんかを参考にするとよいでしょう。
最後に、クラスターロバストな標準誤差については西山ほか(2019)『計量経済学』(有斐閣)を読むと読むと勉強になります(第6章)。また、Rを使ってデータ分析をしたい人には、星野ほか(2023)『Rによる実証分析 第2版』(オーム社)や笠原・村宮(2022)『実証会計・ファイナンス』(新世社)をお勧めしておきます。とりわけ、企業の財務データや株価データを分析したいという人には、『実証会計・ファイナンス』を強くおススメしておきます。私自身、この本で勉強した内容を使って分析をしています。
コメント