6.4 二分类资料的Logistic回归分析

最后更新:2024-11-20

Logistic回归分析以计数资料为应变量($Y$),研究一个或多个自变量与结局$Y$之间的因果关系。

若$Y$为二分类变量(如糖尿病的发病与未发病,等等),使用数字1编码阳性结局,如发病,0编码阴性结局(对应未发病),$\pi$ 为 $y=1$的概率,则Logistic回归模型可表示为: $$ ln( \frac{\pi}{1-\pi}) = \beta_0 + \beta_1X_1 + \cdots + \beta_kX_k $$

Logistic回归模型与一般线性模型的区别,是对结局变量进行了logit变换: $$ logit(\pi) = ln( \frac{\pi}{1-\pi}) $$ 并用这个链接函数$logit(\pi)$(而不是直接使用$\pi$的对数值)与各自变量建立线性关系,因此,它是一种广义线性模型(Generalized Linear Model,GLEM)。

应用场景

一个应变量为计数资料(常用二分类,也可以是多分类),多个自变量(不限制资料类型),研究应变量$Y$与自变量之间的因果关系,从而确定自变量对应变量有无影响及影响的程度。

前提条件

  1. 观察值(observations)之间相互独立
  2. 链接函数($logit(\pi)$)与各自变量之间具有线性关系
  3. 各自变量之间相关性不强(即不存在严重的多重共线性问题)

另外,进行logistic回归分析,通常所需的样本量较大

【实例】冠状动脉重度狭窄的危险因素分析

我们使用杜克大学心血管疾病数据库的一个公开数据集(ACATH,由范德堡大学生物统计学系的 Frank Harrell 慷慨提供),对冠状动脉重度狭窄(定义为至少一条重要的冠状动脉狭窄程度 $\ge 75 \% $)的危险因素,如性别、年龄、胸痛持续时间、胆固醇水平等进行分析。

剔除原数据集中存在缺失记录的观察值,最终的数据集包含2258条记录,如下图所示:

img

其中的变量:

  • sex:性别,1示female,0示male
  • age:年龄
  • dur:胸痛持续时间
  • choleste:胆固醇水平
  • sigdz:结局变量,1表示冠状动脉严重狭窄,即冠状动脉严重狭窄,即至少一条重要的冠状动脉狭窄程度 $\ge 75% $

注意:这个数据集收集的,是因胸痛而转诊到杜克大学医学中心的患者,(样本中)冠脉重度狭窄的发生率很高,但这个发生率,不能代表一般人群的冠脉重度狭窄的发生率,因此,基于此数据集进行的分析,无论是否剔除缺失数据,结论均不能直接推论到一般人群。

1、Logistic回归分析操作

选择回归分析中的二分类Logistic回归:

img

应变量填入dependent列表,将自变量全部放入Covariates列表中,并设置自变量中的分类变量

img

这里只有性别是二分类变量,所以只需将sex放入Categorical Covariates列表中。

需要注意的是:在对话框的底部,有一个Reference Category的设置选项,默认是选定Last,意为:以性别中的最后一个编码值,也就是最大值(1)为参照,计算0 vs 1(也即 男 vs 女)的OR值,如果我们选择了First(必须点击Change按钮使设置生效),则以0为参照,计算1 vs 0,即女 vs 男的OR值,相同情况下,这两个OR值是倒数的关系。

设置好自变量,就可以让软件输出最终的分析结果了,如下:

2、结果的解读

(1)模型的估计结果(分析结果1)

img

从模型的估计与推断结果看,性别、年龄与胆固醇水平均是冠状动脉重度狭窄的影响因素,如性别(男 vs 女),$OR=8.18, P \lt 0.001$,表明胸痛患者中,男性发生冠脉重度狭窄的风险远高于女性

注:

OR,Odds Ratio,比值比或称优势比,其计算方法,对于以下资料(四格表):

重度狭窄 无重度狭窄
男性 1219(a) 350(b)
女性 271(c) 481(d)

OR定义为 $\frac{a/b}{c/d}$,如果男性与女性人群中,重度狭窄的发生率均很低(即a<<b,c<<d),那么男性与女性重度狭窄的相对风险RR(Relative Risk,定义为$\frac{a/(a+b)}{c/(c+d)}$),可近似为OR,也就是在此情况下,我们可以认为OR就是RR,OR值就是不同性别患者发生冠脉重度狭窄的相对风险。

而对于重度狭窄发生率较高的情形,OR与RR相差较多,不能做近似处理,但OR>1者则必有RR>1,OR<1者则RR<1,两者意义相同;如本例样本数据,不考虑其它因素的影响,男性中冠脉重度狭窄者为77.7%,女性患者中冠脉重度狭窄者为39.3%($\chi^2$检验显示不同性别的发生率有差异);根据上述定义,$RR_{男 \text{vs} 女}=1.98$,$OR_{男 \text{vs} 女}=5.37$,两者相差较大,但均说明男性患者中冠脉重度狭窄的发生率较女性为高,即性别是结局(冠脉重度狭窄)的一个影响因素。

