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

gtsummary包tbl_svysummary中predictor4百分比显示NA问题求助

问题:gtsummary::tbl_svysummary 因子变量百分比显示为(NA%)

使用gtsummary包的tbl_svysummary()函数生成调查数据集的加权描述统计时,遇到以下异常:

  • 无缺失值的因子变量predictor4,其百分比列显示为(NA%)
  • 其他同类因子变量的统计结果(包括{n}、百分比)均正常
  • predictor4的{n}和p值可正常展示

已完成排查动作:

  • 确认predictor4为因子类型且无缺失值
  • 更新gtsummary至最新版本
  • 用简化代码复现问题,异常仍存在

可能原因与解决方案

1. 因子水平的加权样本量计算异常

当predictor4的某一(或全部)因子水平对应的加权样本和为0时,百分比计算会返回NA。

验证与修复:

首先手动计算各水平的加权样本量,确认是否存在权重和为0的情况:

# 假设你的调查对象为svy_obj
svyby(~predictor4, ~1, svy_obj, svytotal, na.rm = TRUE)

若存在权重和为0的水平,可通过合并水平或调整权重数据解决:

# 示例:合并权重和为0的水平
df$predictor4 <- forcats::fct_collapse(df$predictor4,
  "合并组" = c("低权重水平1", "低权重水平2") # 替换为实际异常水平
)
# 重新构建调查对象后生成表格
svy_obj <- survey::svydesign(id = ~1, weights = ~weight_col, data = df)
tbl_svysummary(svy_obj, include = predictor4)

2. 统计量参数设置冲突

如果自定义了统计量规则,可能导致predictor4的百分比计算逻辑出错。

修复:

显式指定因子变量的统计量格式,覆盖默认设置:

tbl_svysummary(
  svy_obj,
  include = c(predictor4, other_vars),
  statistic = list(all_categorical() ~ "{n} ({p}%)")
)

若设置了percent参数,确保取值符合需求(可选"row"/"column"/"cell"):

tbl_svysummary(
  svy_obj,
  include = predictor4,
  percent = "row" # 根据分析需求选择百分比计算方式
)

3. 因子变量属性损坏

因子水平可能存在隐藏的编码问题(如特殊字符、无效水平),导致百分比计算异常。

修复:

重置因子变量属性,清除无效水平:

# 重新生成因子变量
df$predictor4 <- as.factor(as.character(df$predictor4))
# 删除未出现的因子水平
df$predictor4 <- forcats::fct_drop(df$predictor4)
# 重新构建调查对象后生成表格
svy_obj <- survey::svydesign(id = ~1, weights = ~weight_col, data = df)
tbl_svysummary(svy_obj, include = predictor4)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:07:40