意思決定のためのデータ分析入門 / Rコード付

 データ分析は「真理の探究」だけでなく「意思決定」のためにも役立ちます。

 意思決定では、純便益(=便益ー費用)がプラスになるか否かが、究極的な問いになります。そのためには、プロジェクトで生まれるインパクトを把握すると同時に、プロジェクトでは変わらない外部環境を予測するのが必要です。これは必ずしもデータ分析を必要としません。

 この意思決定プロセスに組み込めるデータ分析手法が、因果推論と機械学習です。

 このブログでは、因果推論と近い分野である計量経済学に注目して、考え方をわかりやすくまとめました。

費用便益分析

モデル

モデルの中核

・【全体像】費用便益分析について / 事業評価(モデル:EBPMや経営にも使えるフレームワーク)

・【注目指標】純便益について

・【判断基準】純便益基準について / 費用便益分析(概念:純便益=便益ー費用)

$$純便益の現在価値>0$$

$$つまり(便益の現在価値-費用の現在価値)>0で$$

$$そのプロジェクトは実施の判断をすべし$$

モデルの詳細

・【仮定】補償原理について / 効率性(仮定:不公平についての対処)

・【仮定】当事者適格について / 費用便益分析(概念:誰を当事者にするか)

推定と検定

・【推定】

・【検定】感度分析について / 費用便益分析(概念:不確実性を盛り込む)

Rコード

・なし

因果推論

モデル

モデルの中核

・【全体像】ルービンの因果モデルについて / 因果推論(事実と反事実の差を因果効果とする基本フレームワーク)

・【注目指標】平均処置効果について

・【判断基準】平均処置効果がプラスなら「説明変数Xが増えると、目的変数Yが増える」、平均処置効果がマイナスなら「説明変数Xが増えると、目的変数Yが減る」という因果関係がある可能性がある。

・【判断基準】統計的有意性をもつならば、因果関係があると判断する。統計的有意性をもたないならば、因果関係があるか、ないか判断できない。

$$因果効果=Y_{原因Xあり}-Y_{原因Xなし}$$

$$平均処置効果ATE=E(Y_{処置群})-E(Y_{対照群})$$

モデルの詳細

・【概念】反実仮想について

・【仮定】サンプル・セレクション・バイアスが存在しない

推定と検定

ランダム化比較試験(RCT)について / 因果推論(最も信頼度の高い手法。)

$$Y_{処置群}=E(Y_{処置群})+U_{処置群}$$

$$Y_{対照群}=E(Y_{対照群})+U_{対照群}$$

$$平均処置効果=E(Y_{処置群})-E(Y_{対照群})$$

重回帰モデルについて(後述)

差の差分析について(後述)

操作変数モデルについて(後述)

回帰不連続デザインについて(後述)

Rコード

#Rコード
#コード1:RCTで使えるスチューデントのt検定(均一分散を仮定)
t.test(目的変数 ~ 処置群なら1対照群なら0のダミー変数, var.equal = TRUE, data = データフレーム名)
 
