Chapter 14 パネルデータ分析

14.1 パネルデータとは

重回帰分析のセクションで扱ったデータは基本的にはクロスセクションデータであった。 これは、データの変動が人であったり、県であったり、グループであったりするものであり、データでは添字\(i\)で表現していた。

これに加えて、時間の変動藻ある場合には、クロスセクションデータで分析するよりアドバンテージがある。時間変動がある場合にどのような形になるか見てみよう。

14.1.1 スクリプトの準備

新しいスクリプトにコードを書いていく。 新しくスクリプトを作成し、panel_data.Rという名前をつけて保存する。

14.1.2 パッケージの準備

以下のパッケージを使うので読み込んでおく。 インストールしてない場合は、インストールする。

# ライブラリ
library(tidyverse)
library(psych)
library(skimr)
library(AER)
library(fixest)

14.1.3 データの準備

データを読み込む。データ名が長いので、 data_fに入れ替えよう。

data(Fatalities)

data_f <- Fatalities

データの中身を見てみる。 まずは、どんなデータなのかhead()で確認する。

head(data_f)
##   state year spirits unemp   income   emppop  beertax baptist  mormon drinkage
## 1    al 1982    1.37  14.4 10544.15 50.69204 1.539379 30.3557 0.32829    19.00
## 2    al 1983    1.36  13.7 10732.80 52.14703 1.788991 30.3336 0.34341    19.00
## 3    al 1984    1.32  11.1 11108.79 54.16809 1.714286 30.3115 0.35924    19.00
## 4    al 1985    1.28   8.9 11332.63 55.27114 1.652542 30.2895 0.37579    19.67
## 5    al 1986    1.23   9.8 11661.51 56.51450 1.609907 30.2674 0.39311    21.00
## 6    al 1987    1.18   7.8 11944.00 57.50988 1.560000 30.2453 0.41123    21.00
##       dry youngdrivers    miles breath jail service fatal nfatal sfatal fatal1517
## 1 25.0063     0.211572 7233.887     no   no      no   839    146     99        53
## 2 22.9942     0.210768 7836.348     no   no      no   930    154     98        71
## 3 24.0426     0.211484 8262.990     no   no      no   932    165     94        49
## 4 23.6339     0.211140 8726.917     no   no      no   882    146     98        66
## 5 23.4647     0.213400 8952.854     no   no      no  1081    172    119        82
## 6 23.7924     0.215527 9166.302     no   no      no  1110    181    114        94
##   nfatal1517 fatal1820 nfatal1820 fatal2124 nfatal2124  afatal     pop  pop1517
## 1          9        99         34       120         32 309.438 3942002 208999.6
## 2          8       108         26       124         35 341.834 3960008 202000.1
## 3          7       103         25       118         34 304.872 3988992 197000.0
## 4          9       100         23       114         45 276.742 4021008 194999.7
## 5         10       120         23       119         29 360.716 4049994 203999.9
## 6         11       127         31       138         30 368.421 4082999 204999.8
##    pop1820  pop2124 milestot unempus emppopus         gsp
## 1 221553.4 290000.1    28516     9.7     57.8 -0.02212476
## 2 219125.5 290000.2    31032     9.6     57.9  0.04655825
## 3 216724.1 288000.2    32961     7.5     59.5  0.06279784
## 4 214349.0 284000.3    35091     7.2     60.1  0.02748997
## 5 212000.0 263000.3    36259     7.0     60.7  0.03214295
## 6 208998.5 258999.8    37426     6.2     61.5  0.04897637

このデータはアメリカの州×年ごとに、様々な変数が記録されているデータである。 どんな変数が記録されているかは、helpファイルを見るとわかる。

help(Fatalities)

14.1.4 データの記述統計

データの記述統計を確認しよう。一番基本的なものはsummary()関数を使う方法である。

