Stata:嵌套 Logit 模型 (Nested Logit)
2020-07-02
杨柳
15025

连享会   主页 || 推文 || 知乎 || B 站 || 在线课堂

New! 搜推文,找资料,用 lianxh 命令:
安装: ssc install lianxh, replace
使用: lianxh 合成控制
       lianxh DID + 多期, w


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

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

1. 简介

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

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

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

P(carJn)=P(bus(red)Jn)=12P\left(\operatorname{car}\mid J_{n}\right)=P\left(\operatorname{bus}(\operatorname{red})\mid J_{n}\right)=\frac{1}{2}

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

Ucar=Uredbus=UbluebusU_{car} = U_{red bus} = U_{blue bus}

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

P(carJn)=P(bus(red)Jn)=P(bus(blue)Jn)=13P\left(\operatorname{car} \mid J_{n}\right)=P\left(\text {bus(red)} \mid J_{n}\right)=P\left(\text {bus(blue)} \mid J_{n}\right)=\frac{1}{3}

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

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

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

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

P(carJn)=12,P(redbusJn)=P(bluebusJn)=14P\left(\operatorname{car} \mid J_{n}^{\prime}\right)=\frac{1}{2}, \quad P\left(\text {redbus} \mid J_{n}^{\prime}\right)=P\left(\text {bluebus} \mid J_{n}^{\prime}\right)=\frac{1}{4}

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

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

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

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

Ujk+εjk=zjα+xjkβj+εjk,j=1,,J,k=1,,KjU_{j k}+\varepsilon_{j k}=\mathbf{z}_{j}^{\prime} \boldsymbol{\alpha}+\mathbf{x}_{j k}^{\prime} \boldsymbol{\beta}_{j}+\varepsilon_{j k}, \quad j=1, \ldots, J, \quad k=1, \ldots, K_{j}

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

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

pjk=pj×pkj=exp(zjα+τjIj)m=1Jexp(zmα+τmIm)×exp(xjkβj/τj)l=1Kjexp(xjlβj/τj)p_{j k}=p_{j} \times p_{k \mid j}=\frac{\exp \left(\mathbf{z}_{j}^{\prime} \boldsymbol{\alpha}+\tau_{j} I_{j}\right)}{\sum_{m=1}^{J} \exp \left(\mathbf{z}_{m}^{\prime} \boldsymbol{\alpha}+\tau_{m} I_{m}\right)} \times \frac{\exp \left(\mathbf{x}_{j k}^{\prime} \boldsymbol{\beta}_{j} / \tau_{j}\right)}{\sum_{l=1}^{K_{j}} \exp \left(\mathbf{x}_{j l}^{\prime} \boldsymbol{\beta}_{j} / \tau_{j}\right)}

式中,Ij=ln{l=1Kjexp(xjlβj/τj)}I_{j}=\ln \left\{\sum_{l=1}^{K_{j}} \exp \left(\mathbf{x}_{j l}^{\prime} \boldsymbol{\beta}_{j} / \tau_{j}\right)\right\},被称为包含价值 (inclusive value) 或对数和 (log-sum) ;参数 τj\tau_{j} 称为不相似参数 (dissimilarity parameters),在 Stata 中记为 tau。在 τj\tau_{j} 取任意值的情况下,模型计算结果都是正的概率并且相加等于 1。但是加和形式的随机效用模型 (Additive Random-Utility Model) 限制了参数 τj\tau_{j} 的取值为 0τj10 \leq \tau_{j} \leq 1。如果参数 τj\tau_{j} 的取值超过了这个范围,就意味着虽然模型的数学计算是正确的,但却不符合随机效用理论。若 τj=1(j=1,,J)\tau_{j}=1(j=1, \cdots, 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-]

资源共享


尊敬的老师 / 亲爱的同学们:
连享会致力于不断优化和丰富课程内容,以确保每位学员都能获得最有价值的学习体验。为了更精准地满足您的学习需求,我们诚挚地邀请您参与到我们的课程规划中来。
请您在下面的问卷中,分享您 感兴趣的学习主题或您希望深入了解的知识领域 。您的每一条建议都是我们宝贵的资源,将直接影响到我们课程的改进和创新。
我们期待您的反馈,因为您的参与和支持是我们不断前进的动力。感谢您抽出宝贵时间,与我们共同塑造更加精彩的学习旅程!https://www.wjx.cn/vm/YgPfdsJ.aspx# 再次感谢大家宝贵的意见!


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。more……
  • 扫码加入连享会微信群,提问交流更方便