modelsummary输出中极小p值显示异常的配置求助
问题:modelsummary表格中极小p值的显示配置问题
在对比4个回归分析结果并使用modelsummary包制表时,部分p值极小(如2e-28),本质趋近于0,但表格中仅显示“p =”而非“p = 0”。现有代码如下:
# Linear models summary - Stateline, Garland, Benban, Bungala library(tidyverse) library(rstatix) # For tables library(modelsummary) library(kableExtra) library(gt) [Import data from CSVs] # Processing and presenting models # Info from https://vincentarelbundock.github.io/modelsummary/articles/modelsummary.html # Define models models <- list( "Stateline" = lm(mean ~ 0 + buffer + Month + JulianDay + TimePeriod, data = stateline_data), "Garland" = lm(mean ~ 0 +buffer + Month + JulianDay + TimePeriod, data = garland_data), "Benban" = lm(mean ~ 0 + buffer + JulianDay + TimePeriod, data = benban_data), "Bungala" = lm(mean ~ 0 + buffer + JulianDay + TimePeriod, data = bungala_data)) modelsummary(models, estimate = "{estimate}{stars}", statistic = c("conf.int", "s.e. = {std.error}", "t = {statistic}", "p = {p.value}"), fmt = 4, coef_rename = c("buffer" = "Buffer", "JulianDay" = "Julian Day", "TimePeriod2" = "Post-Construction"))
希望实现以下两种效果之一:
- 将极小p值显示为0
- 仅对p值使用科学计数法,其他数据保持原格式
解决方案
方案1:将极小p值显示为0
通过自定义格式化函数,对小于设定阈值(如1e-4)的p值直接显示为0,其余p值保留4位小数:
# 自定义p值格式化函数 format_p <- function(x) { ifelse(x < 1e-4, 0, sprintf("%.4f", x)) } modelsummary(models, estimate = "{estimate}{stars}", statistic = c("conf.int", "s.e. = {std.error}", "t = {statistic}", "p = {p.value}"), fmt = list(estimate = 4, std.error = 4, statistic = 4, p.value = format_p), coef_rename = c("buffer" = "Buffer", "JulianDay" = "Julian Day", "TimePeriod2" = "Post-Construction"))
方案2:仅对p值使用科学计数法
自定义函数实现:极小p值用科学计数法显示,常规p值保留4位小数,其他统计量维持原格式:
# 自定义p值科学计数法格式化函数 format_p_sci <- function(x) { ifelse(x < 1e-4, sprintf("%.2e", x), sprintf("%.4f", x)) } modelsummary(models, estimate = "{estimate}{stars}", statistic = c("conf.int", "s.e. = {std.error}", "t = {statistic}", "p = {p.value}"), fmt = list(estimate = 4, std.error = 4, statistic = 4, p.value = format_p_sci), coef_rename = c("buffer" = "Buffer", "JulianDay" = "Julian Day", "TimePeriod2" = "Post-Construction"))
关键说明
fmt参数支持传入列表,为不同统计量指定独立格式化规则,实现仅调整p值显示、不影响其他数据的效果。- 可根据需求修改阈值(如将1e-4改为1e-5)或科学计数法的小数位数(如
%.2e改为%.1e)。
内容的提问来源于stack exchange,提问作者strangecharm
相关产品推荐
相关产品推荐

