Rで何かをしたり、読書をするブログ

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

都道府県別の15歳~64歳人口割合、1人当たり県民総所得、1人当たり最終エネルギー消費のデータの分析8 - R で Fixed Effect Regression

(Bing Image Creator で生成: プロンプト: Close up of yellow Acacia dealbata flowers, background is beautiful night sky with many stars, photo)


www.crosshyou.info

の続きです。

前回は2つの年度のパネルデータで回帰分析をしました。その結果、popratio が上昇すると、income が減少するという少し不思議な結果になりました。

今回は全ての年度のデータを使って検証してみます。

参考にしたウェブサイトは、

www.econometrics-with-r.org

https://www.econometrics-with-r.org/10.3-fixed-effects-regression.html

です。

これから推定したいモデル式は、

income = beta1 * popratio + beta2 * energy + 都道府県固有の効果 + u

というモデルです。

このモデルを推定するのに、3つの方法が上のサイトにはありました。

一つは、都道府県別のダミー変数を使う方法です。

popratio の係数は -78.371 とありますので、やっぱりマイナスの符号ですね。

energy の係数は 3.822 とプラスの符号です。

summary() 関数でみてみます。

各都道府県の部分は割愛します。

R-squared は 0.999 とほとんど1に近い値です。

上のサイトの2つめの方法は、都道府県別の平均値を計算して、その平均値との差分を使って回帰分析する方法です。

まずは、その平均値との差分のデータフレームを作成します。

そして同じように、切片抜きの回帰分析をします。

推定された係数の値は、model6 と同じですね。

そして、3つ目の方法は、plm パッケージを使う方法です。

まずは、plm パッケージを読み込みます。

そして、plm() 関数を使います。

こちらの結果も当然ですが、model6, model7 と同じ結果です。

lmtest パッケージの coeftest() 関数でモデルの係数の p値を確認します。

popratio, energy ともに 1%よりもうんと小さな p値です。

結論としては、都道府県特有の事情(これは年度が違っても不変だと仮定しています)を考慮してたとき、15歳~64歳の人口割合が同じだとすれば、1人当たり最終エネルギー消費が増加すれば、1人当たり県民総所得が増加する。1人当たり最終エネルギー消費が同じだとすれば、15歳~64歳人口割合が上昇すれば、1人当たり県民総所得は減少する、ということですね。

今回は以上です。

次回は

www.crosshyou.info

です。

 

初めから読むには、

www.crosshyou.info

です。

今回のコードは以下になります。

#
# fixed effect model(都道府県別のダミー変数を使う)
model6 <- lm(income ~ popratio + energy + pref - 1, data = df)
model6
#
# summary
summary(model6)
#
# 平均値の差分のデータフレームを作成
df_demeaned <- with(df,
                    tibble(income = income - ave(income, pref),
                           popratio = popratio - ave(popratio, pref),
                           energy = energy - ave(energy, pref)))
df_demeaned
#
# 差分のデータフレームで回帰分析
model7 <- lm(income ~ popratio + energy - 1,
             data = df_demeaned)
model7
#
# plm パッケージを読み込む
library(plm)
#
# plm() 関数で回帰分析
model8 <- plm(income ~ popratio + energy,
              data = df,
              index = c("pref", "year"),
              model = "within")
model8
#
# 係数の p-value
lmtest::coeftest(model8, vcov. = vcovHC, type = "HC1")
#