数据处理最常见的错误没有之一:把数值变量转化为分类变量
我们在处理数字的时候特别喜欢把好好的原始数值高低分上几个组,用著名的生物统计学家Frank Harrell教授的话讲,做这件事等同于在误导读者。
在用医学数据分析问题的时候,我们忍不住把年龄,BMI指数,血糖,等等凡是能贴上标签的都标签化处理,因为我们知道,年龄有婴幼少青中老这样的标签,BMI 有正常和超重等标签,血糖有高和正常这样的标签,于是喜滋滋地拿来用,还觉得是在进行某种数据分析处理,好像这样做既保留了有用信息,又便于理解。事实上真是这样吗?大错特错。
维生素 D 的水平取值是有现成的分类标准的,但这不意味着能在数据处理阶段就把具体数值替换成相应等级。最直观地来看,它导致信息被简化了,也就是原本丰富的信息变简单了。
举一个直观的例子,假如我们简单地认为性别,年龄,血液的维生素 D 水平一起决定了吃钙片长身高的效果。其中年龄和血液维生素 D 都是数值变量。
假设维生素 D 符合正态分布。什么叫正态分布?就是水平最正常的人在中间,这种人占据最大比例,也就是中间那根柱子,越低或越高的人数量越少,从而有一个中间高耸两边低平的形态。如果我们横坐标划分地足够细致,每一个柱子就越来越窄,他们的顶端会连成一条平滑曲线。
或许有的同学不以为然。尤其是,假如在简化过后,依旧能得到显著的结果,好像就说明没问题。实际上,问题很大,它并不是单纯的简化,而是一种错误的引导。
比如曲线上两个蓝色的点,实际水平相差显著,但却落在同一个组,被当做相同值来处理,导致对应的效应相同,即弱化了真实效应。而两个红色的点,实际上距离很近,却落入不同的组,各自的效应差别也被错误地放大了。综合起来,把数值分类处理就是一个自欺欺人的过程。
比如我们前面的例子,表面上还是四项,实际上里面每一个分类都是一项,统计学上这带来的后果是,每一项的系数都要单独计算,增加了过拟合的情况,说人话,就是让这个等式变得复杂之余却没有改善其实际表现。
可是,保留数值变量而不去把他们变成分类变量,就一定正确吗?答案也是不。
比如这个例子中,年龄对结果产生的作用大小就是 b2,它是一个恒定的系数,在这个例子里它应该是负数,因为年龄越大,长高的可能性越小。不管怎样,它是一个常数,意味着在性别和维生素d这两项不变的情况下,每增加一岁,增高效果减少一个b2,实际上是这样恒定的关系吗?肯定不是啊,常理上,如果25岁以后补钙已经完全不能再长高了,即便25岁以前也需要分情况看,不同年龄段对钙片的反应也不同,总之不是一个恒定的关系。
那到底怎么办?说来说去,我们就是要尊重数据背后的专业知识,数字不光是数字,它有所处的学科背景。假设青春期阶段对钙片的治疗反应是恒定的,那么把年龄这一个数值变量的取值范围框定在青春期,这个等式就会更合理。这样一来,相当于把年龄按照生理情况进行分组,而组内保持使用原始的年龄数值。
总结一下,把数值变量处理成分类变量,在绝大部分时候都是错误的数据处理方式。不得不进行的时候,在数据分析的越晚阶段越好。当然,如果用在临床预测模型中,如果模型表现足够好且实用,那么也可以推测能不能分类,以及如何分类更好,这就是用实践来检验咯。