Chapter 4 離散選択モデル

離散選択モデルの説明はこちらからどうぞ。

4.1 検証する仮説

「自社の店舗が多い地域ほど出店確率が高まるのでは?」という仮説をFamilymartに関して検証してみます。ドミナント戦略が取られていれば、この仮説通りになっているはずです。三田論コンビニ班の簡易的な分析です。

4.2 データの読み込み

各(メッシュ)地域における、2011年~2018年ごとのFamilymart, LAWSONの参入行動とその地域特性を示したデータです。例えば、メッシュ地域362327851(head()でデータを見た時に一番上にでてくる地域)は2013年にFamilymartが初めて参入したことがわかります。

df <- read.csv('data/Mitaron_convenience.csv')
head(df)
##   Mesh_area Open_year Familymart_Entry LAWSON_Entry
## 1 362327851      2011                0            0
## 2 362327851      2012                0            0
## 3 362327851      2013                1            0
## 4 362327851      2014                0            0
## 5 362327851      2015                0            0
## 6 362327851      2016                0            0
##   Familymart_existed LAWSON_existed pop n_employee
## 1                  0              0  13          2
## 2                  0              0  13          2
## 3                  0              0  13          2
## 4                  1              0  13          2
## 5                  1              0  10          2
## 6                  1              0  10          2
##   super_count F_count L_count
## 1           1       1       0
## 2           1       1       0
## 3           1       1       0
## 4           1       1       0
## 5           1       1       0
## 6           1       1       0

○変数の説明

変数名 説明
Mesh_area メッシュ地域
Open_year 2011~2018年
Familymart_Entry Familymartの参入したら1をとるダミー変数
LAWSON_Entry LAWSONの参入したら1をとるダミー変数
Familymart_existed Familymartの既存店舗数
LAWSON_existed LAWSONの既存店舗数
pop 当該地域の従業員の人口
n_employee 当該地域の従業員の数
super_count スーパーの店舗数

4.3 データの把握

summary(df)
##    Mesh_area           Open_year    Familymart_Entry 
##  Min.   :362327851   Min.   :2011   Min.   :0.00000  
##  1st Qu.:392725222   1st Qu.:2013   1st Qu.:0.00000  
##  Median :392726806   Median :2014   Median :0.00000  
##  Mean   :389777896   Mean   :2014   Mean   :0.08962  
##  3rd Qu.:392746145   3rd Qu.:2016   3rd Qu.:0.00000  
##  Max.   :402707402   Max.   :2018   Max.   :1.00000  
##   LAWSON_Entry     Familymart_existed LAWSON_existed  
##  Min.   :0.00000   Min.   :0.0000     Min.   :0.0000  
##  1st Qu.:0.00000   1st Qu.:0.0000     1st Qu.:0.0000  
##  Median :0.00000   Median :0.0000     Median :0.0000  
##  Mean   :0.05601   Mean   :0.4611     Mean   :0.3626  
##  3rd Qu.:0.00000   3rd Qu.:1.0000     3rd Qu.:1.0000  
##  Max.   :1.00000   Max.   :5.0000     Max.   :5.0000  
##       pop           n_employee       super_count    
##  Min.   :   1.0   Min.   :    2.0   Min.   :0.0000  
##  1st Qu.: 539.8   1st Qu.:  102.0   1st Qu.:0.0000  
##  Median :1224.5   Median :  279.0   Median :0.0000  
##  Mean   :1484.6   Mean   :  611.7   Mean   :0.5377  
##  3rd Qu.:2140.5   3rd Qu.:  705.0   3rd Qu.:1.0000  
##  Max.   :5244.0   Max.   :12554.0   Max.   :8.0000  
##     F_count          L_count      
##  Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :1.0000   Median :0.0000  
##  Mean   :0.7264   Mean   :0.4764  
##  3rd Qu.:1.0000   3rd Qu.:1.0000  
##  Max.   :3.0000   Max.   :2.0000

4.4 推定

4.4.1 計量経済学モデル

今回は被説明変数Familymart\_Entry_iがダミー変数を取る(0と1だけなので離散変数)ので、ロジットモデルやプロビットモデルに代表される離散選択モデルで推定します。\(\lambda_i\)\(\mu\)より大きい場合にFamilymart\_Entry_iが1を取り、それ以外の場合にFamilymart\_Entry_iが0を取るというモデルを考えます。

\[ Familymart\_Entry_{i} = \begin{cases} 1 & (\lambda_i \ge \mu) \\ 0 & (\lambda_i < \mu) \end{cases} \]

\(\lambda_i\)は以下のような回帰式で表現出来るとします。今回の仮説が成り立っているなら、\(\beta_{1}\)は正になるはずです。

\[ \lambda_{i} = \alpha + \beta_{1}\times Familymart\_existed_{i}+ \beta_{2}\times pop_{i} + u_{i} \]

離散選択モデルでは、選択確率を求めることが出来ます。\(P(Familymart\_Entry = 1)\)はFamilymartが参入する確率です。\(F(\cdot)\)は累積分布関数を示しており、ロジットモデルなら、ロジスティック分布、プロビットモデルなら標準正規分布の累積分布関数である。

\[ P(Familymart\_Entry = 1) = F(\alpha + \beta_{1}\times Familymart\_existed_{i}+ \beta_{2}\times pop_{i} + u_{i} ) \]

ロジットモデルとプロビットモデルの両方でこれから推定してみます。

