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

如何在gt表格中匿名化计数<3的单元格及关联比例、缺失值?

解决方案:tbl_uvregression 数据匿名化处理(满足数据保护要求)

核心思路

在保留分层变量真实统计量的前提下,针对指定分层的缺失值计数、比例计算做匿名化调整,彻底阻断通过其他数据反推小计数(<3)原始值的可能。

分步实现代码

1. 数据预处理:标记需匿名化的分组

先给数据集添加标记列,精准识别disease=="Yes"且bmi_class缺失的记录,同时为比例计算准备有效层级:

library(gtsummary)
library(dplyr)
library(purrr)

# 假设你的数据集名为df
df <- df %>%
  mutate(
    # 标记需要处理的缺失值分组
    anonymize_group = case_when(
      disease == "Yes" & is.na(bmi_class) ~ TRUE,
      TRUE ~ FALSE
    ),
    # 筛选计数≥3的bmi_class层级,用于后续比例计算
    bmi_class_valid = ifelse(!is.na(bmi_class) & table(bmi_class)[bmi_class] >= 3, bmi_class, NA)
  )

2. 自定义统计量函数:针对性处理缺失值与比例

编写专属函数,仅对disease=="Yes"分层的bmi_class做匿名化,其他分层保持默认统计逻辑:

bmi_class_anonymized <- function(x, ...) {
  # 获取当前分层的disease取值
  current_disease <- attr(x, "data")$disease %>% unique()
  
  if (current_disease == "Yes") {
    # 处理缺失值:计数<3则替换为"<3",否则保留原数值
    missing_count <- sum(is.na(x))
    missing_text <- ifelse(missing_count < 3, "<3", as.character(missing_count))
    
    # 计算比例:仅基于计数≥3的有效层级
    valid_vals <- x[!is.na(x)]
    valid_counts <- table(valid_vals) %>% keep(~. >= 3)
    total_valid <- sum(valid_counts)
    
    # 构建统计文本
    stat_lines <- imap_chr(valid_counts, ~paste0(.y, ": ", .x, " (", round(.x/total_valid*100, 1), "%)"))
    stat_lines <- c(stat_lines, paste0("Missing: ", missing_text))
    
    paste(stat_lines, collapse = "; ")
  } else {
    # 其他分层使用默认的计数+比例格式
    fmt_count_fraction(x, ...)
  }
}

3. 调用tbl_uvregression并应用自定义逻辑

确保分层变量disease基于真实数据计算统计量,同时对bmi_class应用匿名化函数:

final_table <- df %>%
  tbl_uvregression(
    method = glm,
    y = outcome, # 替换为你的实际结局变量
    include = c(disease, bmi_class),
    # 为不同变量指定统计逻辑
    statistic = list(
      disease ~ "{n} ({p}%)",  # disease用真实值计算统计量
      bmi_class ~ bmi_class_anonymized
    ),
    stratify_by = disease,
    hide_n = FALSE
  ) %>%
  modify_header(label = "**Variable**") %>%
  modify_footnote(all_stat_cols() ~ "注:计数<3的单元格已匿名化,比例仅基于计数≥3的有效层级计算")

# 输出表格
final_table

关键验证点

  • 仅disease=="Yes"分层的bmi_class缺失值会被匿名化,其他分组保持原样
  • 比例计算自动排除计数<3的层级,避免反推原始小计数
  • 分层变量disease的统计量完全基于真实数据计算,未做任何匿名化调整

内容的提问来源于stack exchange,提问作者Mathilde Kjeldsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:05:01