蓝精灵村子新开了一家火锅店,原来格格巫在自动售货机上挣了一笔之后,又有了开餐馆的想法了,他把村子外面流行的火锅引入蓝精灵村子,没想到生意很火爆,蓝精灵们经常要排很长的队才能吃上格格巫家的火锅。看着自家餐馆门口长长的队伍,队伍里蓝精灵吃货们既饥渴又不耐烦的眼神,格格巫心里又欣喜,又担忧。他寻思这队伍太长了会不会影响了顾客们对就餐经历的评价,于是琢磨着想研究一下排队等待时间和客户满意度之间的关系。他在用餐结束之后发出满意度问卷,同时记录下每桌客人的等待时间和每桌客人的人数。数据搜集完毕之后,格格巫便请蓝精灵村的统计小天才聪聪来帮忙分析数据。
聪聪先从整体上分析了一下要解决的问题,他要研究的因变量是客户满意度,属于定序变量(非常满意>满意>一般>不满意>非常不满意),正好可以用上最近新学的定序回归模型。至于模型的自变量,除了排队的时间之外,还应该考虑客人是一个人还是和别人一块儿来吃火锅的。毕竟,如果是一个人的话,也许对等待的忍耐程度会更低一些。
有了大致的思路之后,聪聪就把数据整理了一下。由于聪聪关心的是一个因变量、两个自变量,因此数据集大概是下面这样的(仅列出头四个数据点):
表 1 本集定序模型用到的数据集举例
接下来,我们用定序回归模型来分析一下,等待时间和单人就餐这两个因素是如何影响就餐满意度的。依照上一集《只问方向,无问远近,定序回归的执念你懂吗?》讲解过的模型形式,我们可以得到下面的模型:
要记住,上面的 Py≤非常不满意、Py≤不满意 指的是累积概率,即因变量顾客满意度低于或等于某个特定级别(如「不满意」)的概率。
我们把等待时间(连续变量)作为因变量 x1,把单人就餐(二分类变量,1 代表是,0 代表不是)作为 x2,利用统计软件进行定序回归模型拟合,就可以拟合出模型中的参数(各回归系数和截距)的极大似然估计值。这里,我们使用的是免费开源软件 R 里面的 ordinal 程序包中的 clm 函数进行拟合,它输出的结果如下(其他统计软件的输出形式也是大同小异的):
图 1 R clm 函数输出的定序回归模型拟合结果。红框部分为我们对最关心的回归系数估计,结果的翻译对应表 2。蓝框部分对应的是截距的估计结果,大部分时候截距的结果对结论并不是很重要。
表 2 回归系数拟合结果小结,我们在论文或者报告中汇报模型结果的时候需要给出表中的值,结果展示的形式可以参考投稿杂志的要求,但是一般都要包括估计值、标准误差以及 p 值 。
从上面的结果可以看出,等待时间和是否是单人就餐这两个因素都对满意度有显著影响。我们还观察到回归系数都是负的,说明等待时间越长或者是单人就餐都会显著地减低吃火锅的满意度。一般统计软件除了输出自变量回归系数的信息之外,还会显示截距也就是 β非常不满意 等的估计值,在定序回归里面,截距有时也被称为阈值(threshold)或分界点(cut point)。
除了定性地知道自变量是否对因变量有显著影响及其方向,我们还想定量地知道等待时间和单人就餐这两个因素会是如何影响吃火锅的满意度的。要想更好地理解回归系数的含义,我们还得回到模型本身:
观察上面式子的左边,我们可以看到定序回归实际上是在预测因变量累积概率的分对数。通过模型拟合得到了回归模型的回归系数(β1,β2)和截距(β非常不满意,β不满意等)之后,我们可以运用下面的关系计算出 Py≤非常不满意、Py≤不满意 等累积概率的预测值:
以上的形式其实与之前讲到的二分类以及多分类逻辑回归是一致的,只不过等式左边的概率不再是 y 属于某一类的概率,而是 y 小于等于某一个等级的概率,也就是 y 的累积概率。
由于因变量和两个自变量之间的关系是非线性的,无法简单地用「等待时间增加 x 分钟,满意度的累积概率会减小 y,这种我们熟悉的线性方式来描述因变量和自变量之间的关系。对于这样的非线性关系,正是因为它比较复杂,数学上最精确的表述也并不一定能让人很容易理解。这时,用数据可视化的方式不仅可以帮助自己更好地理解模型,还能直观有效地将数据建模的结论传达给读者。
我们下面就先聊一下用图来展示定序回归结果的几个要点。在将数据可视化时,咱们首先需要考虑的是 x 轴和 y 轴该是什么。由于我们的目的是展示拟合的模型,y 轴一般就是模型的预测值,在定序回归里就是满意度的累计概率,共有五个:
Py≤非常不满意、Py≤不满意、Py≤一般、Py≤满意、Py≤非常满意
也就是说到时候作出的图会有五条曲线,分别对应上面的五个累积概率。顺道一提的是,非常满意是可能出现的最高等级,所以因变量小于等于非常满意的概率为总是 1,即 Py≤非常满意=1。
说完了 y 轴,再来看看 x 轴。统计模型的目的是定量地解释自变量与因变量之间的关系,既然 y 轴对应的是因变量,那 x 轴自然就得是自变量了。
在这一集讨论的例子里面,有两个自变量,选哪一个作为 x 轴呢?一般会选择连续变量形式的自变量,也就是例子里的等待时间作为 x 轴。这时,剩下来的那个类别变量的自变量该怎么办呢?通常的做法是针对每一个类别作一个图,在这个例子里面,我们针对非单人就餐(左图)以及单人就餐(右图)的情况分别做图。这样得到的图形如下:
图 2 用数据可视化的方法展示满意度和等待时间以及是否单人就餐之间的关系。y 轴是累计概率,x 轴代表等待时间(分钟)。左图是非单人就餐,右图是单人就餐。
首先,我们从上图可以清晰地看到当等待时间增加的时候,满意度小于等于特定值的概率是增加的,也就是说满意度整体是下降的。
另外,由于定序回归模型中的特定假设,上图里面有两个有趣的平移关系。首先,如果我们将每个图里的绿色曲线向右平移适当的量,便能与其它曲线完全重合。这其实是因为曲线的「形状」只和等待时间的回归系数 β1 的取值有关,而在我们的模型里面,不同满意度的累积概率所对应的回归系数 β1 的取值相同,才导致所有的累计概率曲线「形状」相同。
上面提到的这个有意思的平移关系,其实是我们讨论的定序回归模型的一个重要假设,所以这里再啰嗦两句。同一自变量在所有累计概率中的回归系数取值相等,这说明自变量改变一定的值时,「非常满意」的累积概率和「不满意」的累积概率的分对数改变的值是相同的, 这称之为比例优势(Proportional odds)假设,对应的模型也可以称之为「比例优势模型」。
第二个有趣的平移关系是,如果将左图也就是非独自就餐的预测值整体都向左平移
19.9,就能完全与右图重合。对为什么感到好奇的小朋友可以看下面的推导:
这第二个平移关系用人话说就是:从就餐满意程度而言,单人吃火锅等十分钟就餐,和多个人吃火锅等三十分钟就餐,效果是一样的。 而且,在等待相同时间的情况下,单人就餐的满意度整体是小于多个人吃火锅的满意度——看来蓝精灵们也喜欢人多一块吃火锅!
需要注意的是,在这一集的例子里面,我们并没有假设两个自变量之间有交互效应,如果加上交互效应的话,第二层平移关系就不存在了,而第一层的平移关系会保留。
最后,如果我们不仅想知道累积概率,还想知道y取特定满意程度的概率是如何随着自变量的变化而变化的,我们只要将图二稍做变换即可。由累计概率的定义,我们知道:
根据这一关系,我们很快便能将 y 取特定满意程度的概率与自变量的关系绘制出来,如下图:
图 3 用数据可视化的方法展示满意度和等待时间以及是否单人就餐之间的关系。y 轴是 y 取特定满意程度的概率,x 轴代表等待时间(分钟)。左图是非单人就餐,右图是单人就餐。
从上图里面可以清晰地看出,当等待时间增加式,非常满意的概率在逐渐减低,而不满意的概率在逐渐增高。
除了用作图的方法,之前在《逻辑回归的袅娜曲线,你是否会过目难忘?》学到的除四法则也能帮助我们迅速地估计自变量对因变量的影响。除 4 法则是说,在对自变量变化最敏感的区域,自变量每增加一个单位,累计概率变化值约等于回归系数除以 4。在上面的例子里面,等待时间的回归系数是 -0.09,等待时间每增加 10 分钟,P满意度≤a 增加了 0.09×10/4=0.225,这里的 a 可以是任何一个满意程度。也就是说等待时间增加 10 分钟时,对于特定的满意程度,最多有 22.5% 的顾客的满意程度会从高于某个满意程度变成低于这个满意程度。