龙空技术网

【计量分析系列】Stata应用:随机参数logit、潜类别logit模型

暮雪寒泉 199

前言:

而今我们对“马尔可夫链stata命令”都比较重视,姐妹们都需要学习一些“马尔可夫链stata命令”的相关内容。那么小编同时在网络上收集了一些关于“马尔可夫链stata命令””的相关资讯,希望各位老铁们能喜欢,同学们一起来了解一下吧!

1、离散选择模型

条件logit模型和混合logit模型均可以理解为多项式logit模型的特殊形式,且均是基于随机效用与效用最大化的理论假设的离散选择模型,而随机参数logit与潜类别logit模型均由多项式logit模型演化而来。多项式logit模型是整个离散选择模型体系的基础,并且是最简单的多元离散选择模型形式。而多项式logit模型的本质是二元logit模型组,例如,M元的多项式logit模型其实就是(M-1)组二元logit模型。

上图简要总结了一些常见的离散选择模型,而异质性模型除了上图所示外,还包括随机参数概率模型、潜类别概率模型、随机参数潜类别概率模型、马尔科夫转换模型以及随机参数或潜类别马尔科夫转换模型。下表总结了各种异质性选择模型的优缺点:

每个异质性模型均有自身的优点与缺点,即不存在一个最优的异质性模型。随着模型越来越复杂,模型的优点随之越多,与此同时模型缺点也随之增多。在随机参数概率模型中,混合logit模型是最常用的异质性模型;在潜类别概率模型中,潜类别logit模型是最常用的异质性模型。因此,本文的异质性模型只介绍随机参数logit模型和潜类别logit模型。关于条件logit模型、混合logit模型、随机参数logit模型以及潜类别logit模型的详细介绍可以查阅文末的参考文献(Train K.,2009)。离散选择模型有许多的应用,包括:

研究出行选择行为(选择何种交通方式出行)研究消费者商品选择行为(选择购买何种商品)研究顾客的满意度(满意度的影响因素)研究某种事物的接受度产品的市场份额估计支付意愿及选择偏好

2 数据描述及研究步骤

2.1 数据描述

我们通过stata官方手册中随机参数logit模型的inschoice.dta来应用条件logit模型、混合logit模型、随机参数logit模型、潜类别logit模型。该数据集包含6个变量用于记录250人的可用保险计划和选定计划的信息,各变量的描述如下:

id:用于识别个体premium:保费(随方案而变),Insurance premium (in $100/month)deductible:免赔额(随方案而变),Deductible (in $1,000/year)income:收入(个人属性),Income (in $10,000/year)insurance:保险方案(可选方案),Insuranceschoice:选定的保险方案(因变量),Chosen alternative

首先,我们看一下数据前10行的格式:

. list in 1/10, sepby(id) abbreviate(10)

然后,查看下数据的基本特征:

. sum id premium deductible income insurance choice

2.2 研究步骤

本文主要目的是通过inschoice.dta介绍stata估计混合logit模型、潜类别logit模型和随机参数logit模型的方法,同时为了做对比,也将估计条件logit模型,具体流程如下:

估计条件logit模型;估计混合logit模型;估计随机参数logit模型;在估计潜类别logit模型。

3 应用实例

3.1 条件logit模型

由于条件logit模型只接受随方案而变的自变量,因此仅使用 premium、deductible变量分析其对选择保险方案的影响。此外,数据集本身没有设置各方案的虚拟变量,故第一步先生成各保险方案的虚拟变量:

gen Health=0gen HCorp=0gen SickInc=0gen MGroup=0gen MoonHealth=0replace Health=1 if insurance==1replace HCorp=1 if insurance==2replace SickInc=1 if insurance==3replace MGroup=1 if insurance==4replace MoonHealth=1 if insurance==5

然后,进行条件logit模型回归,以方案5(MoonHealth)为参考类别:

. clogit choice Health HCorp SickInc MGroup premium deductible,group(id) nolog

从估计的结果可以看出,如果其他解释变量的取值相同(premium、deductible),则个人最有可能选择Health保险方案。另外,一个方案的保费和免赔额越高,则选择该方案的概率越低。由于离散选择模型是非线性模型,故模型的系数只有其符号能反映正负影响,而不能反映影响的大小,所以在上述命令中加入OR计算其风险比:

. clogit choice Health HCorp SickInc MGroup premium deductible,group(id) nolog or

premium的风险比为0.086,表示一个方案的保费每增加一个单位(100美元),则选择该方案的概率将会降低91.4%。此外,如果各方案的保费和免赔额相等,则个人选择Health保险方案的概率是MoonHealth的33.804倍,其他变量可以类似的解释。

3.2 混合logit模型

相比于条件logit模型只接受随方案而变的变量,混合logit还可以接受个人属性变量,为了进行对比,先进行仅包含随方案而变的混合logit模型。同样,以方案5(MoonHealth)为参考类别:

. asclogit choice premium deductible,case(id) alternatives(insurance) base(5) nolog

通过对比条件logit模型和混合logit模型的结果,可以发现当仅包含随方案而变的自变量时,混合logit模型和条件logit模型的估计结果一致。下面,在上述混合logit模型的基础上加入个人属性变量(income),并计算各变量的风险比:

asclogit choice premium deductible,case(id) alternatives(insurance) base(5) casevars(income) nolog or

结果显示,收入(income)对选择Health和HCorp方案的选择在0.05水平上有影响。例如年收入每增加一个单位(10,000美元),个人选择Health保险方案的概率将提高64%。

3.3 随机参数logit模型

随机参数logit模型假设个体之间存在异质性,通过模型参数的分布(均值、标准差)刻画个体的异质性。stata15.0提供了asmixlogit命令用于估计随机参数logit模型,新的stata16.0版本采用了新命令cmmixlogit作为官方命令,故本文采用cmmixlogit估计随机参数logit模型。首先通过smset设置个体和可选方案变量,本数据集为id和insurance变量,命令:

. cmset id insurance

假定premium与deductible均为随机参数,并且假定参数服从正态分布;此外,随机参数logit模型是采用蒙特卡罗模拟法估计参数的,研究表明使用蒙特卡罗法时采用Halton序列抽样更有效率,故本文采用Halton序列抽样法进行演示,并设定每次Halton序列取1000个点,命令如下:

.  cmmixlogit choice, random(deductible premium) casevars(income) basealternative(5) intmethod(Halton) intpoints(1000)

stata提供的检验关于是否需要采用随机参数的方法比较保守,仅作为参考。实际上,判断是否需要采用随机参数logit的方法很简单,只需要看随机参数的均值和标准差是否显著即可。stata官方命令计算的结果仅提供随机参数均值的Z和P值,并不提供其标准差的显著性统计量。我们可以很简单的计算出其Z统计量(Z统计量=估计值/标准差):

过计算出的Z值可以看出,premium的标准差在0.05显著性水平上显著,deductible的标准差在0.1的显著性水平上显著,表明考虑将这两个变量刻画成随机参数是合理的。随机参数logit模型的固定参数估计解释跟前述模型一致,故这里只以deductible为例,介绍下如何解释随机参数。deductible服从N( -1.155932, 0.8484104^2)的正态分布,根据正态分布的累计概率计算结果表明,一个方案的免赔额越高,91.31%的个体选择该方案的概率更低,而8.69%的个体选择该方案的概率更高,这体现了个体之间的异质性。

同样地,我们也可以计算每个变量的边际效应,以定量衡量各变量对选择各方案的边际效应,以deductible为例,首先预测每个保险方案的市场份额:

. margins

结果表明,根据本身的数据集预测有20.3%的个体选择Health保险方案。然后通过改变deductible的值,以考察选择Health保险方案份额的变化,考虑将deductible增加10%:

.  margins, at(deductible=generate(deductible*1.10)) alternative(Health)

我们可以发现,当deductible增加10%,选择Health保险方案的个体降至了18.7%。

注:本例只是为了演示作用,简单的估计了随机参数logit模型,在实际应用中需要多次测试随机参数服从的不同的分布形式、以及不同抽样序列的样本点值。尤其是当变量数多了以后,需要多次测试每个变量是否可以建模为随机参数。此外,Nlogit软件也可以估计随机参数logit模型,并且比stata更灵活,可以自己写效用函数,甚至可以估计非线性效用函数,也可以将个人属性变量的参数估计刻画成随机参数,有兴趣的读者可以采用Nlogit软件试试,文末会给出Nlogit软件的参考文献和书目。

3.4 潜类别logit模型

Pacifico's (2012)写了个用EM算法估计潜类别logit模型的外部命令(lclogit),本文也将采用lclogit命令估计潜类别logit模型,使用该命令前需要先安装,这里就不演示命令安装过程了。由于潜类别logit模型事先不知道最佳的潜类别数,故在正式估计模型前,需要根据不同类别数的CAIC和BIC指标确定合适的潜类别数。因此,先运行以下命令,确定合适的潜类别数:

. forvalues c = 2/5 {	lclogit choice premium deductible,group(id) id(id) nclasses(`c') membership(income) seed(123)	matrix b = e(b)	matrix ic = nullmat(ic) \ `e(nclasses)', `e(ll)', `=colsof(b)', `e(caic)', `e(bic)'}matrix colnames ic = "Classes" "LLF" "Nparam" "CAIC" "BIC"matlist ic, name(columns)

结果显示,当类别数为2时,CAIC和BIC指标均达到最小,故应选取2个类别的潜类别logit模型。并且在上述模型的基础上,加入方案的虚拟变量,下面将估计2类别潜类别logit模型:

. lclogit choice Health HCorp SickInc MGroup premium deductible,group(id) id(id) nclasses(2) membership(income) seed(123)

上表显示了潜类别logit模型以类别2为参考类别,并报告了每个类别的比例,由于我们更关心参数估计,故上面的结果就不作过多的解释,下面将展示参数估计结果:

. lclogitml, iter(10)

参数估计结果显示,无论是在类别1还是类别2,如果其他解释变量的取值相同(premium、deductible),则个人最有可能选择Health保险方案;相较于类别2,类别1的群体受保费和免赔额的影响更大。另外,一个方案的保费和免赔额越高,则选择该方案的概率越低,这与条件logit模型估计的结果一致。此外,相比于类别2,类别1的人群更有可能是年收入更高的人群。同样的,我们采取exp(B)的方式计算风险比,这里就不加以演示了。

4 结语

本文通过实例详细地介绍了条件logit模型、混合logit模型、随机参数logit和潜类别logit模型的stata实现过程,尤其介绍了随机参数logit和潜类别logit两种异质性模型,希望能对读者在利用这些模型做研究时提供帮助。值得注意的是,本文并未比较各模型的优劣,在实际应用中可以采用伪R方、预测准确性和BIC等指标选取最佳模型。此外,以作者的经验来看,stata提供的命令虽然简单,但是局限性也较多,有兴趣的读者可以考虑用Nlogit软件实现各种离散模型的估计。如果各位读者有兴趣,后续可以专门写一篇用Nlogit软件估计非线性效用函数的随机参数logit模型和有序随机参数logit模型的推文。

5 参考文献

[1] Train K. Discrete Choice Methods With Simulation [M]. Second edition. Cambridge: Cambridge University Press, 2009.

[2] Mannering F L, Bhat C R. Analytic methods in accident research: methodological frontier and future directions [J]. Analytic Methods in Accident Research, 2014, 1: 1-22.

[3] Pacifico D , Yoo H I . Lclogit: A Stata Command for Fitting Latent-Class Conditional Logit Models via the Expectation-Maximization Algorithm[J]. Stata Journal Promoting Communications on Statistics & Stata, 2013, 13(3):625-639.

[4] StataCorp. 2019.Stata choice models reference manual release 16. College Station, TX: StataCorp LLC.

[5] 陈强. 高级计量经济学及stata应用(第二版),2013.

学习Nlogit软件的参考书目:

[1 ]Hensher D A, Rose J M , Greene W H. Applied Choice Analysis [M]. Second edition. Cambridge: Cambridge University Press, 2015.

[2] Greene W H.2016. NLOGIT version 6 reference guide[S]. Plainview, NY: Econometric Software.

6 完整代码

use 展示前10行数据list in 1/10, sepby(id) abbreviate(10)//描述性统计sum id premium deductible income insurance choice//生成方案的虚拟变量gen Health=0gen HCorp=0gen SickInc=0gen MGroup=0gen MoonHealth=0replace Health=1 if insurance==1replace HCorp=1 if insurance==2replace SickInc=1 if insurance==3replace MGroup=1 if insurance==4replace MoonHealth=1 if insurance==5//条件logit模型回归,以方案5(MoonHealth)为参考类别clogit choice Health HCorp SickInc MGroup premium deductible,group(id) nologclogit choice Health HCorp SickInc MGroup premium deductible,group(id) nolog or//混合logit模型回归,以方案5(MoonHealth)为参考类别asclogit choice premium deductible,case(id) alternatives(insurance) base(5) nolog//混合logit模型回归,以方案5(MoonHealth)为参考类别,加入income,并求orasclogit choice premium deductible,case(id) alternatives(insurance) base(5) casevars(income) nolog or//随机参数logit模型,Halton抽样cmmixlogit choice, random(deductible premium) casevars(income) basealternative(5) intmethod(Halton) intpoints(1000)display(0.8484104/ 0.4390417)display(0.8561866/ 0.4157747  )marginsmargins, at(deductible=generate(deductible*1.01)) alternative(Health)//确定最优的潜类别logit模型分类数目forvalues c = 2/5 {	lclogit choice premium deductible,group(id) id(id) nclasses(`c') membership(income) seed(123)	matrix b = e(b)	matrix ic = nullmat(ic) \ `e(nclasses)', `e(ll)', `=colsof(b)', `e(caic)', `e(bic)'}matrix colnames ic = "Classes" "LLF" "Nparam" "CAIC" "BIC"matlist ic, name(columns)//估计二类潜类别logit模型lclogit choice Health HCorp SickInc MGroup premium deductible,group(id) id(id) nclasses(2) membership(income) seed(123)lclogitml, iter(10)

标签: #马尔可夫链stata命令