#コード2:RCTで使えるウェルチのt検定(不均一分散に頑健。コード1よりコード2の方を使うべき。)
t.test(目的変数 ~ 処置群なら1対照群なら0のダミー変数, data = データフレーム名

統計学

モデル

モデルの中核

・【重要な事実】中心極限定理について / 単純平均(推定量の性質:単純平均についての頑健な定理)

・【全体像】統計的推測について / 統計学(モデル:統計学の基本フレームワーク)

・【注目指標】期待値について

・【判断基準】統計的有意性をもつならば、対立仮説を採択する。統計的有意性をもたないならば、帰無仮説と対立仮説のいずれも採択しない。→「仮説検定について

モデルの詳細

・【望ましいモデル】不偏性について / 推定量の性質(概念:「バイアスがない」)

・【望ましいモデル】一致性について / 推定量の性質(概念:「サンプル・サイズが増えると結果が改善」)

・【望ましいモデル】頑健性について / 推定量の性質(概念:「例外にも対処できる」)

・【望ましいモデル】効率性について / 推定量の性質(概念:「誤差の分散が小さい」)

推定と検定

・【推定方法】単純平均について / 推定(推定量:最も日常的に使用される手法)

・【推定方法】最小二乗法(OLS)について / 推定(推定量:最も言及される手法)

・【推定方法】最尤法について / 推定(推定量:確率を用いた手法)

・【重要概念】標準誤差について / 仮説検定(推定量の解釈:パラメーターと推定量についての最重要概念)

・【重要概念】p値について / 仮説検定(推定量の解釈:理解しづらいが超重要な概念)

Rコード

#Rコード
#コード1:基本的な統計量
mean(データフレーム名$変数名) #単純平均
median(データフレーム名$変数名) #中央値
min(データフレーム名$変数名) # 最小値
max(データフレーム名$変数名) # 最大値
var(データフレーム名$変数名) #分散(不偏分散)
sd(データフレーム名$変数名) #標準偏差
lm(y ~ x1 + x2, data = データフレーム名) #最小二乗法を用いた回帰係数(重回帰分析)
glm(y ~ x1 + x2 ,data=データフレーム名, family=binomial(link=logit)) #最尤法を用いたロジスティック回帰分析。yは0,1の変数でなければならない。
 
#コード2:ヒストグラム
hist(データフレーム名$変数名) 
 
#コード3:散布図
plot(データフレーム名$横軸にしたい変数名, データフレーム名$縦軸にしたい変数名)

回帰分析

重回帰分析

モデル

モデルの中核

・【全体像】重回帰モデルについて / 統計モデル(重回帰分析は多面的思考を最もシンプルに定量モデルにしたものです。そのため、因果推論のおいてもベンチマークとなる超重要なモデルになります。)

$$Y=\beta_0 +\beta_1 X_2 +\cdots \beta_k X_k+U$$

・【注目指標】回帰係数について

・【判断基準】t検定において、統計的有意性をもつならば、対立仮説を採択する。統計的有意性をもたないならば、帰無仮説と対立仮説のいずれも採択しない。

モデルの詳細

・【仮定】重回帰モデルには、最大で7個の仮定が課されるが、5番目以降は緩めることが可能である。観測後に重要なのは外生性であり、観測前に重要なのは無作為抽出である。

誤差項について / 回帰モデル(概念:確率モデルの導入)

外生性について / 回帰モデル(仮定:満たされるべき仮定)

内生性について / 回帰モデル(仮定の違反:サンプリングかモデルを工夫すべき)

・完全な共線関係(仮定の違反:サンプリングかモデルを変えるべき)

多重共線性(マルチコ)について / 重回帰分析(仮定の軽微な違反:サンプル・サイズを増やせば解消)

・【応用】ログ=レベル・モデルについて / 回帰モデル(モデル:Xが1増えるとYが何%増えるのか)

・【応用】ダミー変数について / 回帰モデル(モデル:定性情報の数値化)

・【応用】交差項について / 回帰モデル(モデル:βが変化する場合の処理)

推定と検定

・【推定】重回帰分析における最小二乗法について / 回帰分析(推定量:外生性が成り立つとうまくいきそう)

・【推定】重回帰分析の解釈「削ぎ落とし(partialling out)」について / FWL定理(推定量の解釈:削ぎ落としについて)

・【推定量の性質】最小二乗推定量の不偏性・一致性・漸近正規性について / 重回帰分析(推定量の性質:モンテカルロ・シミュレーションで確かめる)

・【標準誤差】重回帰分析の標準誤差について / 最小二乗法(推定量の性質:何が標準誤差を決めるのか)

Rコード

#Rコード
#コード1:重回帰分析(簡易版)
lm(y ~ x1 + x2, data = データフレーム名)
 
#コード2:重回帰分析(詳細版)
推定式名 <- lm(y ~ x1 + x2, data = データフレーム名)
summary(推定式名)
 
#コード3:重回帰分析(不均一分散に頑健な標準誤差に対応)
library(estimatr)
lm_robust(y ~ x1 + x2, data = データフレーム名, se_type = "stata")
 
#コード4:ログ=レベル・モデル
lm(log(y) ~ x1 + x2, data = データフレーム名)
 
#コード5:ダミー変数d(すでに0,1になっているなら、そのまま入れるだけ)
lm(y ~ x + d, data = データフレーム名)
 
#コード6:交差項の導入
lm(y ~ x1 + x2 + I(x1*x2), data = データフレーム名)

ロジスティック回帰分析

モデル

モデルの中核

・【全体像】ロジスティック回帰モデルについて / 二値選択モデル(モデル:潜在変数モデルでの誤差項がロジスティック分布の二値選択モデル)

モデルの詳細

・【応用】多項ロジスティック回帰モデルについて / 多値選択モデル(モデル:好きな教科などの説明に使えるモデル)

・【応用】順序ロジスティック回帰モデルについて / 順序選択モデル(モデル:1,2,3,4の顧客満足度などの説明に使えるモデル)

・【応用】プロビット・モデルについて / 二値選択モデル(モデル:潜在変数モデルでの誤差項が正規分布の二値選択モデル)

推定と検定

・準備中

Rコード

#Rコード
#コード1:プロビット・モデル
PROBIT <- glm(y ~ x1 + x2 ,data=データフレーム名, family=binomial(link=probit)) 
summary(PROBIT)
 
#コード2:ロジスティック回帰モデル
LOGIT <- glm(y ~ x1 + x2 ,data=Data, family=binomial(link=logit))
summary(LOGIT)
 
#コード3:線形確率モデル(←不均一分散になることが知られているので、不均一分散に頑健な標準誤差を用いる)
library(estimatr)
LM <- lm_robust(y ~ x1 + x2, data = データフレーム名, se_type = "stata")
summary(LM)

計量経済学

差の差分析

モデル

モデルの中核

・【全体像】差の差(DID)分析について / パネルデータで因果推論

・【注目指標】差の差(DID:Difference in Difference)

 平行トレンドがあれば、差の差(DID:Difference in Difference)が因果効果と解釈できる。

$$Y=\beta_0+\beta_1 (D_{処置群})$$

$$+\beta_2 (D_{介入後})+\beta_3 (D_{介入後})(D_{処置群})+U$$

$$処置群の平均処置効果=\beta_3$$

図:差の差法と重回帰モデルの係数の関係
出典:しまうま総研が作成
モデルの詳細

・【ベースモデル】重回帰モデルがベースである。

推定と検定

・【標準誤差】HAC標準誤差を用いるべき。

Rコード

#Rコード:差の差分析(クラスター構造に頑健な標準誤差を使用)
library(estimatr)
DID <- lm_robust(y ~ 処置ダミー + 介入後ダミー +介入後ダミー*処置ダミー, 
                      clusters = クラスター変数名, se_type = "stata", 
                      data = Data)
summary(DID)

操作変数法

モデル

モデルの中核

・【全体像】操作変数モデルについて / 内生性への対処(モデル:誤差項Uと無相関で、説明変数Xとそう関する操作変数Zが存在するモデル)

・【注目指標】操作変数で推定した標本回帰係数

モデルの詳細

・操作変数について

推定と検定

2SLS推定量について / 操作変数法(推定量:2段階最小二乗法について)

Rコード

#Rコード:操作変数法
library(AER)
ivreg(data = Data, Y ~  X1 + X2 +W1 + W2 | Z1 + Z1 + W1 + W2)  #Xは誤差項と相関する内生変数の説明変数、Wは誤差項と相関しない外生変数の説明変数、操作変数はZ

固定効果法

モデル

モデルの中核

固定効果モデルについて / パネルデータ分析(モデル:時間を通じて一定かつ観測できない固定効果aがあるモデル)

モデルの詳細

・固定効果について

推定と検定

固定効果推定量について / パネルデータ分析による内生性への対応(推定量:個体ごとに時間平均を取る推定量)

Rコード

#Rコード:固定効果法
library(plm)
新データフレーム名 <- pdata.frame(元データフレーム名, index = c("グループ名","個体名")) 
FE <- plm(formula = Y ~ X1 + X2, model="within", data=新データフレーム名)
summary(FE)

回帰不連続デザイン

モデル

モデルの中核

回帰不連続デザインについて / LATEの推定(モデル:閾値近傍で擬似的な実験が発生していると解釈するモデル)

$$Y=\beta_{e} D_{介入有ダミー} +f(X)$$

$$局所的な平均処置効果=\beta_e$$

図:回帰不連続デザインとLATE
出典:しまうま総研が作成
モデルの詳細

・LATEについて

推定と検定

・準備中

Rコード

#Rコード
library(rdrobust)
RD <- rdrobust(目的変数,ランニング変数,c = カットオフ値) 
summary(RD)

ヘキット分析

モデル

モデルの中核

ヘキット・モデルについて / サンプル・セレクション・バイアスの除去(モデル:見えないものを見るモデル)

モデルの詳細

・サンプル・セレクション・バイアスについて

推定と検定

・準備中

Rコード

#Rコード
library(sampleSelection)
SS <- heckit(s ~ x + z, #セレクション式
              y ~ x,  #構造式
              method = "2step",  #2段階推定。"mls"だと最尤法で推定できる
              data = Data) 
summary(SS)

R言語

環境構築

R言語, RStudioのインストールについて / プログラミング(R言語のインストール方法)

インプット

練習用データwooldridgeについて / R言語(計量経済学のデータセットパッケージについて)

アウトプット

可視化

・ggplot2での散布図について / R言語(諸事情で非公開)

・ggplot2での棒グラフについて / R言語(諸事情で非公開)

・ggplot2での折れ線グラフについて / R言語(諸事情で非公開)

文書化

・R Markdownについて / R言語(諸事情で非公開)

・LaTeXについて / 数式表現(諸事情で非公開)

回帰分析

・stargazerについて / R言語(諸事情で非公開)

シミュレーション

・モンテカルロシミュレーションについて

・動学モデルについて

洞察
しまうま

しまうま総研管理人
20代男性/神奈川出身/東大卒
より良い社会を作る手掛かりになる文章を書きたいです。
 
時間のない大学生、公務員、ビジネス・パーソンの方々のお役に立つために、3段落の簡潔な記述がポリシーです。「序」で興味を惹き「論」で議論し「結」で示唆を出します。
 
モットーは「大局観をもつ」です。

シェアする
しまうま総研
タイトルとURLをコピーしました