皆さんこんにちは。神奈川大学経営学部・准教授の尻無濱です。
重回帰分析でクラスターロバスト標準誤差を活用するとき、クラスター数が少ないことがあります。クラスター数は一般に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)『実証会計・ファイナンス』(新世社)をお勧めしておきます。とりわけ、企業の財務データや株価データを分析したいという人には、『実証会計・ファイナンス』を強くおススメしておきます。私自身、この本で勉強した内容を使って分析をしています。


コメント