4.4.2 ロジットモデル

ロジットモデルを推定する際はglm()関数を使います。基本的にはOLS推定と一緒ですが、()内でロジットモデルであることを指定するため、family = binominal(link = "logit")と指定します。結果をout_logitに保存します。

out_logit <- glm( Familymart_Entry ~ Familymart_existed + pop, family = binomial(link = "logit"), data = df)

4.4.3 解釈

推定結果を出力する時にはいつも通りsummary()です。

summary(out_logit)
## 
## Call:
## glm(formula = Familymart_Entry ~ Familymart_existed + pop, family = binomial(link = "logit"), 
##     data = df)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -0.7445  -0.4593  -0.4129  -0.3569   3.0002  
## 
## Coefficients:
##                      Estimate Std. Error z value Pr(>|z|)
## (Intercept)        -2.502e+00  1.439e-01 -17.385  < 2e-16
## Familymart_existed -5.813e-01  1.589e-01  -3.659 0.000253
## pop                 2.595e-04  7.334e-05   3.538 0.000404
##                       
## (Intercept)        ***
## Familymart_existed ***
## pop                ***
## ---
## Signif. codes:  
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1023.2  on 1695  degrees of freedom
## Residual deviance: 1002.4  on 1693  degrees of freedom
## AIC: 1008.4
## 
## Number of Fisher Scoring iterations: 5

離散選択モデルのポイントとして、結果を解釈する際にパラメータの値をそのまま使うことが出来ません。その代わりに、いくつか係数を解釈する際に使われる項目がありますが、ここでは平均限界効果を紹介します。この指標は、ある説明変数を1単位増やした際に、確率が平均的にどの程度変化するのかを表すものです。ライブラリmarginsを使えば、一瞬で出力されます。

library(margins)

既存店舗が1店舗増えることで、参入確率は4.6%ほど下がる傾向にあるみたいです。仮説は検証されませんでしたね。

summary(margins(out_logit))
##              factor     AME     SE       z      p   lower
##  Familymart_existed -0.0468 0.0130 -3.6026 0.0003 -0.0723
##                 pop  0.0000 0.0000  3.4951 0.0005  0.0000
##    upper
##  -0.0214
##   0.0000

4.4.4 プロビットモデル

プロビットモデルもロジットモデルとほぼ同じです。唯一違うのはfamily = binominal(link = "probit")と指定して、プロビットモデルで推定することを明示します。

out_probit <- glm( Familymart_Entry ~ Familymart_existed + pop, family = binomial(link = "probit"), data = df)

4.4.5 解釈

こちらも同じです。

summary(out_probit)
## 
## Call:
## glm(formula = Familymart_Entry ~ Familymart_existed + pop, family = binomial(link = "probit"), 
##     data = df)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -0.7137  -0.4597  -0.4145  -0.3627   3.0476  
## 
## Coefficients:
##                      Estimate Std. Error z value Pr(>|z|)
## (Intercept)        -1.438e+00  7.199e-02 -19.976  < 2e-16
## Familymart_existed -2.681e-01  7.584e-02  -3.535 0.000408
## pop                 1.300e-04  3.818e-05   3.406 0.000659
##                       
## (Intercept)        ***
## Familymart_existed ***
## pop                ***
## ---
## Signif. codes:  
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1023.2  on 1695  degrees of freedom
## Residual deviance: 1003.3  on 1693  degrees of freedom
## AIC: 1009.3
## 
## Number of Fisher Scoring iterations: 5

こちらも同じです。少し確率は下がったようです。

summary(margins(out_probit))
##              factor     AME     SE       z      p   lower
##  Familymart_existed -0.0426 0.0121 -3.5112 0.0004 -0.0664
##                 pop  0.0000 0.0000  3.3889 0.0007  0.0000
##    upper
##  -0.0188
##   0.0000

4.5 推定結果の整理

ロジットモデルとプロビットモデルの結果を比較してみます

library(stargazer)

ちなみに、OLS推定でも推定自体は出来ます。線形確率モデルとも呼ばれたりします。

out_OLS <- lm(Familymart_Entry ~ Familymart_existed + pop, data = df)

ロジットモデルとプロビットモデルとで正負は一致しています。

stargazer(out_OLS, out_logit, out_probit, type="text")
## 
## ===============================================================
##                                 Dependent variable:            
##                     -------------------------------------------
##                                  Familymart_Entry              
##                               OLS           logistic   probit  
##                               (1)              (2)       (3)   
## ---------------------------------------------------------------
## Familymart_existed         -0.039***        -0.581*** -0.268***
##                             (0.010)          (0.159)   (0.076) 
##                                                                
## pop                       0.00002***        0.0003*** 0.0001***
##                            (0.00001)        (0.0001)  (0.00004)
##                                                                
## Constant                   0.076***         -2.502*** -1.438***
##                             (0.011)          (0.144)   (0.072) 
##                                                                
## ---------------------------------------------------------------
## Observations                 1,696            1,696     1,696  
## R2                           0.011                             
## Adjusted R2                  0.010                             
## Log Likelihood                              -501.215  -501.668 
## Akaike Inf. Crit.                           1,008.430 1,009.337
## Residual Std. Error    0.284 (df = 1693)                       
## F Statistic         9.840*** (df = 2; 1693)                    
## ===============================================================
## Note:                               *p<0.1; **p<0.05; ***p<0.01