是否有将 p.value 转换为重要性代码的 R 函数?

Is there a R function that convert p.value to significance code?

summary 显示 p.values 的重要性代码。是否有将 p.value 转换为重要性代码的 R 函数?例如:0.02 --> '*' 和 0.005 --> '**'?

使用symnum,如下所示。 ?symnum 获取更多信息。

p.values <- c(9.5e-15, 0.02)
Signif <- symnum(p.values, corr = FALSE, na = FALSE, cutpoints = c(0, 
    0.001, 0.01, 0.05, 0.1, 1), symbols = c("***", "**", "*", ".", " "))

给予:

> str(Signif)
Class 'noquote'  atomic [1:2] *** *
  ..- attr(*, "legend")= chr "0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1"

上面的代码用在 stats::printCoefmat 中的 R 本身(参见 ?printCoefmat),它是从 stats:::print.summary.lm 调用的。请注意,它会生成一个 class "noquote" 的对象,并且还会在 "legend" 属性中提供一个图例。

追踪summary使用的代码,可以在stats:::printCoefmat中找到以下内容:

Signif <- symnum(pv, corr = FALSE, na = FALSE, 
                 cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), 
                 symbols = c("***", "**", "*", ".", " "))

您可以创建自己的函数来执行此操作,例如

signif.num <- function(x) {
    symnum(x, corr = FALSE, na = FALSE, legend = FALSE,
           cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), 
           symbols = c("***", "**", "*", ".", " "))
}
signif.num(c(1e-8, 0.01, 0.05, 0.1, 0.2))

(注意最后一个值只是一个 space,在输出中不可见)