【问题标题】:Printing p-values with <0.001打印 <0.001 的 p 值
【发布时间】:2014-05-25 22:38:33
【问题描述】:

如果p值小于0.001,我想知道如何在Sweave中使用&lt;0.001符号。

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group)
summary(lm.D9)$coef

           Estimate Std. Error  t value     Pr(>|t|)
(Intercept)   4.8465  0.1557174 31.12368 4.185248e-17
group1       -0.1855  0.1557174 -1.19126 2.490232e-01

期望的输出

           Estimate Std. Error  t value     Pr(>|t|)
(Intercept)   4.8465  0.1557174 31.12368   <0.001
group1       -0.1855  0.1557174 -1.19126    0.249

【问题讨论】:

  • ?format.pval format.pval(summary(lm.D9)$coef[ , 4], eps = .001, digits = 2)
  • 感谢@rawr 的有用评论。你想改变你的评论来回答。谢谢

标签: r latex knitr sweave rnw


【解决方案1】:

我使用了两个主要函数,format.pval 和这个我从 gforge 中提取并调整的函数。

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group)
tmp <- data.frame(summary(lm.D9)$coef)
tmp <- setNames(tmp, colnames(summary(lm.D9)$coef))
tmp[ , 4] <- format.pval(tmp[ , 4], eps = .001, digits = 2)

tmp
#             Estimate Std. Error  t value Pr(>|t|)
# (Intercept)    5.032  0.2202177 22.85012   <0.001
# groupTrt      -0.371  0.3114349 -1.19126     0.25

我喜欢这个,因为它消除了 pvalues > .1 的精度(或者如果你想要不同的东西,你喜欢任何阈值;也就是说,不管digits,如果值是 > .1,它只保留两位小数),保持尾随零(参见下面的示例),并添加

pvalr <- function(pvals, sig.limit = .001, digits = 3, html = FALSE) {

  roundr <- function(x, digits = 1) {
    res <- sprintf(paste0('%.', digits, 'f'), x)
    zzz <- paste0('0.', paste(rep('0', digits), collapse = ''))
    res[res == paste0('-', zzz)] <- zzz
    res
  }

  sapply(pvals, function(x, sig.limit) {
    if (x < sig.limit)
      if (html)
        return(sprintf('&lt; %s', format(sig.limit))) else
          return(sprintf('< %s', format(sig.limit)))
    if (x > .1)
      return(roundr(x, digits = 2)) else
        return(roundr(x, digits = digits))
  }, sig.limit = sig.limit)
}

还有例子:

pvals <- c(.133213, .06023, .004233, .000000134234)
pvalr(pvals, digits = 3)
# [1] "0.13"    "0.060"   "0.004"   "< 0.001"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    相关资源
    最近更新 更多