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

如何在sjPlot的tab_model中自定义显著性p值水平(支持p<0.10)

自定义sjPlot tab_model的显著性水平

要在tab_model中添加p<0.10的显著性标识(对应90%置信度),可以通过以下两种方法实现:

方法1:自定义显著性标记函数(推荐)

sjPlot的tab_model支持通过p.style = "custom"配合自定义标记函数,覆盖默认的显著性判定规则。具体步骤如下:

  1. 编写自定义函数,根据p值返回对应符号:
# 自定义显著性标记逻辑,用"."表示p<0.1的显著性
custom_p_marks <- function(p) {
  dplyr::case_when(
    p < 0.001 ~ "***",
    p < 0.01 ~ "**",
    p < 0.05 ~ "*",
    p < 0.1 ~ ".",
    TRUE ~ ""
  )
}
  1. 在tab_model中指定启用自定义规则并传入函数:
library(fixest)
library(sjPlot)
library(dplyr)

reg <- feols(mpg ~ vs + wt + disp | gear + am, data = mtcars)

table <- tab_model(
  reg, 
  auto.label = TRUE, 
  show.se = TRUE, 
  show.ci = FALSE, 
  p.style = "custom",  # 开启自定义p值标记模式
  p.custom = custom_p_marks,  # 传入自定义标记函数
  title = "Table A: ", 
  dv.labels = c("Outcome"), 
  pred.labels = c("IV1", "IV2", "Control")
)

生成的表格会在p<0.1的系数旁添加.标记,同时保留原有的*、**、***规则;如果想调整符号(比如用*表示p<0.1),直接修改自定义函数内的对应逻辑即可。

方法2:手动修改生成的表格对象

如果自定义函数模式不生效,可直接修改tab_model生成的HTML表格内容:

  1. 先运行原始代码生成表格,再提取模型p值并生成自定义标记:
# 生成原始表格
table <- tab_model(
  reg, 
  auto.label = TRUE, 
  show.se = TRUE, 
  show.ci = FALSE, 
  p.style = "scientific_stars",
  title = "Table A: ", 
  dv.labels = c("Outcome"), 
  pred.labels = c("IV1", "IV2", "Control")
)

# 获取模型的p值并生成自定义标记
p_values <- reg$coeftable[, "Pr(>|t|)"]
custom_marks <- dplyr::case_when(
  p_values < 0.001 ~ "***",
  p_values < 0.01 ~ "**",
  p_values < 0.05 ~ "*",
  p_values < 0.1 ~ ".",
  TRUE ~ ""
)

# 定位系数单元格并添加标记(系数行对应表格第3-5行)
for (i in seq_along(custom_marks)) {
  table$body$cells[[i+2]][[1]] <- paste0(table$body$cells[[i+2]][[1]], custom_marks[i])
}

这种方法需要手动匹配表格行位置,适合熟悉sjPlot表格结构的用户。

内容的提问来源于stack exchange,提问作者flâneur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:47:29