将星号添加到 p 值

Add stars to p-value

我计算了几个变量均值差异的 Anova F 检验 p 值。现在我想添加“星号”来表示 p 值的显着性水平。 我希望 * 在 10% 的水平上具有显着性,** 在 5% 的水平上,*** 在 1% 的水平上。

我的数据是这样的:

structure(list(Variables = c("A", "B", "C", "D", "E"), 
               `Anova F-Test p-Value` = c(0.05, 5e-04, 0.5, 0.05, 0.01)), 
          class = "data.frame", row.names = c(NA, -5L))

有人可以帮我处理这里的代码吗?

您可以构建自己的函数。但是请注意,这不是传统的恒星系统(不过,如果您在某处提到比例尺,那完全没问题)。参见例如here.

stars.pval <- function(x){
  stars <- c("***", "**", "*", "n.s.")
  var <- c(0, 0.01, 0.05, 0.10, 1)
  i <- findInterval(x, var, left.open = T, rightmost.closed = T)
  stars[i]
}

transform(dat, stars = stars.pval(dat$`Anova F-Test p-Value`))

  Variables Anova.F.Test.p.Value stars
1         A                5e-02    **
2         B                5e-04   ***
3         C                5e-01  n.s.
4         D                5e-02    **
5         E                1e-02   ***

我建议为此使用 cut

编辑:注释。使用 right = FALSE 将 p <= alpha 定义为显着,使用 right = TRUE 将 p < alpha 定义为显着。还为 -Inf 和 Inf 更改了 0 和 1,这通常可以更好地处理剪辑中的边界。

dt$stars <- cut(dt[[2]], breaks = c(-Inf, 0.01, 0.05, 0.10, Inf), 
                labels = c("***", "**", "*", "n.s."), right = FALSE)

dt

#   Variables Anova F-Test p-Value stars
# 1         A               0.0500     *
# 2         B               0.0005   ***
# 3         C               0.5000  n.s.
# 4         D               0.0500     *
# 5         E               0.0100    **

为此内置了一个 R:

df$stars <- symnum(df$`Anova F-Test p-Value`, 
                     symbols   = c("***","**","*",".","n.s."),
                     cutpoints = c(0,  .001,.01,.05, .1, 1),
                     corr      = FALSE
                   )
df
  Variables Anova F-Test p-Value stars
1         A                5e-02     *
2         B                5e-04   ***
3         C                5e-01  n.s.
4         D                5e-02     *
5         E                1e-02    **