summary(data_f)
##      state       year       spirits          unemp            income     
##  al     :  7   1982:48   Min.   :0.790   Min.   : 2.400   Min.   : 9514  
##  az     :  7   1983:48   1st Qu.:1.300   1st Qu.: 5.475   1st Qu.:12086  
##  ar     :  7   1984:48   Median :1.670   Median : 7.000   Median :13763  
##  ca     :  7   1985:48   Mean   :1.754   Mean   : 7.347   Mean   :13880  
##  co     :  7   1986:48   3rd Qu.:2.013   3rd Qu.: 8.900   3rd Qu.:15175  
##  ct     :  7   1987:48   Max.   :4.900   Max.   :18.000   Max.   :22193  
##  (Other):294   1988:48                                                   
##      emppop         beertax           baptist            mormon       
##  Min.   :42.99   Min.   :0.04331   Min.   : 0.0000   Min.   : 0.1000  
##  1st Qu.:57.69   1st Qu.:0.20885   1st Qu.: 0.6268   1st Qu.: 0.2722  
##  Median :61.36   Median :0.35259   Median : 1.7492   Median : 0.3931  
##  Mean   :60.81   Mean   :0.51326   Mean   : 7.1569   Mean   : 2.8019  
##  3rd Qu.:64.41   3rd Qu.:0.65157   3rd Qu.:13.1271   3rd Qu.: 0.6293  
##  Max.   :71.27   Max.   :2.72076   Max.   :30.3557   Max.   :65.9165  
##                                                                       
##     drinkage          dry            youngdrivers         miles       breath   
##  Min.   :18.00   Min.   : 0.00000   Min.   :0.07314   Min.   : 4576   no :181  
##  1st Qu.:20.00   1st Qu.: 0.00000   1st Qu.:0.17037   1st Qu.: 7183   yes:155  
##  Median :21.00   Median : 0.08681   Median :0.18539   Median : 7796            
##  Mean   :20.46   Mean   : 4.26707   Mean   :0.18593   Mean   : 7891            
##  3rd Qu.:21.00   3rd Qu.: 2.42481   3rd Qu.:0.20219   3rd Qu.: 8504            
##  Max.   :21.00   Max.   :45.79210   Max.   :0.28163   Max.   :26148            
##                                                                                
##    jail     service        fatal            nfatal            sfatal     
##  no  :241   no  :273   Min.   :  79.0   Min.   :  13.00   Min.   :  8.0  
##  yes : 94   yes : 62   1st Qu.: 293.8   1st Qu.:  53.75   1st Qu.: 35.0  
##  NA's:  1   NA's:  1   Median : 701.0   Median : 135.00   Median : 81.0  
##                        Mean   : 928.7   Mean   : 182.58   Mean   :109.9  
##                        3rd Qu.:1063.5   3rd Qu.: 212.00   3rd Qu.:131.0  
##                        Max.   :5504.0   Max.   :1049.00   Max.   :603.0  
##                                                                          
##    fatal1517        nfatal1517      fatal1820       nfatal1820       fatal2124    
##  Min.   :  3.00   Min.   : 0.00   Min.   :  7.0   Min.   :  0.00   Min.   : 12.0  
##  1st Qu.: 25.75   1st Qu.: 4.00   1st Qu.: 38.0   1st Qu.: 11.00   1st Qu.: 42.0  
##  Median : 49.00   Median :10.00   Median : 82.0   Median : 24.00   Median : 97.5  
##  Mean   : 62.61   Mean   :12.26   Mean   :106.7   Mean   : 33.53   Mean   :126.9  
##  3rd Qu.: 77.00   3rd Qu.:15.25   3rd Qu.:130.2   3rd Qu.: 44.00   3rd Qu.:150.5  
##  Max.   :318.00   Max.   :76.00   Max.   :601.0   Max.   :196.00   Max.   :770.0  
##                                                                                   
##    nfatal2124         afatal            pop              pop1517       
##  Min.   :  1.00   Min.   :  24.6   Min.   :  479000   Min.   :  21000  
##  1st Qu.: 13.00   1st Qu.:  90.5   1st Qu.: 1545251   1st Qu.:  71750  
##  Median : 30.00   Median : 211.6   Median : 3310503   Median : 163000  
##  Mean   : 41.38   Mean   : 293.3   Mean   : 4930272   Mean   : 230816  
##  3rd Qu.: 49.00   3rd Qu.: 364.0   3rd Qu.: 5751735   3rd Qu.: 270500  
##  Max.   :249.00   Max.   :2094.9   Max.   :28314028   Max.   :1172000  
##                                                                        
##     pop1820           pop2124           milestot         unempus     
##  Min.   :  21000   Min.   :  30000   Min.   :  3993   Min.   :5.500  
##  1st Qu.:  76962   1st Qu.: 103500   1st Qu.: 11692   1st Qu.:6.200  
##  Median : 170982   Median : 241000   Median : 28484   Median :7.200  
##  Mean   : 249090   Mean   : 336390   Mean   : 37101   Mean   :7.529  
##  3rd Qu.: 308311   3rd Qu.: 413000   3rd Qu.: 44140   3rd Qu.:9.600  
##  Max.   :1321004   Max.   :1892998   Max.   :241575   Max.   :9.700  
##                                                                      
##     emppopus          gsp           
##  Min.   :57.80   Min.   :-0.123641  
##  1st Qu.:57.90   1st Qu.: 0.001182  
##  Median :60.10   Median : 0.032413  
##  Mean   :59.97   Mean   : 0.025313  
##  3rd Qu.:61.50   3rd Qu.: 0.056501  
##  Max.   :62.30   Max.   : 0.142361  
## 

