Logit模型结果的3种解读方式

您所在的位置:网站首页 累计概率公式 Logit模型结果的3种解读方式

Logit模型结果的3种解读方式

2023-03-21 04:01| 来源: 网络整理| 查看: 265

对于回归模型系数的解读,学过回归的同学都知道,一般线性模型y=βx+ε中回归系数β的经济意义——解释变量x每增加一个单位,被解释变量y随之平均变化β,即x影响y的边际效应。而对于Logit和Probit这种非线性模型来说,其回归系数并非直接表示x影响y的边际效应,从其累积分布函数的表现也可以看出,x影响y的边际效应也是不断变化的。

正态分布和逻辑分布的累积分布函数及其差异

由于逻辑分布的累积分布函数有明确的解析表达式:P(y=1|x)=F(x,β)=exp(x'β)/[1-exp(x'β)],而标准正态分布则没有,使得Logit模型的计算相比Probit模型更方便,同时也赋予了Logit模型的回归系数更容易通过数理知识进行解读的优势,故Logit模型逐渐成为离散选择模型的老大哥。

那么,我们应该如何对Logit模型的回归结果进行解读呢?今天我们就从三大法宝切入来回答这个问题。(还不赶紧拿小本本记下……不对,还不赶紧点赞收藏 )

01 法宝一:几率

Logit的来源 | 一场跨世纪的漂流之旅一文中,我们讲到“Logit”的名字起源于约瑟夫·伯克森“the log of an odds”简化而来,“Logit”拆分开来就是“Log-it”,这里的“it”指的就是“odds”

那么问题来了:啥是odds?

英文odds的涵义有(事件的)发生比、胜算、几率,我们通常用以指代某个事件发生的“几率”。这里,事件发生的几率odds与事件发生的概率Probability是有所不同的,具体我们看公式:

概率Probability

= 事件A发生的频数/所有结果出现的频数

= P(A)

几率Odds

= 事件A发生的概率/事件A未发生的概率

= P(A)/1-P(A)

以掷骰子为例,我们定义事件A为掷一次骰子得到的点数为6,那么该事件发生的概率为P=1/6,几率(胜算)为odds=(1/6) / (5/6)=1/5。几率odds的产生最初是为了赌博中的公平起见——在对赌时,由于点数不为6发生的概率是点数为6发生的概率的5倍,两种赌注面临的相对风险不一样,因此,赌点数不为6的赌注也应该是赌点数为6的赌注5倍,这样才能保证赌博的公平。

再回过头来看,“Logit”就是“Log-it”“it”就是“odds”,连起来——Logit=log(odds)

概率、几率和对数几率的对应关系概率和几率odds的关系概率和对数几率logit的关系

由此我们就有了Logit模型的基本函数形式:

从Logit模型的公式可以看出,等式左边为对数几率log-odds,等式右边为线性函数,回归系数β表示的是解释变量x每增加一单位,引起对数几率log-odds的边际变化。由于取对数意味着百分比的变化,故此时回归系数β的第一种解读方式可以是:在其他变量不变的情况下,x每增加一单位,引起y发生的几率odds的变化百分比。具体地,当β>0,意味着x每增加一单位,y发生的几率将增加β×100%;当β<0,意味着x每减少一单位,y发生的几率将降低β×100%。

02 法宝二:几率比

如果你的解释变量x也是离散型变量(如性别、学历、年龄阶段等),还有另一种更直接的解读方法——几率比odds ratio。

几率比,顾名思义,即两个几率的比值,那是哪两个几率呢?举个栗子。

我们假设影响企业是否开展技术创新的其中一个解释变量x为企业所处的市场是否成熟(充分竞争),在其他变量条件不变的情况下,当x=0为不成熟市场时,企业开展技术创新的几率为p0/1-p0,当x=1为成熟市场时,企业开展技术创新的几率为p1/1-p1,倘若x增加1单位,也即企业所处的市场由不成熟市场转变为成熟市场,我们将这两种市场下企业开展技术创新的几率进行一场PK,此时数学运算的奥妙就发生了:

可以看到,成熟市场下企业开展技术创新的几率与不成熟市场下企业技术创新的几率的比值——几率比,恰好等于e^β。因此,我们就有了另一种解读方式:当其他变量保持不变时,分类变量x增加1单位,即x的取值从参照类(x=0)变化到目标类(x=1)时,目标类发生y的几率是参照类发生y的几率的e^β倍,y发生的几率将变化|e^β-1|×100%。

在上例中,回归结果即可解读为:在其他条件不变的情况下,企业在成熟市场开展技术创新的几率是在不成熟市场的e^β倍。或者,若β大于0:当企业所处的市场由不成熟转为成熟时,企业开展技术创新的几率将增加(e^β-1)×100%;若β小于0:当企业所处的市场由不成熟转为成熟时,企业开展技术创新的几率将降低(1-e^β)×100%。

03 法宝三:边际效应

以上两种方法就是Logit模型胜于Probit模型的系数可解读性优势,除此之外,两个模型共通的解释方式就是通过边际效应来解读。

对于连续型自变量,边际效应的本质就是求偏导,根据链式法则:

由偏导结果可以看出,Logit模型和Probit模型的边际效应都不是常数,且是随着解释变量x而变化的,因此,对于边际效应的估计也就和解释变量x的大小脱不了干系,常用的边际效应往往要从自变量x上做文章:

1-平均边际效应

2-在样本均值处x=mean(x)的边际效应

3-在某个代表值处x=x0的边际效应

当我们限定了x,就可以得到在该条件下确定的边际效应。软件可以直接帮我们运算输出边际效应的大小,此时的结果解读只需在一般的边际效应的基础上,强调是哪种边际效应:在其他变量保持不变的情况下,x每增加1单位,y发生的概率平均变化多少多少;或者,在样本均值处/某个代表值处,x每增加1单位,y发生的概率将变化多少多少。

对于离散型自变量,边际效应本质上则是目标类x=0和参考类x=1两者对应y发生概率的差,此时对0-1变量取均值或者单独取某个代表值没有任何意义,所以一般情况下是直接对每个样本观测值的边际效应进行简单的算术平均,用“平均边际效应”进行结果的解读。

案例代码及结果展示

下面主要使用Stata和R语言两款软件的官方案例数据,对二元Logit模型的实现和结果进行展示,感兴趣的同学可以运用上面的3种解读方式,对以下案例结果进行解读。

