使用R的purposeful包时mutate()报错:y值需在0-1之间求助
问题:使用
purposeful包处理连续型结局变量时触发错误 背景
我是一名医学生,刚接触R语言。在研究中试图寻找术中出血量的预测因子,因此尝试使用purposeful包来应用目的筛选法。
运行的代码
purposeful::purposeful_step_1( data = imputed, outcome = "ebl", predictors = c("age", "gender", "bmi", "charlson", "add_comorb", "path_fracture", "pain", "ecog", "asia_pre_cat", "prim_tumor", "tumor_region", "more2_spine_met", "other_bone_mets", "spine_mets", "visc_mets", "brain_mets", "local_radiation", "previous_systemic", "ellipsoid_cm3", "bilsky", "hgb", "wbc", "plt", "lymph", "neut", "creatinine", "calcium", "albumin", "time_prim_surg", "operation", "levels_operated"), ref_level = NULL, cutoff_value = 0.25, conf_level = 0.95, format = TRUE, exponentiate = FALSE)
其中结局变量ebl是表示出血量(mL)的连续型变量,所有预测变量为二分类、有序或连续型临床指标。
收到的错误信息
Error in `mutate()`: ℹ In argument: `res_univ = purrr::map(...)`. Caused by error in `purrr::map()`: ℹ In index: 1. Caused by error: ! y values must be 0 <= y <= 1 Run `rlang::last_trace()` to see where the error occurred.
尝试将结局变量换成分类变量时代码可正常运行,请问哪里操作有误?该如何解决?purposeful包的目的筛选法是否不支持连续型结局变量?
解答
核心原因:
purposeful包的purposeful_step_1函数默认针对分类结局变量(二分类、多分类等)设计,底层会调用逻辑回归或多分类回归模型,这类模型要求结局变量是0-1的概率型或分类变量,因此传入连续型结局ebl时会触发"y值必须在0-1之间"的错误。解决方法:
- 转换结局变量类型:若研究设计允许,可将连续型出血量(ebl)分组转换为二分类或有序分类变量(比如按中位数分成"低出血量"/"高出血量",或按临床阈值分组),即可直接使用
purposeful包的现有函数。 - 改用适合连续结局的变量筛选逻辑:若必须保留连续型结局,需针对线性回归实现目的筛选:
- 第一步:对每个预测变量与连续结局做单因素线性回归,按
cutoff_value=0.25筛选P值小于0.25的变量; - 第二步:将筛选后的变量纳入多因素线性回归,逐步剔除P值大于预设阈值的变量;
- 可通过
lm()函数结合循环或purrr包手动实现,也可用MASS::stepAIC()做逐步回归(注意与目的筛选逻辑略有差异,但可作为替代方案)。
- 第一步:对每个预测变量与连续结局做单因素线性回归,按
- 转换结局变量类型:若研究设计允许,可将连续型出血量(ebl)分组转换为二分类或有序分类变量(比如按中位数分成"低出血量"/"高出血量",或按临床阈值分组),即可直接使用
额外说明:目前
purposeful包的文档和功能主要聚焦于分类结局的回归模型(逻辑回归、Cox回归等),暂时没有支持连续结局的线性回归版本,因此直接传入连续结局会报错。
内容的提问来源于stack exchange,提问作者Robert-Jan Pierik
相关产品推荐
相关产品推荐

