大家好,我是Epione,又来到“统计学逻辑”版块。最近经常收到小伙伴的提问,说自己在跑了Logistic回归或者Cox回归模型之后,软件给出的结果看着就像错的!!
我一开始甚是欣喜,难道小伙伴们都练就了“火眼金睛”的本领?已经掌握了审稿人的本事,一眼能看出结果对不对了?
然后我看了一下,被他判定为“不对”的结果。基本上有一个共同的特点:OR值过大 or 过小 or 区间无法估计,比如:
(图1OR值异常大,无统计学意义,且区间异常宽)
(图2. OR值偏大,有统计学意义,且区间偏宽)
(图3. OR过小,95%CI上限估计不出来)
这种情况乍眼一看,就觉得是有问题的(坚信你的感觉,你感觉的是对的),但是又不知道问题出在哪。
好的,我们直接上干货,出现这种情况的常见问题可能是以下这些,大家逐条排除就行了:
(1)如果自变量是连续变量,如图1,可能情况是:这个连续变量存在一个“界值”,大于/小于这个界值的人,大概率出现阳性结局。
换句话说:出现阳性结局和不出现阳性结局的两类人中,该自变量(比如年龄)取值重叠的部分较少。
我们可以通过对该连续变量的“描述”,来看一下是不是这种情况。
比如上图1的数据,我们在SPSS中可以选择“分析——描述统计——探索”选项:
然后在“因变量列表”中放入想探索的变量——年龄,“因子列表”中把结局放进去,因为我们想看到在结局发生与否的两组人的年龄分布是否存在差异:
我们可以在“图”这个选项中勾选“直方图”,这样可以使数据呈现更加直观:
以下是结果(上图为结局等于0,下图为结局等于1):
我们可以再结合百分位统计表来一起看:
聪明的你一定看出来了,当结局为0时,大部分的研究对象年龄都比较小,最大95%分位数为60岁
而当结局为1时,大部分的研究对象年龄都比较大,最小5%分位数为62岁。
因此年龄是结局的重重重要影响因素啊!所以OR=7x107 完全有可能嘛!
但是我们仍然怀疑是分析结果出了问题,是因为临床知识告诉我们,很少有这么绝对的“影响因素”。
所以这个问题往往出在“设计”上,而不是数据本身。
比如说,这时候的结局outcome=1表示的是“老龄人”,而=0表示“非老年人”,那就意味着这个分析的目的是:年龄可以预测某人是否为老龄人!这不是天大的笑话吗?
在我们实际工作中,由于数据收集的“选择偏倚”,也有可能出现这种情况。
比如我们病例组全收集的老年人,而对照组都收集的年轻人,也会出现上面这种情况。
因此,虽然各种回归模型可以在一定程度上“调整”混杂因素,但是如果设计阶段两组的偏差较大,模型对此也“无能为力”了,因为报告的结果是“异常”的。
(2)如果自变量是分类变量,首先看一下该分类变量的频数分布是否均衡。
如果分类变量的某个取值频数非常少,就有可能使得这个取值的OR/HR值估计出现异常。
比如上图3的数据,我们可以看一下new_variate这个变量的频数分布。可以在SPSS中“分析——描述统计——频率”。
这时候统计的结果可以看出,该变量取值为1和2时,分别都只有1例。这是导致OR值估计异常的重要原因。
当然,只有1例是我们模拟的特殊情况。现实生活中出现可能更多的是不同赋值情况下,频数分布差距很大,尤其要注意某些取值下频数为个位数的,然后导致这个取值分类下的OR值估计区间特别宽。
***如果怀疑自己的OR值区间过宽,也可以看一下这个变量的分类频数,是不是某个取值下“很少”
(3)如果自变量是分类变量,频数分布也正常,再看看该变量与结局的关系是否存在“极小单元格”。
比如上面的图2的结果。我们先统计一下“性别”这个变量的频数分布:
比例上是28% vs 71%,这个比例不算偏!而且男性的例数在1008例,所以排除了上面第2种情况。
我们再来看一下 性别和结局 的交叉表。可以通过“分析——描述统计——交叉表”
行和列分别放上我们要探索的变量:
我们来简单看一下“四格表”的结果:
这个结果大家应该能看懂,就是在男性中,不发生结局的只有2人;在女性中,发生结局的只有2人。这是导致OR值异常的重要原因。
一般情况下,这种四格表,或者RxC表(取决于你的变量是几分类的)中,有一个单元格数量异常小,频数是个位数或者等于0,那么出现“异常”结果的可能性就很大。
(4)如果上面的操作都不能排除“故障”,你需要检查一下你的结局变量频数分布。
也就是说如果你的结局变量(二分类)中有一个取值的频数很少,无论计算哪个变量的OR值,都有可能出现“奇异”的结果。
比如你的病例对照研究,对照组才2人,很明显这是不能进行分析的。
同理,在预后研究中,在200个随访对象中,如果只有2例发生了结局,这样的数据也不建议开展分析,也很容易出现“异常”结果。
一般研究设计的研究,不会出现结局变量全是0,或者全是1的情况。但是在分层分析,尤其是多重分层中,就不一定了。
比如下表,先进行了年龄分层,再进行性别分层,这种选择几轮之后的人群,很可能出现上面提到的(1)~(4)的情况,从而导致在这个层中的OR值“异常”。
(5)变量之间的共线性如果以上方法都试过了,没有找到原因,那很可能就是由于变量之间的共线性导致的结果异常。
所谓的“共线性”,指的是一个模型中的几个自变量之间存在很强的“相关性”。
其实变量的共线性问题很难导致“明显”的结局异常,往往是“无形中”影响了结果,比如使原本无意义的OR值变成有统计学意义,或者增大/减小OR值。
除非你使用一些检验方法,否则可能并不能肉眼判断他的共线性。
只有“共线性”很强的时候,才可能会导致结局明显异常。
比如,你询问了一次患者的年龄(age),然后怀疑他自我报告的不是周岁,于是按照出生日期给他重新了一个年龄(age2)。
如果你分别放这两个变量进入模型,结局是没什么问题的:
但是如果同时将这2个变量放入模型,结果出现:
两个“强相关”的数据,导致“奇异”结果的出现。这时候是可以通过逐个剔除变量,来找到“真凶”的。
总结上面提出了5种可能导致OR值结果“异常”的情况。在实际数据分析中,如果发现了上面的情况存在,该怎么办呢?这边提供几个思路:
(1)剔除极端个案。比如男性中出现阳性结果的很少,那干脆我们这个研究就只研究女性,这样性别就不是一个要控制的混杂因素了。
(2)扩大样本量。这是一个好方法,但是却很难实现。一些“极端个案”在扩大样本量之后,总是能找到和他类似的个案,只要样本足够大,频数上来了,就不极端了。此外,一些多分类变量某个类别的频数很少,扩大样本量之后,这个频数也会增加。
(3)合并多分类选项。比如是否满意这个选项,原问卷分为:非常不满意、不满意、中立、基本满意、非常满意;在分析的时候如果发现频数的分布很偏,选择“非常不满意”的只有2个人。可以考虑划分为三分类:不满意、中立、满意。
(4)找到共线性的两个变量,踢掉一个变量,不要放入模型中。
好啦,今天Epione老师对这个问题的解答就说到这啦。希望对大家有启发。
要记住,有统计学问题怎么办?“君莲数据库”找Epione!大家有什么问题,都可以在本篇文章下留言,或许下一篇文章就可以回答你们的问题!
我们下期见~
END
撰文Epione老师
审核丨小张老师
责编丨小张老师
往期推荐
号外号外,针对0基础小白的21天沉浸式影像组学讲席营要来了,就在8月31号,开营在即,还不快上车?
继续阅读
阅读原文