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

如何按均值±标准差分组MM_score?现有代码合理性咨询

代码合理性分析与修正

你的代码和需求逻辑完全不匹配,存在以下核心问题:

1. 核心变量与需求不匹配

你的需求是基于MM_score自身的均值和标准差划分区间,但代码里使用的是cut_off和dv变量——如果这两个变量不是预先计算好的MM_score均值/标准差,完全无法实现你想要的分组规则。

2. 逻辑判断顺序错误

case_when是按从上到下的顺序匹配条件,你的第二个条件MM_score > (cut_off - dv)会覆盖绝大多数情况:
假设cut_off - dv小于cut_off + dv(这是合理的默认场景),那么所有满足第三个条件(cut_off - dv) >= MM_score & MM_score <= (cut_off + dv)的数值,必然也满足MM_score > (cut_off - dv),导致第三个条件永远不会被触发,等同于无效代码。

3. 分组规则与需求不符

需求明确的分组逻辑是:

  • 高于(均值+标准差) 或 低于(均值-标准差) → high score
  • 介于两者之间 → intermediate score

但你的代码逻辑是:

  • 小于cut_off + dv → LMM
  • 大于cut_off - dv → HMM
  • 介于cut_off - dv和cut_off + dv之间 → IMM
    区间划分和标签命名均与需求完全不一致。

修正后的代码

如果要严格实现你的需求,应先计算MM_score的均值和标准差,再执行分组:

dat %>%
  mutate(
    # 计算MM_score的均值和标准差,同时处理缺失值
    mm_mean = mean(MM_score, na.rm = TRUE),
    mm_sd = sd(MM_score, na.rm = TRUE),
    # 按需求规则分组
    MM_levels = case_when(
      MM_score > (mm_mean + mm_sd) | MM_score < (mm_mean - mm_sd) ~ "high score",
      TRUE ~ "intermediate score"
    )
  )

如果你的cut_off就是MM_score的均值、dv就是MM_score的标准差,可简化为:

dat %>%
  mutate(
    MM_levels = case_when(
      MM_score > (cut_off + dv) | MM_score < (cut_off - dv) ~ "high score",
      TRUE ~ "intermediate score"
    )
  )

内容的提问来源于stack exchange,提问作者12666727b9

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:30:39