餡子付゛録゛

ソフトウェア開発ツールの便利な使い方を紹介。

パネルデータで全員が一斉に説明変数の値を変化させたときのタイムダミーの係数

立命館大学の柴田悠氏への私信なのですが、パネルデータ分析の固定効果モデルに年次などタイムダミーが入っているときに、ある瞬間に個々が同じような行動をとって、説明変数の値を一斉に変化させたときに、それがタイムダミーの係数として観測されない事を、シミュレーションで示したいと思います*1

1. モデル

計量モデルは以下になります。
 Y_t = a_i + \beta X_t + \sum^T_{i=1} \gamma_i TD_i + \epsilon
Yが被説明変数、Xが説明変数、aが固定効果、βとγは推定する係数、Iが個々の数、iが個々を表す添字、Tが期間の長さ、tが期を表す添字とします。εは誤差項です。

2. 係数の真の値

Iは10、Tは5として、真の値はβが0.015、\gamma_tが{0.00 0.05 0.04 0.06 0.02}、a_iが{0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0}を設定します。

3. 観測値の生成

観測値になるXは一様分布から乱数で0から1を生成し、t=3のときだけ+1するようにしましょう。ある瞬間に個々が同じような行動をとった例とします。誤差項εは標準偏差0.1の正規分布から生成します。Xとεが決まれば、真の値から観測値Yも定まります。
Rで生成するためのコードは以下になります。

set.seed(201408)
I <- 10 # 個体の数
ai <- (1:i)/10 # 固定効果
T <- 5 # 期間の長さ
gamma <- c(0, (5^(1:(T-1)) %% 7)/100) # タイムダミーの効果
epsilin <- rnorm(I*T, sd=0.1)
df <- data.frame(
  i = numeric(I*T), t = numeric(I*T), Y = numeric(I*T), X = numeric(I*T)
)
for(i in 1:I){
  for(t in 1:T){
    l <- (i-1)*T + t
    df$i[l] <- i
    df$t[l] <- t
    df$X[l] <- runif(1) + ifelse(t==3, 1, 0)
    df$Y[l] <- ai[m] + 0.15*df$X[l] + gamma[t] + epsilin[l]
  }
}

生成した観測値の一部を見ると、こうなります。t=3のときに、明らかにXが大きくなっていることを確認してください。

i t Y X
1 1 1.0242424 0.90365560
1 2 1.2447202 0.74466442
1 3 1.2130497 1.03975109
1 4 1.3497088 0.29219997
1 5 1.0248503 0.02165759
2 1 1.3007814 0.63130932
2 2 1.3448006 0.86396715
2 3 1.2383986 1.17330402
2 4 1.2283682 0.66754810
2 5 1.1475519 0.75067122

4. 推定結果

ちゃっちゃと固定効果モデルで推定してみましょう。plmパッケージを使います。

library(plm)
plmdata <- plm.data(df, index=c("i", "t"))
td <- as.factor(df$t)
rfe <- plm(Y ~ X + td, model="within", data=plmdata)
summary(rfe)

推定結果は以下になります。

Oneway (individual) effect Within Model

Call:
plm(formula = Y ~ X + td, data = plmdata, model = "within")

Balanced Panel: n=10, T=5, N=50

Residuals :
Min. 1st Qu. Median 3rd Qu. Max.

  • 0.16200 -0.05120 -0.00315 0.04550 0.16500

Coefficients :
Estimate Std. Error t-value Pr(>|t|)
X 0.188583 0.049956 3.7750 0.0005953 ***
td2 0.067277 0.041042 1.6392 0.1101244
td3 -0.015109 0.059223 -0.2551 0.8001284
td4 0.113756 0.040291 2.8233 0.0077890 **
td5 0.043061 0.040308 1.0683 0.2926920

    • -

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Total Sum of Squares: 0.54784
Residual Sum of Squares: 0.284
R-Squared : 0.4816
Adj. R-Squared : 0.33712
F-statistic: 6.50321 on 5 and 35 DF, p-value: 0.00022576

Xが0.188583と推定されている一方で、t=3のタイムダミーの係数は-0.015109となっています。観測数が十分ではないのか精度に欠けますが、タイムダミーの値は過少に推定されていますから、タイムダミーの係数として観測されない事が分かります。
また、t=3のインパクトを大きくとっても、推定結果が大きく変わることはありません。観測数を十分増やすと、推定値は真の値に近づきます。この例ではI=300ぐらいにすると、Xの係数βが0.1541469になりました*2

*1:数理的には説明変数とタイムダミーの共分散がゼロである限りは、十分なサンプルサイズで推定結果に影響を及ぼさないことは、ほぼ自明です。

*2:係数の割りには分散が大きすぎたかも知れません。