Chapter @ref(#rstats) で説明したように、他のパッケージを使う方法もある。

describe(data_f, skew = FALSE)
##              vars   n       mean         sd     median       min         max
## state*          1 336      24.50      13.87      24.50      1.00       48.00
## year*           2 336       4.00       2.00       4.00      1.00        7.00
## spirits         3 336       1.75       0.68       1.67      0.79        4.90
## unemp           4 336       7.35       2.53       7.00      2.40       18.00
## income          5 336   13880.18    2253.05   13763.13   9513.76    22193.46
## emppop          6 336      60.81       4.72      61.36     42.99       71.27
## beertax         7 336       0.51       0.48       0.35      0.04        2.72
## baptist         8 336       7.16       9.76       1.75      0.00       30.36
## mormon          9 336       2.80       9.67       0.39      0.10       65.92
## drinkage       10 336      20.46       0.90      21.00     18.00       21.00
## dry            11 336       4.27       9.50       0.09      0.00       45.79
## youngdrivers   12 336       0.19       0.02       0.19      0.07        0.28
## miles          13 336    7890.75    1475.66    7796.22   4576.35    26148.27
## breath*        14 336       1.46       0.50       1.00      1.00        2.00
## jail*          15 335       1.28       0.45       1.00      1.00        2.00
## service*       16 335       1.19       0.39       1.00      1.00        2.00
## fatal          17 336     928.66     934.05     701.00     79.00     5504.00
## nfatal         18 336     182.58     188.43     135.00     13.00     1049.00
## sfatal         19 336     109.95     108.54      81.00      8.00      603.00
## fatal1517      20 336      62.61      55.73      49.00      3.00      318.00
## nfatal1517     21 336      12.26      12.25      10.00      0.00       76.00
## fatal1820      22 336     106.66     104.22      82.00      7.00      601.00
## nfatal1820     23 336      33.53      33.24      24.00      0.00      196.00
## fatal2124      24 336     126.87     131.79      97.50     12.00      770.00
## nfatal2124     25 336      41.38      42.93      30.00      1.00      249.00
## afatal         26 336     293.33     303.58     211.59     24.60 "StockWatson2007"
## pop            27 336 4930271.50 5073703.89 3310503.25 478999.72 28314028.00
## pop1517        28 336  230815.48  229896.27  163000.17  21000.02  1172000.25
## pop1820        29 336  249090.42  249345.64  170982.34  20999.96  1321004.38
## pop2124        30 336  336389.89  345304.37  240999.90  30000.16  1892998.12
## milestot       31 336   37101.49   37454.37   28483.50   3993.00   241575.02
## unempus        32 336       7.53       1.48       7.20      5.50        9.70
## emppopus       33 336      59.97       1.59      60.10     57.80       62.30
## gsp            34 336       0.03       0.04       0.03     -0.12        0.14
##                    range        se
## state*             47.00      0.76
## year*               6.00      0.11
## spirits             4.11      0.04
## unemp              15.60      0.14
## income          12679.69    122.91
## emppop             28.28      0.26
## beertax             2.68      0.03
## baptist            30.36      0.53
## mormon             65.82      0.53
## drinkage            3.00      0.05
## dry                45.79      0.52
## youngdrivers        0.21      0.00
## miles           21571.93     80.50
## breath*             1.00      0.03
## jail*               1.00      0.02
## service*            1.00      0.02
## fatal            5425.00     50.96
## nfatal           1036.00     10.28
## sfatal            595.00      5.92
## fatal1517         315.00      3.04
## nfatal1517         76.00      0.67
## fatal1820         594.00      5.69
## nfatal1820        196.00      1.81
## fatal2124         758.00      7.19
## nfatal2124        248.00      2.34
## afatal           2070.30     16.56
## pop          27835028.28 276793.24
## pop1517       1151000.23  12541.87
## pop1820       1300004.41  13602.92
## pop2124       1862997.97  18837.90
## milestot       237582.02   2043.30
## unempus             4.20      0.08
## emppopus            4.50      0.09
## gsp                 0.27      0.00

psychパッケージのdescribe()では、カテゴリー変数も無理やり数値化して計算するのでおかしなことになっているものがあることである。例えば、stateは州なので、平均や標準偏差が計算されているのはおかしい。 しかし、数値の変数を見るときには有用である。

skimrパッケージのskim()関数は、カテゴリ変数と連続変数を区別して記述統計を示してくれる。

library(skimr)

skim(data_f)
Table 14.1: Data summary
Name data_f
Number of rows 336
Number of columns 34
_______________________
Column type frequency:
factor 5
numeric 29
________________________
Group variables None

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
state 0 1 FALSE 48 al: 7, az: 7, ar: 7, ca: 7
year 0 1 FALSE 7 198: 48, 198: 48, 198: 48, 198: 48
breath 0 1 FALSE 2 no: 181, yes: 155
jail 1 1 FALSE 2 no: 241, yes: 94
service 1 1 FALSE 2 no: 273, yes: 62

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
spirits 0 1 1.75 0.68 0.79 1.30 1.67 2.01 4.90 ▇▇▁▁▁
unemp 0 1 7.35 2.53 2.40 5.48 7.00 8.90 18.00 ▅▇▃▁▁
income 0 1 13880.18 2253.05 9513.76 12085.85 13763.13 15175.12 22193.46 ▅▇▅▂▁
emppop 0 1 60.81 4.72 42.99 57.69 61.36 64.41 71.27 ▁▁▆▇▂
beertax 0 1 0.51 0.48 0.04 0.21 0.35 0.65 2.72 ▇▂▁▁▁
baptist 0 1 7.16 9.76 0.00 0.63 1.75 13.13 30.36 ▇▁▁▁▁
mormon 0 1 2.80 9.67 0.10 0.27 0.39 0.63 65.92 ▇▁▁▁▁
drinkage 0 1 20.46 0.90 18.00 20.00 21.00 21.00 21.00 ▁▂▁▁▇
dry 0 1 4.27 9.50 0.00 0.00 0.09 2.42 45.79 ▇▁▁▁▁
youngdrivers 0 1 0.19 0.02 0.07 0.17 0.19 0.20 0.28 ▁▁▇▃▁
miles 0 1 7890.75 1475.66 4576.35 7182.54 7796.22 8504.02 26148.27 ▇▂▁▁▁
fatal 0 1 928.66 934.05 79.00 293.75 701.00 1063.50 5504.00 ▇▂▁▁▁
nfatal 0 1 182.58 188.43 13.00 53.75 135.00 212.00 1049.00 ▇▂▁▁▁
sfatal 0 1 109.95 108.54 8.00 35.00 81.00 131.00 603.00 ▇▂▁▁▁
fatal1517 0 1 62.61 55.73 3.00 25.75 49.00 77.00 318.00 ▇▃▁▁▁
nfatal1517 0 1 12.26 12.25 0.00 4.00 10.00 15.25 76.00 ▇▂▁▁▁
fatal1820 0 1 106.66 104.22 7.00 38.00 82.00 130.25 601.00 ▇▂▁▁▁
nfatal1820 0 1 33.53 33.24 0.00 11.00 24.00 44.00 196.00 ▇▂▁▁▁
fatal2124 0 1 126.87 131.79 12.00 42.00 97.50 150.50 770.00 ▇▂▁▁▁
nfatal2124 0 1 41.38 42.93 1.00 13.00 30.00 49.00 249.00 ▇▂▁▁▁
afatal 0 1 293.33 303.58 24.60 90.50 211.59 363.96 2094.90 ▇▁▁▁▁
pop 0 1 4930271.50 5073703.89 478999.72 1545251.47 3310503.25 5751734.88 28314028.00 ▇▁▁▁▁
pop1517 0 1 230815.48 229896.27 21000.02 71749.93 163000.17 270500.16 1172000.25 ▇▂▁▁▁
pop1820 0 1 249090.42 249345.64 20999.96 76962.12 170982.34 308311.35 1321004.38 ▇▂▁▁▁
pop2124 0 1 336389.89 345304.37 30000.16 103500.04 240999.90 413000.12 1892998.12 ▇▂▁▁▁
milestot 0 1 37101.49 37454.37 3993.00 11691.50 28483.50 44139.75 241575.02 ▇▂▁▁▁
unempus 0 1 7.53 1.48 5.50 6.20 7.20 9.60 9.70 ▇▃▇▁▇
emppopus 0 1 59.97 1.59 57.80 57.90 60.10 61.50 62.30 ▇▃▃▃▇
gsp 0 1 0.03 0.04 -0.12 0.00 0.03 0.06 0.14 ▁▂▆▇▁

14.1.5 データの加工

データには、交通事故による死亡数fatalはあるが、死亡率がない。当然ながら各州によって人口が違い、人口が多い州は死亡数も多くなる。州の間で比較を行うためには、死亡数より死亡率が適切だろう。そこで、死亡率fatal_rateを死亡数fatalを人口popで割ることで計算する。あまりに小さい数字になるため10000をかけて「1万人当たりの死亡者数」として死亡率を定義する。 新たに追加したデータをdata_f2に入れる。

# データの加工
data_f2 <- data_f |> 
  # 死亡率の計算
  mutate(fatal_rate = fatal/pop * 10000)

14.2 パネルデータ分析

14.2.1 事例:交通事故死亡率とアルコール税の関係

ここでは、アメリカの州(アラスカとハワイを除いた48州)の1982~1988年のデータを用いて、各州のアルコール税の税率と、交通事故死亡率の関係を分析する。

ここで、日本とは異なる背景知識だが、アメリカは連邦制の国であり、州によって様々な法律が異なる。例えば消費税のない州もあれば、その税率が州で違ったりもする。この場合はアルコール、特にビールにかかる税率が州で異なる点に着目して、税率の違いが酒酔い運転などによっても引き起こされる交通事故死亡率に影響するかどうかを分析する。

\(i\)の交通事故死亡率を\(y_{i}\)とし、ビール税率を\(x_{i}\)とすると、以下の単回帰式によって、影響が推定できそうだ。

\[ y_{i} = \alpha + \beta x_{i} +\varepsilon_{i} \]

ビール税率を上げると交通事故死亡率が下がる、という仮説を検証したい場合、\(\beta\)が負(マイナス)であると期待するだろう。

まず、この単回帰式を推定するために、クロス・セクションのデータで推定を行ってみよう。 データのうち、1982年と1988年をそれぞれ抽出してみよう。

# クロスセクションデータの作成
data_f2_1982 <- data_f2 |> 
  filter(year == 1982)

data_f2_1988 <- data_f2 |> 
  filter(year == 1988)

このデータを用いて単位回帰分析を行う。

# 回帰分析
# lm()の代わりに feols()を使う

# 1982年のデータ
reg1_1982 <- feols(fatal_rate ~ beertax, data=data_f2_1982)

# 1988年のデータ
reg1_1988 <- feols(fatal_rate ~ beertax, data=data_f2_1988)

結果を表示する。

etable(reg1_1982,reg1_1988)
##                         reg1_1982         reg1_1988
## Dependent Var.:        fatal_rate        fatal_rate
##                                                    
## Constant        2.010*** (0.1391) 1.859*** (0.1060)
## beertax           0.1485 (0.1884)  0.4388* (0.1645)
## _______________ _________________ _________________
## S.E. type                     IID               IID
## Observations                   48                48
## R2                        0.01332           0.13400
## Adj. R2                  -0.00813           0.11518
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

この結果によれば、1982年ではビール税率が1%上がると、交通事故死亡率が0.1485上昇し、1988年では0.4388上昇する。 このデータは州ごとのクロスセクションデータなので、もう少し正確に解釈すると、ビール税が1%高い州では交通事故死亡率が高い、ということになる。

この結果をグラフでも見てみよう。縦軸を死亡率、横軸をビール税として散布図を描く。ここでは1988年のデータを見てみよう。

ggplot(data=data_f2_1988, aes(x=beertax, y=fatal_rate)) + 
  geom_point() +
  geom_smooth(method="lm", se=FALSE)+
  labs(x="ビール税率", y="交通事故死亡率(10000人当たり)") +
  theme_gray(base_family = "HiraKakuPro-W3") #<- このレイヤーはWindowsならいらない

むしろ税率と交通事故死亡率には正の関係がある。

このアプローチには問題がないだろうか?なぜなら、クロスセクションデータでは州ごとの違いを見ているので、ビール税が高い州では交通事故死亡率が高いという結果であるが、交通事故死亡率が高い州ではビール税を上げているので高いという可能性もある。州による特性もある。

では時間的な変動を含めたデータでは、どうなるだろうか?

\(i\)の年\(t\)における交通事故死亡率を\(y_{it}\)とし、ビール税率を\(x_{it}\)とすると、以下の単回帰式によって、影響が推定できそうだ。上の式と違うのは添字に\(t\)が加わり、時間の変動も加味したデータを使っていることだ。

\[ y_{it} = \alpha + \beta x_{it} +\varepsilon_{it} \]

# 回帰分析
# lm()の代わりに feols()を使う

# 1982-1988年のデータ
reg1_panel <- feols(fatal_rate ~ beertax, data=data_f2)

結果を表示する。

etable(reg1_panel)
##                         reg1_panel
## Dependent Var.:         fatal_rate
##                                   
## Constant         1.853*** (0.0436)
## beertax         0.3646*** (0.0622)
## _______________ __________________
## S.E. type                      IID
## Observations                   336
## R2                         0.09336
## Adj. R2                    0.09065
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

結果は、\(\beta\)に当たるパラメータの推定値が0.3646となり、やはり正の符号となっている。 時間変動を加えても結果は変わっていない、ということはやはりビール税を上げると交通事故死亡率が増えるのだろうか?

14.3 固定効果モデル

ここで、重要なのはデータを変えただけでは本質的な問題である「州の特性によって、死亡率が高い州ほどビール税が高い(上げている)」可能性の影響を推定値から排除できていないことである。

この\(x_{it}\)には、州によってはビール税が(年にかかわらず)高い、という特性も入ってしまっており、そのデータが推定値に影響している。ならば、その影響を分けて推定することはできないか。これが固定効果モデルのアイデアである。

固定効果とは、データとしては直接観察されないが時間的に変化しない主体独特の効果である。この場合は時間的に変化しない州独特の効果と言える。ではデータとしては直接観察されないのに、どうやって回帰式に含めるのか?これは、州ごとのダミー変数を作成するという発想で解決する。

固定効果モデルを式として書くと以下のように書くことができる。

\[ y_{it} = \gamma_{i} + \beta x_{it} + \varepsilon_{it} \]

切片\(\alpha\)の代わりに、添え字\(i\)を持つパラメータ\(\gamma\)が含まれている。これは州ごとに切片が異なる回帰式とも解釈することができる。ここで、州ごとの(交通事故死亡率の)特性の違いが捕捉されるため、ビール税率の係数の推定値はその州ごとの特性を除いた推定値となる。しかし、データではないパラメータに\(i\)がついているのはなぜか?

これは実質的には以下のような式を推定しているのと同じである。

\[ y_{it} = \beta x_{it} + \gamma_{AL} D_{AL} + \gamma_{AZ} D_{AZ} + \gamma_{AR} D_{AR} + \cdots + \gamma_{WY} D_{WY} + + \varepsilon_{it} \]

もしデータ\(i\)がアラバマ州ならば\(D_{AL}\)は1になり、それ以外は0になるので、\(\gamma_{AL}\)が式に残る。もし\(i\)がアリゾナ州ならば\(D_{AZ}\)は1になり、それ以外は0になる。という形で、\(\gamma_{AL}\), \(\gamma_{AZ}\)\(\gamma_{WY}\)のワイオミング州までを推定するのである。

実際には、これをfeolsでは簡単に推定できる。

# |のあとに固定効果として推定したいカテゴリ(今回は州なのでstate)を入れる
reg1_panel_fe = feols(fatal_rate ~ beertax | state, data = data_f2)

etable(reg1_panel, reg1_panel_fe, se = "IID")
##                         reg1_panel       reg1_panel_fe
## Dependent Var.:         fatal_rate          fatal_rate
##                                                       
## Constant         1.853*** (0.0436)                    
## beertax         0.3646*** (0.0622) -0.6559*** (0.1878)
## Fixed-Effects:  ------------------ -------------------
## state                           No                 Yes
## _______________ __________________ ___________________
## S.E. type                      IID                 IID
## Observations                   336                 336
## R2                         0.09336             0.90501
## Within R2                       --             0.04075
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

結果は、固定効果モデル(右)では単回帰モデル(左)では正だった係数が負になっている。 この結果を解釈すると、「ビール税率が上がると、交通事故死亡率が下がる」という解釈となる。

このように、本当に推定したい効果が、データの特徴によって推定できず、それが主体独特の効果である場合は、固定効果モデルを用いることで分別して推定することができる。

しかし、固定効果モデルはパネルデータではないと使うことができない。 たとえば、上で作成したクロスセクションデータで固定効果モデルを推定してみよう。

reg1_panel_fe_1988 <- feols(fatal_rate ~ beertax | state, data=data_f2_1988)
## Error: in feols(fatal_rate ~ beertax | state, data = data_f...: 
## The only variable, 'beertax', is collinear with the fixed effects. Without
## doubt, your model is misspecified.

エラーが出る。これは、クロスセクションデータでは州ごとの変動しかないため、ダミー変数による固定効果の変動(州によって1か0か)と州ごとのビール税の変動のどちらが交通事故死亡率の変動を説明しているか識別ができないためである。

14.3.1 固定効果モデルのビジュアルイメージ

固定効果モデルをビジュアルイメージで理解してみよう。

まず、パネルデータを使って散布図を書いてみよう。

ggplot(data=data_f2, aes(x=beertax,y=fatal_rate)) +
  geom_point(size=0.5) +
  labs(x = "ビール税率", y="死亡率") +
  theme_bw(base_family = "HirakakuPro-W3")

これだけを見ると、やはり右肩上がりの傾向があるように見える。 geom_smooth(method="lm")というレイヤーを加えて、回帰線を描いてみよう。

ggplot(data=data_f2, aes(x=beertax,y=fatal_rate)) +
  geom_point(size=0.5) +
  labs(x = "ビール税率", y="死亡率") +
  geom_smooth(method="lm") +
  theme_bw(base_family = "HirakakuPro-W3")

やはり右肩あがりになっている。

では、今度は州ごとに色分けしてみよう。aes()の中で色カテゴリに州を指定するcol=state

ggplot(data=data_f2, aes(x=beertax,y=fatal_rate,col=state)) +
  geom_point(size=0.5) +
  labs(x = "ビール税率", y="死亡率") +
  geom_smooth(method="lm", se=FALSE) +
  theme_bw(base_family = "HirakakuPro-W3") +
  theme(legend.position = "none") # <- もし凡例が大きすぎて図が見えない場合はこのレイヤーを追加して凡例を消す

すると、州ごと分けた点と線が描かれる。州ごとに見ると、州の中での時間的な変動ではビール税率が高いときに死亡率が下がっている傾向が見られるだろう。このように、州間の違いと州内の違いを分けて推定できるのが固定効果モデルである。