温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
作者:杨柳 (西北大学)
E-Mail: philoyl@163.com
致谢: 这篇推文的核心内容主要来自陈强老师编著的《高级计量经济学及 Stata 应用》一书,特此致谢。
此前,连享会发布了一系列离散选择模型相关的推文,参见 连享会 - 离散选择模型专题,本文介绍一种相对复杂的模型 —— 嵌套 Logit 模型。
多元 Logit 模型需满足 IIA (Independent of Irrelevant Alternatives) 的假设,即无关选择枝之间是相互独立的。但这个假设有时是难以满足的,这样就会导致错误的结果。例如交通方式选择中 “红蓝巴士” 的经典问题。该问题描述了如下交通方式选择的情形:
假设出行者有两种交通方式可供选择:小汽车 (car) 和红色公交车 (red bus),选择枝方案集记为
现在,新增了一种蓝色公交车 (blue bus) 的选择枝,这三种交通方式构成的方案集记为
那么,根据多元 Logit 模型的计算公式,选择这三种交通方式的概率为:
显然,这个概率的结果是错误的。因为除了颜色不同之外,蓝色与红色公交车的本质是相同的,不会由于公交车的颜色不同而影响出行者选择公交车方式或者小汽车方式出行。导致这个错误的原因是三个选择枝之间是不独立的,即蓝色公交车与红色公交车具有相关性,这就违背了 IIA 假设。
此时,可以采用将具有相关的选择枝 (红色与蓝色公交车) 归到一个组,允许同组内的选择枝相关,但不同组之间要相互独立。出行者选择交通方式时先在各个组之间 (公交车与小汽车) 进行选择,再选择组内的交通方式 (红色与蓝色公交车) ,形成树状或嵌套 (nested) 的结构,如下图 1 所示:
在此情形下,选择小汽车、红色公交车与蓝色公交车的正确概率为:
图 1 中呈现的就是 Nested Logit 模型的树状或嵌套结构。第一层 (level 1) 中的小汽车方式与公交车方式为主枝,第二层 (level 2) 公交车选择方案下的红色与蓝色公交车为分枝。 类似的例子还包括消费者购买住房时的选择行为,先选择住在哪个地区、再选择住在哪个小区、再选择具体的楼/户型/朝向等。
从上述例子中,我们不难看出,Nested Logit 模型的关键是允许第二层 (level 2) 中的选择枝之间可以是相关的。在上例中,可以允许 (
定义选择枝的下角标为 (
式中,
Nested Logit 模型假设扰动项
式中,
估计 Nested Logit 模型之前,需要定义树状的嵌套结构,Stata 命令语法如下:
nlogitgen newaltvar = altvar (branchlist)
其中,altvar 为原始定义的选择枝变量,newaltvar 为新生成的代表树状嵌套结构的变量,branchlist 的语法格式为:
branch, branch [, branch ...]
其中,branch 的语法格式为:
[label:] alternative [| alternative [| alternative ...]]
树状嵌套结构中至少要有两个主枝,每个主枝下面有一个或多个选择枝 (alternatives)。
定义完树状嵌套结构之后,可以使用 nlogittree
命令查看定义的树状嵌套结构是否正确,Stata 命令语法如下:
nlogittree altvarlist [if] [in] [weight] [,options]
其中,一个有用的 option 选项为 choice(depvar)
,该选项的作用是列出样本中每个选择枝的频数。
当我们确认了定义的树状嵌套结构之后,使用 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)
用于指定基准组
以研究个人选择出行方式的影响因素为例对该命令的应用进行说明。我们使用一份包括公交/轨道/小汽车三种交通方式的出行时间、成本、收入、出行人数与个体选择出行方式情况的数据 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
在解释变量中,time 与 invc 随选择枝发生变化,psize 与 hinc 不随选择枝发生变化。建立 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
模型估计结果显示,time 与 invc 的系数显著为负,表明当交通方式的 time 与 invc 较大时,选择该种交通方式的概率较小;hinc 对选择轨道方式的作用是显著的,但对选择公交方式的作用不显著,表明家庭收入较高的个体不倾向于选择轨道方式出行。
最后一行对 IIA 假设的似然比检验结果表明应拒绝 IIA 假定,表明使用 Nested Logit 模型是合适的。计算的不相似参数的结果显示 (Stata 中记为 tau) ,Public 组中 Train 与 Bus 的不相似参数为 0.327;对于 Private 组,由于只有一个选择枝,因此不相似参数标准化为 1。
可使用 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
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟 Stata 33 讲 - 连玉君, 每讲 15 分钟. 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看,所有课程可以随时购买观看。
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 ⭐ | DSGE, 因果推断, 空间计量等 | |
⭕ Stata数据清洗 | 游万海 | 直播, 2 小时,已上线 |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD