Stata:嵌套 Logit 模型 (Nested Logit)

发布时间:2020-07-03 阅读 862

Stata 连享会   主页 || 视频 || 推文

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

作者:杨柳 (西北大学)
E-Mail: philoyl@163.com

致谢: 这篇推文的核心内容主要来自陈强老师编著的《高级计量经济学及 Stata 应用》一书,特此致谢。

1. 简介

此前,连享会发布了一系列离散选择模型相关的推文,参见 连享会 - 离散选择模型专题,本文介绍一种相对复杂的模型 —— 嵌套 Logit 模型。

多元 Logit 模型需满足 IIA (Independent of Irrelevant Alternatives) 的假设,即无关选择枝之间是相互独立的。但这个假设有时是难以满足的,这样就会导致错误的结果。例如交通方式选择中 “红蓝巴士” 的经典问题。该问题描述了如下交通方式选择的情形:

假设出行者有两种交通方式可供选择:小汽车 (car) 和红色公交车 (red bus),选择枝方案集记为 Jn。假设这两种交通方式的效用值 U 是相等的,则选择小汽车与红色公交车的概率为:

现在,新增了一种蓝色公交车 (blue bus) 的选择枝,这三种交通方式构成的方案集记为 Jn。并且,蓝色公交车除了颜色与红色公交车不同之外,其本质是相同的,则三种交通方式的效用值为:

那么,根据多元 Logit 模型的计算公式,选择这三种交通方式的概率为:

显然,这个概率的结果是错误的。因为除了颜色不同之外,蓝色与红色公交车的本质是相同的,不会由于公交车的颜色不同而影响出行者选择公交车方式或者小汽车方式出行。导致这个错误的原因是三个选择枝之间是不独立的,即蓝色公交车与红色公交车具有相关性,这就违背了 IIA 假设。

此时,可以采用将具有相关的选择枝 (红色与蓝色公交车) 归到一个组,允许同组内的选择枝相关,但不同组之间要相互独立。出行者选择交通方式时先在各个组之间 (公交车与小汽车) 进行选择,再选择组内的交通方式 (红色与蓝色公交车) ,形成树状或嵌套 (nested) 的结构,如下图 1 所示:

图 1 交通方式选择的树状或嵌套结构
图 1 交通方式选择的树状或嵌套结构

在此情形下,选择小汽车、红色公交车与蓝色公交车的正确概率为:

2. Nested Logit 模型的树状结构和模型设定

图 1 中呈现的就是 Nested Logit 模型的树状或嵌套结构。第一层 (level 1) 中的小汽车方式与公交车方式为主枝,第二层 (level 2) 公交车选择方案下的红色与蓝色公交车为分枝。 类似的例子还包括消费者购买住房时的选择行为,先选择住在哪个地区、再选择住在哪个小区、再选择具体的楼/户型/朝向等。

从上述例子中,我们不难看出,Nested Logit 模型的关键是允许第二层 (level 2) 中的选择枝之间可以是相关的。在上例中,可以允许 ( ϵi,redbus,ϵi,bluebus ) 具有相关性,但第一层 (level 1) 中的两个组之间是相互独立的,即  ϵi,car 与 ( ϵi,redbus,ϵi,bluebus ) 之间是独立的。

定义选择枝的下角标为 (j,k),其中,j 代表第一层主枝的标号,k 代表第二层分枝的标号。不同的主枝下面可以有不同数量的分枝,可以仅包含一个分枝。将个体 i 选择主枝 j 下面的分枝 k 的随机效用函数定义为下式 ( 为了便于说明省略下角标 i ):

式中,zj 仅随主枝发生变化,xjk 既可随主枝也可随分枝发生变化。( 如果所有的解释变量是随个体变化的,那么随机效用函数为 zαj+xβjk+εjk,令其中的一个 βjk 等于 0 )