stata. webuse nhanes2d . sum highbp height weight age female //数据的基本特征 Variable | Obs Mean Std. dev. Min Max -------------+--------------------------------------------------------- highbp | 10,351 .4227611 .494022 0 1 height | 10,351 167.6509 9.655916 135.5 200 weight | 10,351 71.89752 15.35642 30.84 175.88 age | 10,351 47.57965 17.21483 20 74 female | 10,351 .5251667 .4993904 0 1 . logit highbp height weight age female, r //构建二元Logit模型,r表示使用普通的稳健标准误 Iteration 0: log pseudolikelihood = -7050.7655 Iteration 1: log pseudolikelihood = -5853.749 Iteration 2: log pseudolikelihood = -5839.6214 Iteration 3: log pseudolikelihood = -5839.5795 Iteration 4: log pseudolikelihood = -5839.5795 Logistic regression Number of obs = 10,351 Wald chi2(4) = 1845.12 Prob > chi2 = 0.0000 Log pseudolikelihood = -5839.5795 Pseudo R2 = 0.1718 ------------------------------------------------------------------------------ | Robust highbp | Coefficient std. err. z P>|z| [95% conf. interval] -------------+---------------------------------------------------------------- height | -.0355632 .003729 -9.54 0.000 -.0428719 -.0282545 weight | .0499966 .001855 26.95 0.000 .0463608 .0536324 age | .0469231 .0014459 32.45 0.000 .0440893 .049757 female | -.3752472 .0640506 -5.86 0.000 -.5007841 -.2497104 _cons | -.074346 .6311876 -0.12 0.906 -1.311451 1.162759 ------------------------------------------------------------------------------ . logit highbp height weight age female, r or //or表示显示几率比(odds ratio),而不显示回归系数β Iteration 0: log pseudolikelihood = -7050.7655 Iteration 1: log pseudolikelihood = -5853.749 Iteration 2: log pseudolikelihood = -5839.6214 Iteration 3: log pseudolikelihood = -5839.5795 Iteration 4: log pseudolikelihood = -5839.5795 Logistic regression Number of obs = 10,351 Wald chi2(4) = 1845.12 Prob > chi2 = 0.0000 Log pseudolikelihood = -5839.5795 Pseudo R2 = 0.1718 ------------------------------------------------------------------------------ | Robust highbp | Odds ratio std. err. z P>|z| [95% conf. interval] -------------+---------------------------------------------------------------- height | .9650617 .0035987 -9.54 0.000 .9580341 .9721409 weight | 1.051268 .0019501 26.95 0.000 1.047452 1.055097 age | 1.048041 .0015153 32.45 0.000 1.045076 1.051016 female | .6871194 .0440104 -5.86 0.000 .6060553 .7790263 _cons | .9283505 .5859633 -0.12 0.906 .2694289 3.198746 ------------------------------------------------------------------------------ Note: _cons estimates baseline odds. . predict p //计算概率预测值p (option pr assumed; Pr(highbp)) . margins, dydx(*) //计算所有解释变量(*)的平均边际效应 Average marginal effects Number of obs = 10,351 Model VCE: Robust Expression: Pr(highbp), predict() dy/dx wrt: height weight age female ------------------------------------------------------------------------------ | Delta-method | dy/dx std. err. z P>|z| [95% conf. interval] -------------+---------------------------------------------------------------- height | -.0068101 .0007018 -9.70 0.000 -.0081855 -.0054347 weight | .009574 .0003091 30.98 0.000 .0089682 .0101797 age | .0089854 .0002253 39.88 0.000 .0085438 .0094271 female | -.0718571 .0122107 -5.88 0.000 -.0957895 -.0479246 ------------------------------------------------------------------------------ . margins, dydx(height) //计算解释变量height的平均边际效应 Average marginal effects Number of obs = 10,351 Model VCE: Robust Expression: Pr(highbp), predict() dy/dx wrt: height ------------------------------------------------------------------------------ | Delta-method | dy/dx std. err. z P>|z| [95% conf. interval] -------------+---------------------------------------------------------------- height | -.0068101 .0007018 -9.70 0.000 -.0081855 -.0054347 ------------------------------------------------------------------------------ . margins, dydx(*) atmeans //计算所有解释变量(*)在样本均值处的边际效应 Conditional marginal effects Number of obs = 10,351 Model VCE: Robust Expression: Pr(highbp), predict() dy/dx wrt: height weight age female At: height = 167.6509 (mean) weight = 71.89752 (mean) age = 47.57965 (mean) female = .5251667 (mean) ------------------------------------------------------------------------------ | Delta-method | dy/dx std. err. z P>|z| [95% conf. interval] -------------+---------------------------------------------------------------- height | -.0085336 .0008944 -9.54 0.000 -.0102866 -.0067806 weight | .0119969 .0004458 26.91 0.000 .0111232 .0128707 age | .0112594 .0003443 32.70 0.000 .0105845 .0119343 female | -.0900425 .0153769 -5.86 0.000 -.1201808 -.0599043 ------------------------------------------------------------------------------ . margins, dydx(*) at (age=35) //计算所有解释变量(*)在年龄为35岁处的平均边际效应 Average marginal effects Number of obs = 10,351 Model VCE: Robust Expression: Pr(highbp), predict() dy/dx wrt: height weight age female At: age = 35 ------------------------------------------------------------------------------ | Delta-method | dy/dx std. err. z P>|z| [95% conf. interval] -------------+---------------------------------------------------------------- height | -.0065589 .0006909 -9.49 0.000 -.007913 -.0052049 weight | .0092209 .0003122 29.54 0.000 .0086091 .0098327 age | .008654 .0002142 40.40 0.000 .0082342 .0090739 female | -.069207 .0119003 -5.82 0.000 -.0925312 -.0458828 ------------------------------------------------------------------------------ R> # 调包 > library(knitr) > library(margins) Warning message: 程辑包‘margins’是用R版本4.2.2 来建造的 > # 导入数据 > infert # 查看数据特征(数据集详细介绍:https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/infert) > print(summary(infert)) education age parity induced case spontaneous stratum 0-5yrs : 12 Min. :21.00 Min. :1.000 Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. : 1.00 6-11yrs:120 1st Qu.:28.00 1st Qu.:1.000 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:21.00 12+ yrs:116 Median :31.00 Median :2.000 Median :0.0000 Median :0.0000 Median :0.0000 Median :42.00 Mean :31.50 Mean :2.093 Mean :0.5726 Mean :0.3347 Mean :0.5766 Mean :41.87 3rd Qu.:35.25 3rd Qu.:3.000 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:62.25 Max. :44.00 Max. :6.000 Max. :2.0000 Max. :1.0000 Max. :2.0000 Max. :83.00 pooled.stratum Min. : 1.00 1st Qu.:19.00 Median :36.00 Mean :33.58 3rd Qu.:48.25 Max. :63.00 > # 构建Logit模型 > lg # 输出回归系数结果 > summary(lg) Call: glm(formula = case ~ age + parity + induced + spontaneous + stratum + pooled.stratum, family = binomial, data = infert) Deviance Residuals: Min 1Q Median 3Q Max -1.8228 -0.7872 -0.4797 0.8690 2.6432 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -2.41394 1.13597 -2.125 0.033587 * age 0.04869 0.03052 1.595 0.110667 parity -0.66191 0.19947 -3.318 0.000906 *** induced 1.35386 0.30868 4.386 1.15e-05 *** spontaneous 2.08742 0.31539 6.619 3.63e-11 *** stratum 0.00822 0.01261 0.652 0.514444 pooled.stratum -0.02814 0.01763 -1.596 0.110557 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for binomial family taken to be 1) Null deviance: 316.17 on 247 degrees of freedom Residual deviance: 256.76 on 241 degrees of freedom AIC: 270.76 Number of Fisher Scoring iterations: 4 > # 输出几率比OR值 > print(exp(lg$coefficients)) (Intercept) age parity induced spontaneous stratum pooled.stratum 0.08946226 1.04989645 0.51586482 3.87233741 8.06409357 1.00825383 0.97225508 > # 输出平均边际效应 > print(summary(margins(lg))) factor AME SE z p lower upper age 0.0084 0.0052 1.6239 0.1044 -0.0017 0.0185 induced 0.2330 0.0461 5.0578 0.0000 0.1427 0.3233 parity -0.1139 0.0317 -3.5896 0.0003 -0.1761 -0.0517 pooled.stratum -0.0048 0.0030 -1.6220 0.1048 -0.0107 0.0010 spontaneous 0.3593 0.0344 10.4557 0.0000 0.2919 0.4266 stratum 0.0014 0.0022 0.6535 0.5135 -0.0028 0.0057

最后,有个趣味思考——Logit模型和Logistic模型是一个模型吗?

闭着眼睛回忆一下Logistic模型,两者长得好像不一样?!

实际上,两者本质是同一模型,只不过函数表达方式不一样罢了。我们对Logit模型两边求e次方的指数运算,再通过移项得出的概率P的函数表达式,就是Logistic模型本尊:)

本篇主要讲,若对感兴趣,欢迎点赞点关注,关注人数多的话我们再单独出一篇来讲解,那么感谢收看,我们下期再见:-)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3