You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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之间"的错误。

  • 解决方法:

    1. 转换结局变量类型:若研究设计允许,可将连续型出血量(ebl)分组转换为二分类或有序分类变量(比如按中位数分成"低出血量"/"高出血量",或按临床阈值分组),即可直接使用purposeful包的现有函数。
    2. 改用适合连续结局的变量筛选逻辑:若必须保留连续型结局,需针对线性回归实现目的筛选:
      • 第一步:对每个预测变量与连续结局做单因素线性回归,按cutoff_value=0.25筛选P值小于0.25的变量;
      • 第二步:将筛选后的变量纳入多因素线性回归,逐步剔除P值大于预设阈值的变量;
      • 可通过lm()函数结合循环或purrr包手动实现,也可用MASS::stepAIC()做逐步回归(注意与目的筛选逻辑略有差异,但可作为替代方案)。
  • 额外说明:目前purposeful包的文档和功能主要聚焦于分类结局的回归模型(逻辑回归、Cox回归等),暂时没有支持连续结局的线性回归版本,因此直接传入连续结局会报错。

内容的提问来源于stack exchange,提问作者Robert-Jan Pierik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:02:59