如何在sjPlot的tab_model中自定义显著性p值水平(支持p<0.10)
自定义sjPlot tab_model的显著性水平
要在tab_model中添加p<0.10的显著性标识(对应90%置信度),可以通过以下两种方法实现:
方法1:自定义显著性标记函数(推荐)
sjPlot的tab_model支持通过p.style = "custom"配合自定义标记函数,覆盖默认的显著性判定规则。具体步骤如下:
- 编写自定义函数,根据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 ~ "" ) }
- 在
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表格内容:
- 先运行原始代码生成表格,再提取模型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
相关产品推荐
相关产品推荐