对于年龄和胆固醇这两个计量资料,我们未进行等级化编码,所以其OR值(1.076,1.009)就表示年龄或胆固醇每变化(增加)1个单位,结局的变化情况:

  • 年龄每增加1岁,冠脉重度狭窄的发生率就会增加一点点(OR值=1.076,RR值比1.076低但一定>1)

  • 胆固醇增加1个单位,冠脉重度狭窄的发生率就会增加一点点(OR值=1.009,RR值比1.009更低但一定>1)

此时我们的结论是确定的:年龄的增长以及胆固醇水平的升高,都将导致冠脉重度狭窄的发生率升高,因此年龄与胆固醇水平是冠脉重度狭窄的影响因素

若将年龄和胆固醇水平转换为计数资料,如变换标准为:年龄以50岁为界,$\ge 50$者编码为1,$\lt 50$者编码为0;胆固醇水平以240为界,$\ge 240$者编码为1,$\lt 240$者编码为0;在Logistic回归模型中纳入性别、年龄(是否大于50岁)与胆固醇水平(是否为高胆固醇)这3个二分类资料(设置如下):

image-20250106155058619

可以得到如下的回归方程:

image-20250106155349707

其中,年龄(是否大于50岁) 以及胆固醇水平(是否为高胆固醇)的OR值均小于1,为了与变换之前保持一致,我们可以限定OR值计算时的分子与分母

image-20250106161207728

因为年龄$\ge 50$者编码为1,$\lt 50$者编码为0;胆固醇水平$\ge 240$者编码为1,$\lt 240$者编码为0,将Reference Category设定为First(需要点击上面的Change按钮使设定生效)以后,计算OR值就以编码中较小的值为参照,也就是以0所代表的分类为分母,得到的OR值就是$OR_{年龄:1 \text{vs} 0}$以及$OR_{胆固醇:1 \text{vs} 0}$ (分析结果二):

image-20250106162213104

我们的推断:

  • 胸痛患者中,男性冠脉重度狭窄的风险远高于女性(OR=7.45,P<0.001);
  • 胸痛患者中,年龄在50岁以上(含)者,冠脉重度狭窄的风险高于50岁以下者(OR=2.69,P<0.001);
  • 胸痛患者中,高胆固醇水平(定义为$\ge 240\text{mg/dL}$)者,冠脉重度狭窄的风险高于低胆固醇水平者(OR=2.46,P<0.001);

通过以上的分析,我们可以看到,在Logistic回归分析中,主要是以OR值来解释自变量对于应变量的影响,而OR的计算,对于计数资料,需要明确谁在分母位置,通过Reference Category的设置,可以设定编码中的最小值(设置为First)为参照即分母,也可以设定编码中的最大值(设置为Last)为分母,同一样本数据,不同的设置,得到的OR值互为例数;对于计量资料,OR值就是每增加1个单位风险的变化情况,比如年龄,如果不做变换,其OR值为1.076(第1个分析中),为便于理解,该OR值可以视为如下计算过程取得:

有些患者年龄为$x+1$岁,与那些年龄为$x$岁的患者相比,冠脉重度狭窄的风险是升高了还是降低了?

重度狭窄 无重度狭窄
$x+1$ a b
$x$ c c

通过$OR=\frac{a/b}{c/d}$ 即可反映,而此OR与模型中年龄的OR值意义完全相同。

(2)关于模型中自变量、应变量的编码

应变量的编码:

使用SPSS进行Logistic回归分析,在输出结果中,有两个表格表示分别表示应变量和自变量中计数资料的编码

img

这个表格中,Original Value是应变量的原始值,本例中采用1(冠脉重度狭窄为)和0(冠脉重度狭窄为)进行编码,Internal Value是SPSS软件进行Logistic回归时,对应变量进行建模的标识,在进行Logit变换时,以Internal Value=1的分类为分子: $$ logit( \pi_{y=1} ) = ln(\frac{ \pi_{y=1} }{1- \pi_{y=1}}) $$ 也就是实际的Logistic回归方程为: $$ ln(\frac{ \pi_{是} }{1- \pi_{是}}) = \beta_0 + \beta_1X_1 + \cdots + \beta_kX_k $$ 其中$\pi_{是}$ 为冠脉严重狭窄的概率

如果将应变量的编码方式稍改一下:仍用1表示冠脉重度狭窄,而用2表示冠脉无重度狭窄,样本中的其它数据不变,则Dependent Variable Encoding表如下结果:

image-20250106175411509

在SPSS进行Logistic回归分析时,logit变换仍以Internal Value=1的分类为分子,即:$logit( \pi_{y=1} ) = ln(\frac{ \pi_{y=1} }{1- \pi_{y=1}})$,而此时等于1的分类,对应的原始数据为“否”(编码为2),实际的Logistic回归方程为: $$ ln(\frac{ \pi_{否} }{1- \pi_{否}}) = \beta_0 + \beta_1X_1 + \cdots + \beta_kX_k $$ 其中$\pi_{否}$ 为冠脉不是严重狭窄的概率,结果回归方程就变成了:

