近期收到用户的提问,为什么 MSTATA 软件的很多功能模块中,都在 UI 界面中禁止放入水平数>20的分类变量进入回归模型。现在解释和科普如下:
任何软件都没有禁止水平数>20的分类变量进入模型,但 MSTATA 确实禁止了
原因是MSTATA的适用对象很多都不是成熟的统计人员,更多的是临床业余爱好者,先说说为什么咱们的数据中会有水平数很多的分类变量吧:
a. 最多的场景,这并不是一个分类变量,而是一个连续性变量,例如血压值,在用户使用.xlsx文件时,由于各种原因,在 excel 中设置的是文本,text,导致导入后变成了一个character文本变量,尽管 MSTATA 中反复提示,需要将相应的变量类型重新正确设置,但是很多用户还是直接忽视。因此变成了一个水平数很多的分类变量,这样进入模型,得出的结果会误导用户,因此我们直接做了禁止。
b. 当分类变量水平数很多时,例如>20, 这时候我们通常并不关心亚组之间的比较了,也就是说,这样的变量往往不是研究关注的因子,通常只是作为协变量进行调整。例如多中心临床试验中,有100家医院,这时候,医院就是一个水平数很多的分类变量,但我们只关注试验组和对照组哪个好,并不关心哪家医院的疗效更好,我们不想比较医院之间的疗效差别。
但是我们更关心医院这个因素,有没有对试验组和对照组的疗效比较产生作用,众所周知,每家医院的患者特征,医疗水平都有不同,是否会对两组疗效的方向和大小产生作用,这个是要控制的。
我们并不想让用户直接把这样的变量放进回归模型,因此我们做了禁止,这是 MSTATA 的自身定位决定的。SPSS 和 R 等统计软件能够无差别的让用户做任何分析,而 MSTATA 不是这样的统计软件,我们更需要把临床研究的理念贯穿到软件中,潜移默化的防止用户用错统计方法,这也是MSTATA存在的价值之一。
那么,水平数很多的分类变量怎么放入模型呢?我们建议使用混和效应模型。
在实践中,我们经常遇到分类变量,如性别、地区、品牌等。当我们需要将这些分类变量纳入模型时,一个常用的技巧是使用哑变量(又称“虚拟变量”)。但是,当分类变量的水平数目过多,特别是超过20时,直接使用哑变量放入普通的回归模型可能并不是一个好的选择(前提是我们并不关心这些亚组之间的互相比较)。这时,混合效应模型提供了一个更优雅的解决方案。下面我们来探讨原因:
参数估计和稳定性问题:当一个分类变量有大量的水平时,为每个水平设置一个哑变量会产生大量的参数。这使得模型过于复杂,容易出现过拟合,尤其是当某些水平的观测数很少时。这些少数的观测会导致参数估计不稳定,使得模型的泛化能力下降。
计算复杂度:大量的哑变量将增加模型的计算复杂度。这不仅增加了拟合模型的时间,也可能在求解过程中遇到困难。
结果解释:大量的哑变量会使得模型结果难以解释。尤其是当我们希望了解某个具体水平与其他水平之间的差异时,这种差异可能会因为过多的参数而变得模糊不清。
那么,如何处理这种情况呢?答案是使用混合效应模型。
混合效应模型是线性模型的一种扩展,它可以处理固定效应和随机效应。当我们面对大量水平的分类变量时,可以考虑将其视为随机效应。这种方式允许我们为每个水平估计一个随机偏差,而不是一个固定的参数。这有几个优点:
参数简化:随机效应模型不需要为每个水平估计一个固定的参数,而是估计一个整体的方差。这大大减少了模型的参数数量。
灵活性:混合效应模型可以同时处理固定效应和随机效应,为研究者提供了一个灵活的框架来探讨数据中的不同效应。
具体操作:
进入www.mstata.com 左侧选MSTATA,选以统计学方法分类 - 混和效应模型 - 广义混和效应模型:
在这个例子中,我们把 hospital 作为随机效应放入了模型,这是一个比较合适的选择。
当然,如果您的研究目的是要比较哪家医院疗效好,这就是另一回事了,就要放入固定效应了。不过,很少有需要比较100家医院互相之间哪家好的情况出现。如果真有这样的需求,可能也不一定要用普通回归分析来完成,有很多其他的排序类的现代统计学方法可以采用。