变态导师:告诉我!缺失数据多重插补后你如何逐步回归法筛选预测变量

详情请点击下方:

培训 | 医院回顾性数据分析与预测模型一对一高级学习班,快速掌握R语言分析技巧


这是一个技术难题,不少人在问,因为多重填补后很难直接开展自变量筛选进行处理。

所以作为一名知名“变态”导师的我,给研究生出了一道题目,当缺失数据采用多重填补后,怎么进行逐步回归法筛选自变量呢?


各位用自己的数据真实世界研究或者构建预测模型时,或多或少都会遇到存在缺失值的问题。对于这个问题,网上有大把的教程教你怎么使用多重插补。

但我还没有发现关于插补之后多个插补集如何进行变预测变量(自变量)选择的教程。

这个问题确实难办,难办在插补后各个插补集的预测变量未必一致,如果存在不一致的情况,就很难进入后续的分析流程了。首先想到的一个办法是选取其中一个插补集,以该插补集为准选择预测变量,选择变量的方法根据之前的来就行。

那么是否存在更为科学的办法呢?答案是肯定的。

最近看到一篇名为《Analyzing evidence-based falls prevention data with significant missing information using variable selection after multiple imputation》的文献,其中一段话打开了新世界的大门。

955300ae8ad098ce087f010f4543fd96.png

多重插补变量选择,一致结果!紧接着顺藤摸瓜找到标注的两篇参考文献,分别是《How should variable selection be performed with multiply imputed data》和《Variable selection for multiply-imputed data with application to dioxin exposure study》分别于2008年和2013年发布于同一期刊:《Statistics in Medicine》.

看过这两篇文献以后,发现困扰我的问题,在北京奥运之前就有学者研究过了。

先来第一个,逐步回归法与多重插补联合使用

此处的金标准是基于罗宾规则的框架进行选择,这意味着需要把每一个插补集的模型选择拟合到其他插补集上并进行综合估计,对于大型数据集和多次插补,在计算上可行性较低,最常用的方法是使用完整案例的预测因子,但这产生的偏倚会很大。

3abe3e9861e4584846130611122f1c84.png

c2c0c8dbd69864446d7cd99195721fdc.png

文章重点给出了一些方法,并进行模拟研究,比较哪一种方法和金标准最接近。

为了更好的解释以下的内容,这里举一个小例子:

假设有一个带缺失的数据命名为零,除结局变量以外,有三个纳入的变量分别为A,B,C。在进行插补以前(回归会自动删去有缺失的行,所以此处是分析是完整案例集),采用逐步回归法,发现留下A和B,说明A0和B0是完整案例集的预测因子。

多重插补后形成三个插补集,分别进行逐步回归。在插补集一中,三个都留下了,说明A1,B1,C1是插补集一的预测因子;插补集二中留下A和B,说明A2和B2是插补集二的预测因子;插补集三中留下A和C,,说明A3和C3是插补集三的预测因子。

第一种方法:采用完整案例的预测因子,对应例子为选择变量A和B。

cac168653df009996b7641b83e4a49ad.png

第二种方法:选取一个插补集的预测因子,文章中选用第一个插补集,对应例子为选择变量A,B,C。

4041fab4eefa55190a2c3f7d6ca67e73.png

第三种方法为综合考虑多个插补集的结果选择,第三种方法有三种亚种,3.1乐观估计,3.2中庸估计,3.3悲观估计。

3.1乐观估计的方法是:因子只要存在于任意一个插补集中,就纳入为预测因子。对应例子为选择变量A,B,C。

3.2中庸估计的方法是:存在因子的插补集要在所有插补集中占到一定比例才纳入为预测因子。文章给出的比例为50%,对应例子,A三个插补集都纳入,比例为100%,B和C都是两个插补集纳入,比例为66.7%,所以选择变量A,B,C。

3.3悲观估计的方法是:因子要存在于所有插补集中,才纳入为预测因子。对应例子为,选择变量A。

91c1c7de67b671b6ae7dfb7619ad7382.png

第四种方法为堆叠数据法,把多个插补集合成一个新数据集进行逐步回归,新数据集的样本量为原先的M倍,此处三个插补集就是三倍。样本量变大会带来一个问题,标准误会变小,所以在数据堆叠的同时要进行加权。加权同样有三种方法:

4.1简单粗暴法,权重为1/M。

4.2考虑了总体缺失比例。

4.3考虑了每个变量的缺失比例。

f068d2871b1d1681ddc98080cb34d715.png

下面这张表是模拟研究的结果:

d316b68b80895c58acfb98858f311ff0.png

表格中是百分数,即为各种方法,多次模拟纳入模型的各变量百分比,其中in true model是模拟设定确实是预测因子的,not in true model是模拟设定上就不是预测因子的。

这里的各项方法的变量纳入百分比和RR这一金标准纳入的比例越接近越好。可以看到3.1乐观估计真因子纳入比例高,假因子也高,3.3悲观估计真因子纳入低,假的也低,中庸法主打的就是一个平衡。最终发现堆叠加权方法的第三种和金标准是最为接近的。

-----------------------------手动分割线------------------------------

看完多重插补结合逐步回归法,再简单了解下另一种变量选择方法。