Nested Logit 模型假设扰动项 (εj1,,εjK) 服从于 Gumbel 多元极值分布 (Gumbel's multivariate extrem-value distribution)。可证明 (j,k) 选择枝被选择的概率等于:

式中,Ij=ln{l=1Kjexp(xjlβj/τj)},被称为包含价值 (inclusive value) 或对数和 (log-sum) ;参数 τj 称为不相似参数 (dissimilarity parameters),在 Stata 中记为 tau。在 τj 取任意值的情况下,模型计算结果都是正的概率并且相加等于 1。但是加和形式的随机效用模型 (Additive Random-Utility Model) 限制了参数 τj 的取值为 0τj1。如果参数 τj 的取值超过了这个范围,就意味着虽然模型的数学计算是正确的,但却不符合随机效用理论。若 τj=1(j=1,,J),则所有选择枝的扰动项都不相关,满足了 IIA 假设,就回到了多元 Logit 模型、条件 Logit 模型或混合 Logit 模型的情形。

3. Stata 实操:nlogit 命令

3.1 定义树状嵌套结构

估计 Nested Logit 模型之前,需要定义树状的嵌套结构,Stata 命令语法如下:

nlogitgen newaltvar = altvar (branchlist)

其中,altvar 为原始定义的选择枝变量,newaltvar 为新生成的代表树状嵌套结构的变量,branchlist 的语法格式为:

branch, branch [, branch ...]

其中,branch 的语法格式为:

[label:] alternative [| alternative [| alternative ...]]

树状嵌套结构中至少要有两个主枝,每个主枝下面有一个或多个选择枝 (alternatives)。

3.2 查看定义的树状嵌套结构

定义完树状嵌套结构之后,可以使用 nlogittree 命令查看定义的树状嵌套结构是否正确,Stata 命令语法如下:

nlogittree altvarlist [if] [in] [weight] [,options] 

其中,一个有用的 option 选项为 choice(depvar),该选项的作用是列出样本中每个选择枝的频数。

3.3 Nested Logit 模型及估计

当我们确认了定义的树状嵌套结构之后,使用 nlogit 命令来估计建立的 Nested Logit 模型。Stata 命令语法如下:

nlogit depvar [indepvars] [if] [in] [weight] [|| lev1_equation [|| lev2_equation ...]] || altvar: [byaltvarlist], case(varname) [options] 

其中,indepvar 为随选择枝变化的解释变量,随个体变化不随选择枝变化的解释变量包括在 lev#_equation 中;|| 为分隔符;case(varname) 用来指定个体; lev1_equation 用来指定系数仅随主枝 (level 1) 而不随分枝 (level 2) 变化的解释变量;lev2_equation 用来指定系数既随主枝 (level 1) 又随分枝 (level 2) 变化的解释变量;lev1_equation 的语法格式如下:

altvar: [byaltvarlist] [, base(#|lbl) estconst]

其中,base(#|lbl) 用于指定基准组

4. Stata 实操:应用范例

4.1 模型设定与估计

以研究个人选择出行方式的影响因素为例对该命令的应用进行说明。我们使用一份包括公交/轨道/小汽车三种交通方式的出行时间、成本、收入、出行人数与个体选择出行方式情况的数据 travel2.dta,该数据可从陈强老师编著的《高级计量经济学及 Stata 应用》书中的数据集中下载。

这份数据包括了 210 名个体选择公交、轨道、小汽车三种交通方式的情况。主要解释变量包括:每种交通方式的总出行时间 (time)车内出行成本 (invc)家庭收入 (hinc)出行人数 (psize),因变量为 个体选择交通方式的分类变量 (choice)

需要注意的是,这份数据为 长型数据 (long data),应用 nlogit 命令时 数据类型要求为长型数据,如果调查得到的原始数据是宽型数据 (wide data),需要使用 reshape 命令进行转换。

use "travel2.dta", clear
des2  //查看变量的基本情况
bysort mode choice: sum time invc ttme invt gc hinc psize  //分交通方式统计变量的基本统计量

在公交、轨道、小汽车三种交通方式中,公交与轨道方式具有相关性,因此,可将这两种交通方式归为一组,称为公共交通方式,而小汽车方式自成一组,称为私人交通方式。根据这个分组,我们建立树状的嵌套结构,Stata 命令和结果如下:

*-生成 type 变量表示树状嵌套结构
  nlogitgen type = mode(Public: Train|Bus, Private: Car)

new variable type is generated with 2 groups
label list lb_type
lb_type:
           1 Public
           2 Private


*-查看定义的嵌套结构
*-choice选项表示列出choice变量的频数,即每个选择枝的样本频数
*-变量顺序为:先列出最底层中表示选择枝的变量,再列出上一层中表示分组的变量
  nlogittree mode type, choice(choice)


tree structure specified for the nested logit model

 type     N      mode   N   k 
-------------------------------
 Public  304 --- Train 152  63
              +- Bus   152  30
 Private 152 --- Car   152  59
-------------------------------
                total  456 152

k = number of times alternative is chosen
N = number of observations at each level

在解释变量中,timeinvc 随选择枝发生变化,psizehinc 不随选择枝发生变化。建立 Nested Logit 模型时,设第一层方程中的解释变量为 psize,使 psize 的系数 仅随主枝改变 (也可以指定 psize 的系数随分枝变化),设第二层方程中的解释变量为 hinc,使 hinc 的系数 既可以随主枝也可以随分枝变化。Stata 命令与回归结果如下:

.   nlogit choice time invc || type: psize, base(Private) || mode: hinc, base(Car) case(id) notree


RUM-consistent nested logit regression         Number of obs      =        456
Case variable: id                              Number of cases    =        152

Alternative variable: mode                     Alts per case: min =          3
                                                              avg =        3.0
                                                              max =          3

                                                  Wald chi2(5)    =      40.43
Log likelihood = -71.596852                       Prob > chi2     =     0.0000

------------------------------------------------------------------------------
      choice |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
mode         |
        time |     -0.013      0.003    -5.22   0.000       -0.018      -0.008
        invc |     -0.024      0.009    -2.59   0.010       -0.042      -0.006
------------------------------------------------------------------------------
type equations
------------------------------------------------------------------------------
Public       |
       psize |     -0.231      0.248    -0.93   0.350       -0.717       0.254
-------------+----------------------------------------------------------------
Private      |
       psize |      0.000  (base)
------------------------------------------------------------------------------
mode equations
------------------------------------------------------------------------------
Train        |
        hinc |     -0.036      0.014    -2.58   0.010       -0.063      -0.009
       _cons |      3.301      0.649     5.08   0.000        2.029       4.574
-------------+----------------------------------------------------------------
Bus          |
        hinc |     -0.019      0.015    -1.28   0.202       -0.049       0.010
       _cons |      2.431      0.658     3.69   0.000        1.141       3.722
-------------+----------------------------------------------------------------
Car          |
        hinc |      0.000  (base)
       _cons |      0.000  (base)
------------------------------------------------------------------------------
dissimilarity parameters
------------------------------------------------------------------------------
type         |
 /Public_tau |      0.327      0.106                         0.120       0.534
/Private_tau |      1.000   1.74e+05                     -3.40e+05    3.40e+05
------------------------------------------------------------------------------
LR test for IIA (tau=1): chi2(2) = 13.95                  Prob > chi2 = 0.0009

模型估计结果显示,timeinvc 的系数显著为负,表明当交通方式的 timeinvc 较大时,选择该种交通方式的概率较小;hinc 对选择轨道方式的作用是显著的,但对选择公交方式的作用不显著,表明家庭收入较高的个体不倾向于选择轨道方式出行。

最后一行对 IIA 假设的似然比检验结果表明应拒绝 IIA 假定,表明使用 Nested Logit 模型是合适的。计算的不相似参数的结果显示 (Stata 中记为 tau) ,Public 组中 Train 与 Bus 的不相似参数为 0.327;对于 Private 组,由于只有一个选择枝,因此不相似参数标准化为 1。

4.2 计算预测概率

可使用 predict 命令附加 pr 选项对第一层的主枝 ( Public 与 Private ) 的选择概率与第二层的分枝( Train | Bus 与 Car ) 的选择概率进行预测,并进行统计,Stata 命令与结果如下:

.   predict plevel1 plevel2, pr


.   list id mode type plevel1 plevel2 in 1/9, sepby(id)

     +----------------------------------------------+
     | id    mode      type     plevel1     plevel2 |
     |----------------------------------------------|
  1. |  1   Train    Public   .16579709   .15071222 |
  2. |  1     Bus    Public   .16579709   .01508488 |
  3. |  1     Car   Private   .83420291   .83420291 |
     |----------------------------------------------|
  4. |  2   Train    Public   .36135831   .34204217 |
  5. |  2     Bus    Public   .36135831   .01931614 |
  6. |  2     Car   Private   .63864169   .63864169 |
     |----------------------------------------------|
  7. |  3   Train    Public   .13511207   .00634726 |
  8. |  3     Bus    Public   .13511207   .12876482 |
  9. |  3     Car   Private   .86488793   .86488793 |
     +----------------------------------------------+

*-对level 1 层的预测概率进行分类统计
.   bysort type: sum plevel1

*-对level 2 层的预测概率进行分类统计
.   bysort type mode: sum plevel2

参考资料

  • 陈强. 高级计量经济学及Stata应用[M]. 高等教育出版社, 2014. [-Link-]
  • Cameron, A., P. Trivedi. Microeconometrics using stata[M]. Stata Press, 2009. [-Link-]

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD