如何在R中获得精确的极低p值(在对数尺度上或其他)



我在R中运行线性回归模型,关联非常显著- p值远低于标准的2.2e-16。

回归的t统计量为-44.85自由度为33689。

是否有办法得到确切的p值,甚至-log10(p)?我尝试了一些不同的东西——首先,包Rmpfr对学生的T发行版没有很好的支持。

还有这个帖子:小数点- R语言中0的概率值,但是在投票最多的评论中的答案不太正确。假设我们在那篇文章中使用了给定的示例:

d <- data.frame(x=rep(1:5,each=10))
set.seed(101)
d$y <- rnorm(50,mean=d$x,sd=0.0001)
lm1 <- lm(y~x,data=d)

coef(summary(lm1))我们可以看到p = 9.690173e-203

答案说我们可以得到一个log(p)(这是我想要的)从:

tval <- coef(summary(lm1))["x","t value"] 2*pt(abs(tval),df=48,lower.tail=FALSE,log.p=TRUE)/log(10)

得到-404.6294。这个值不是log(P)。如果我们用-log10(9.690173e-203),答案是202.0137;它不等于404.6294或404.6294/2 = 202.3147。

是否有解决这个问题的方法?非常感谢你的帮助。谢谢!

您可以使用:

log(2) + pt(coef(summary(lm1))["x","t value"] , 48, lower.tail = FALSE, log.p = TRUE) 
[1] -465.1537

这与p值的对数完全相似:

log(coef(summary(lm1))[2,4])
[1] -465.1537

相关内容

  • 没有找到相关文章