image-20250106180334741

此结果与前面的分析结果1相比,回归系数互为相反数,而OR值互为倒数,在自变量(及编码)未变化的情况下,这种编码方式得到的结果,进行解释就要小心,不能因为年龄的OR值0.93小于1,就说随年龄增加,冠脉严重狭窄的风险在降低,实际上这个方程拟合的结果中:年龄每增加1岁,冠脉不是严重狭窄的概率就会降低一点点,也就是年龄增加冠脉严重狭窄的风险会上升。

为了避免出现上述拟合阴性事件的问题(导致结果的解释很别扭),我们一般使用1编码阳性事件,而用0编码阴性事件,一个原则:阳性事件的编码值要大于阴性事件的编码值,这样就可以拟合阳性事件的Logistic回归方程,便于我们解释各自变量对结局的影响。

自变量的编码

对于自变量的编码(当然只有计数资料存在编码问题),SPSS软件会自动的将设置为分类变量的自变量,编码为1个或多个哑变量(Dummy Variable),这些哑变量以括号结尾,括号中的数字表示第几个哑变量。哑变量的个数是分类数减1,如二分类资料会生成1个哑变量,而3分类资料会生成2个哑变量,等等。

比如:使用200、240这两个界值,将胆固醇水平的原始值,转换为3分类的等级资料:$\le 200 \text{mg/dL}$者编码为1,$\le 240 \text{mg/dL} 且 \gt 200 \text{mg/dL}$者编码为2,$\gt 240 \text{mg/dL}$者编码为3,并使用编码1对应的分类为参照(设置方法同前),SPSS软件就会自动生成2个哑变量,如下表:

image-20250107070214346

Logistic回归分析中,所有设置为分类变量的自变量,哑变量编码结果,全部放置在Category Variable Codings(分类变量编码)表中,Parameter Coding中带有括号的列,就是哑变量的编码结果,与Logistic回归方程中结尾带有括号的分类变量一一对应,如下图(分析结果3):

image-20250107072419209

以胆固醇水平为例:

Logistic回归方程中,3分类的胆固醇水平,共生成两个哑变量

胆固醇水平(1)和胆固醇水平(2),对应的OR值分别为1.264和2.757,这两个OR值,都是以胆固醇水平等级1对应的分类(也就是胆固醇水平 $\le 200 \text{mg/dL}$者)为参照,即:

  • 胆固醇水平(1):胆固醇水平等级2和等级1相比(胆固醇水平 $\le 240 \text{mg/dL} 且 \gt 200 \text{mg/dL}$者 vs 胆固醇水平 $\le 200 \text{mg/dL}$者 ),OR=1.264(P=0.055),显示冠脉重度狭窄的风险增加但无统计学意义;
  • 胆固醇水平(2):胆固醇水平等级3和等级1相比(胆固醇水平 $\gt 240 \text{mg/dL}$者 vs 胆固醇水平 $\le 200 \text{mg/dL}$者 ),OR=2.757,冠脉重度狭窄的风险增加(P<0.001);

如何确定计算OR时的分母(即参照)

根据Category Variable Codings(分类变量编码)表,看Parameter Coding(带括号的,也就是哑变量)那几列

每个分类的自变量,有且仅有1行,Parameter Coding中的哑变量编码值全部为0,比如胆固醇水平,等级1这1行,Parameter Coding中的哑变量编码值全部为0,则等级1就是参照,就算OR值都以等级1为参照;

同理:年龄这个分类变量(二分类资料,编码为1个哑变量),Parameter Coding中的哑变量编码值为0的那一行,是年龄$\ge 50$ 者,故计算出的OR值是年龄小于50者与年龄≥50者对比;

而性别,Parameter Coding中的哑变量编码值为0的那一行对应的是女性(是),故计算的OR值,是男性与女性相比,风险的变化情况。

如何确定计算OR时的分子

根据Parameter Coding中的哑变量编码值为1的那1行来确定

胆固醇水平(1)这个哑变量,我们已经确定OR的分母是胆固醇等级1,而分子,就是Parameter Coding中(1)取值1的那1行,即胆固醇等级2;胆固醇水平(2)这个哑变量,就是Parameter Coding中(2)取值1的那1行,即胆固醇等级3,其它的分类变量以此类推:

img

正确的认识OR值的分子与分母,才能正确地解释OR的实际含义,否则就很容易出错。

这一节内容有点偏多,先写到这。本节,我们了解了Logistic回归如何操作,如何利用OR值来解释自变量对结局的影响,而OR值的计算,受Logistic回归拟合的事件,以及自变量中分类变量如何编码的影响,故重点介绍了应变量如何编码、自变量如何编码,莫要搞错,搞错出笑话。

其他内容,如Logistic回归模型的评价、模型的诊断等,我们将放在另一节中进行介绍。

© By StatX..