パネル回帰の場合、plm
パッケージは 2 つの次元に沿ってクラスター化された SE を推定できます。
M. Petersen のベンチマーク結果を使用:
require(foreign)
require(plm)
require(lmtest)
test <- read.dta("http://www.kellogg.northwestern.edu/faculty/petersen/htm/papers/se/test_data.dta")
##Double-clustering formula (Thompson, 2011)
vcovDC <- function(x, ...){
vcovHC(x, cluster="group", ...) + vcovHC(x, cluster="time", ...) -
vcovHC(x, method="white1", ...)
}
fpm <- plm(y ~ x, test, model='pooling', index=c('firmid', 'year'))
これで、クラスター化された SE を取得できるようになります。
##Clustered by *group*
> coeftest(fpm, vcov=function(x) vcovHC(x, cluster="group", type="HC1"))
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.029680 0.066952 0.4433 0.6576
x 1.034833 0.050550 20.4714 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Clustered by *time*
> coeftest(fpm, vcov=function(x) vcovHC(x, cluster="time", type="HC1"))
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.029680 0.022189 1.3376 0.1811
x 1.034833 0.031679 32.6666 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Clustered by *group* and *time*
> coeftest(fpm, vcov=function(x) vcovDC(x, type="HC1"))
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.029680 0.064580 0.4596 0.6458
x 1.034833 0.052465 19.7243 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
詳細については、次を参照してください。
ただし、上記は、データを強制的にpdata.frame
. あると失敗します"duplicate couples (time-id)"
。この場合でもクラスター化できますが、1 つの次元に沿ってのみです。
インデックスを1 つplm
だけ指定することで、適切なパネル データ セットがあると思い込ませます。
fpm.tr <- plm(y ~ x, test, model='pooling', index=c('firmid'))
これで、クラスター化された SE を取得できるようになります。
##Clustered by *group*
> coeftest(fpm.tr, vcov=function(x) vcovHC(x, cluster="group", type="HC1"))
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.029680 0.066952 0.4433 0.6576
x 1.034833 0.050550 20.4714 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
この回避策を使用して、より高い次元またはより高いレベル(industry
または などcountry
) でクラスター化することもできます。ただし、その場合、アプローチの主な制限であるgroup
(or time
)を使用できなくなります。effects
パネルと他のタイプのデータの両方で機能するもう 1 つのアプローチは、multiwayvcov
パッケージです。二重クラスタリングだけでなく、高次元でのクラスタリングも可能です。パッケージのWeb サイトによると、これは Arai のコードを改良したものです。
- 欠落のために削除された観測の透過的な処理
- 完全な多方向 (または n 方向、n 次元、または多次元) クラスタリング
Petersen データと を使用すると、次のようになりcluster.vcov()
ます。
library("lmtest")
library("multiwayvcov")
data(petersen)
m1 <- lm(y ~ x, data = petersen)
coeftest(m1, vcov=function(x) cluster.vcov(x, petersen[ , c("firmid", "year")]))
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.029680 0.065066 0.4561 0.6483
## x 1.034833 0.053561 19.3206 <2e-16 ***
## ---
## Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1