这篇文献是2013年的,文章也提到了之前2008年提出的多重插补结合逐步回归堆叠数据法。

6bc1c05774e248a393be20784270a44e.png

同时,这篇文章提出了多重插补结合lasso回归法。

5022d265be6d2464dfde0e61ab9dcab9.png

这种方法可以简单概括为将不同插补数据集中与同一变量相关的估计回归系数作为一个组,并一起选择或删除整个组。

对此有兴趣的话可以留言,如果感兴趣的人多,再单写一篇讲讲这种方法。


详情请点击下方:

我们提供统计服务了!医院临床数据的统计服务与培训

<think>好的,我现在要解决用户在R语言中使用Box-Cox转换时遇到的一列正数值存在缺失值的问题。首先,我需要回顾一下Box-Cox转换的基本概念和应用条件。Box-Cox转换通常用于稳定方差和使数据更接近正态分布,其公式是$$y(\lambda) = \begin{cases} \frac{y^\lambda - 1}{\lambda} & \text{if } \lambda \neq 0, \\ \ln(y) & \text{if } \lambda = 0. \end{cases}$$[^1] 这里要求数据必须为正数,因为转换涉及对数或幂运算。 用户提到的数据列是正数,但存在缺失值,统计指标显示最小值0.3664,中位数4.8871,均值5.9211。这说明数据可能存在右偏,因为均值大于中位数。处理缺失值是进行Box-Cox转换的前提,否则转换函数可能无处理缺失值而导致错误。 接下来,我需要考虑如何处理缺失值。根据用户提供的引用,R中有多种处理缺失值的方,比如删除记录、用中位数或均值填充,或者使用多重。用户的数据已经是正数,所以可以考虑用中位数填充,因为中位数对异常值不敏感。例如,使用`data$column[is.na(data$column)] <- median(data$column, na.rm=TRUE)`[^2]。或者,使用均值填充,但需要注意如果数据偏态严重,均值可能不太合适。这里用户的数据均值和中位数差距较大,可能右偏,所以中位数可能更合适。 另一种方是使用多重,例如`mice`包,这种方能更好地保留数据的统计特性。用户提到的引用[3]中提到了使用`mice()`进行多重,然后选择后的数据集进行填,比如使用`complete()`函数[^3]。不过,多重可能需要更多的计算资源,但对于小数据集来说可行。 在处理完缺失值后,接下来进行Box-Cox转换。在R中,可以使用`MASS`包中的`boxcox`函数来寻找最优的λ值。需要确保在转换前数据没有缺失值,并且都是正数。用户的数据已经是正数,所以这一步应该没问题。但需要注意,如果填充后的数据中有零或负数,会导致转换失败,但根据用户描述,数据列是正数,填充后的值应该也是正数,尤其是用中位数或均值填充的情况下。 可能的步骤总结: 1. 处理缺失值:使用中位数或均值填充,或者多重。 2. 检查数据是否全为正数。 3. 使用`boxcox`函数确定最佳λ。 4. 应用转换公式,可能需要手动转换,因为`boxcox`可能返回最优λ,但转换需要自己实现,或者使用`caret`包的`BoxCoxTrans`函数。 还需要考虑是否需要先处理数据的偏态,或者转换本身就是为了解决偏态问题。另外,填充缺失值后,是否会影响Box-Cox转换的效果,需要评估填充方的合理性。 可能的问题:用户的数据是否存在其他问题,比如零值?但用户说明是正数列,所以应该没有零。另外,填充后的数据是否会影响转换后的分布,需要检查转换后的正态性是否改善。 因此,具体的处理步骤可能是: - 用中位数填充缺失值。 - 应用Box-Cox转换找到λ,并转换数据。 - 验证转换后的数据是否符合正态性假设。 最后,需要确保代码示例正确,包括处理缺失值和Box-Cox转换的部分,同时引用用户提供的参考资料中的方。</think>### 解答:R语言中Box-Cox转换时正数列缺失值处理方 #### 1. 缺失值处理 Box-Cox转换要求数据为**正数且无缺失值**。针对你的数据(正数列,最小值0.3664,中位数4.8871,均值5.9211),建议按以下步骤处理缺失值: **方一:中位数填充** 中位数对异常值不敏感,适合偏态数据: ```r data$column[is.na(data$column)] <- median(data$column, na.rm = TRUE) ``` **方二:多重(推荐)** 使用`mice`包生成更合理的值: ```r library(mice) imputed_data <- mice(data, method = "pmm", m = 5) # 使用预测均值匹配 data_complete <- complete(imputed_data) ``` --- #### 2. Box-Cox转换实现 确保数据全为正数后,使用`MASS`包进行转换: **步骤1:寻找最优λ值** ```r library(MASS) trans <- boxcox(data_complete$column ~ 1, lambda = seq(-2, 2, 0.1)) best_lambda <- trans$x[which.max(trans$y)] ``` **步骤2:应用转换公式** ```r if (best_lambda == 0) { transformed_data <- log(data_complete$column) } else { transformed_data <- (data_complete$column^best_lambda - 1) / best_lambda } ``` --- #### 3. 验证转换效果 检查转换后数据的正态性: ```r shapiro.test(transformed_data) # 若p>0.05,则符合正态分布 ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值