plot_es(event_study)
fixes
パッケージがCRANに公開されました!
開発版では共変量の追加をサポートしました。
はじめに
突然ですが、最近Rパッケージを作成しました。その名もfixes
です。
初めて作ったので穴も多いと思うのですが、このパッケージではDIDにおける平行トレンドの確認をする方法であるイベントスタディをより簡易的に行う関数を提供しています。
この記事では宣伝も兼ねて、使い方を簡単にご紹介します。
改善点やお気づきの点があれば、最下部のコメントか、GitHubのIssueに投げていただけると助かります。
優位性
イベントスタディのプロットをする方法として、fixest
が提供するi()
とiplot()
を使うものがあります。
個人的にiplot()
ではggplot2
を用いたプロットができない点があり、i()
から結果をデータフレーム化するのも少々手間かなと思います。
そこでダイレクトに結果のデータフレームが返ってくる、そしてベースのプロットがggplot2
であり、特にいじらなくてもそれなりのプロットが作成できる点が売りのfixes
を作りました1。
また、リードとラグの範囲を個別で指定できる点や、ベースラインも自由に指定できる点など、僕の技術で及ぶ範囲は柔軟性を求めたつもりです。
使い方
インストール
2024年12月30日時点では、パッケージをCRANに公開していないので、冒頭にも書いた通りCRANに公開されましたので、install.packages()
でインストールすることができません。install.packages()
でもインストール可能です。
GitHubより以下の方法でインストール可能です。
# install.packages("pak")
::pak("fixes") pak
もしくは、
install.packages("fixes")
です。開発版に関しては以下の方法でGitHubよりインストールできます。
::pak("yo5uke/fixes") pak
です。
使用するデータ
DIDに用いるデータフレームをそのまま用いることができます。
要件は、
- 個体を識別する変数(例えば
id
) - 時間を識別する変数(例えば
year
) - 処置個体を示すダミー変数
- 時間によらず、処置される個体であれば常に1をとる必要があります。
- アウトカム変数
を含んでいることです。
関数(イベントスタディの実行)
メインの関数は、run_es()
関数です。ここにデータフレームを渡すことで、自動的にリード変数とラグ変数を作成し、回帰分析を実行、結果のデータフレームを返します。
引数は次の通りです。
引数 | 説明 |
---|---|
data |
使用するデータフレーム |
outcome |
アウトカム変数 |
treatment |
処置個体を示すダミー変数 |
time |
時間を表す変数 |
timing |
処置タイミングを表す数値 |
lead_range |
処置前の期間の長さ(処置年は除く) |
lag_range |
処置後の期間の長さ(処置年は除く) |
fe |
固定効果 |
cluster |
クラスタリングの単位(任意) |
baseline |
ベースラインとする時点(相対時間で指定、デフォルトでは-1) |
interval |
時間変数の間隔(例:毎年のデータなら1、国勢調査なら5。デフォルトでは1) |
cluster_var
以下は任意です。
この関数の限界として、時間の変数として年を想定している点があります。そのため、月次データ等は時間に通し番号を追加しておくことを推奨します。
例えば、5つの個体に24カ月分の観測がある場合、
<- df |>
df mutate(time_var = rep(1:24, 5))
としておくことで通し番号を追加できます。
肝心の関数の使い方は以下の通りです。
<- run_es(
event_study data = df,
outcome_var = y,
treated_var = is_treated,
time_var = year,
timing = 1998,
lead_range = 5,
lag_range = 5,
fe_var = firm_id + year,
cluster_var = "state_id",
baseline = -1,
interval = 1
)
固定効果については、feols()
と同様に和の形で記述することが可能です2。クラスタリングについては、ダブルクォーテーションで囲む必要があることに留意してください。また、リードとラグに処置年は含まれません。それぞれ5であれば、前5年+処置年+後5年で11年分の結果になります。
これを実行することにより、結果のデータフレームが返ってきます。
この結果を使えば、ggplot2
を用いて好きにプロットしていただけるのですが、fixes
パッケージでは、1からコードを書かずともggplot2
を用いたプロットのベースを作る関数を提供しています。
関数(結果をプロット)
plot_es()
関数を用いて、プロットのベースを簡単に作成できます。
まず、引数は次の通りです。
引数 | 説明 |
---|---|
data |
run_es() で作成したデータ |
type |
プロットのタイプ(ribbon (既定)かerrorbar を選択) |
vline_val |
処置を表す垂直線位を引く置(相対時間で指定、デフォルトでは0) |
vline_color |
垂直線の色(デフォルトでは黒) |
hline_val |
水平線を引く値(デフォルトでは0) |
hline_color |
水平線の色(デフォルトでは黒) |
linewidth |
折れ線の太さ(デフォルトでは1) |
pointsize |
点のサイズ(デフォルトでは2) |
alpha |
リボンの透明度(デフォルトでは0.2) |
barwidth |
エラーバーの幅(デフォルトでは0.2) |
color |
折れ線と点の色(デフォルトでは#B25D91FF) |
fill |
リボンの色(デフォルトでは#B25D91FF) |
プロットすると以下のように出力されます。
エラーバーを用いれば、
plot_es(event_study, type = "errorbar")
引数を指定すると、
plot_es(
event_study, type = "errorbar",
vline_val = -1,
vline_color = "darkred",
color = "navy"
)
ggplot2
ベースで作られていますので、+
で繋いで自在に編集できます。
plot_es(
event_study, type = "errorbar",
vline_val = -1,
vline_color = "darkred",
color = "navy"
+
) ::scale_x_continuous(breaks = seq(-5, 5, by = 1)) +
ggplot2::theme_bw() ggplot2
ベースを作る手間が省けるのが売りです。
おわりに
簡単ではありましたが、以上fixes
の紹介と解説でした。
はじめの方に書いた通り、利便性と柔軟性を求め、プロットも好みを反映できる点がこのパッケージの売りになっています。
使ってみていただけると大変うれしいです。
フィードバックもお待ちしています。