提问人:Chirag Krishna 提问时间:4/1/2023 最后编辑:Chirag Krishna 更新时间:4/3/2023 访问量:178
如何在 R 中获得精确的极低 P 值(在对数刻度或其他方面)[已关闭]
How to get exact extremely low P-value in R (on log scale or otherwise) [closed]
问:
我在 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)
从我们可以看出,P = 9.690173e-203coef(summary(lm1))
答案是我们可以从以下位置获得 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。
有没有解决方法?非常感谢您的帮助。谢谢!
答:
1赞
Onyambu
4/1/2023
#1
您可以使用:
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
评论
0赞
Chirag Krishna
4/12/2023
谢谢@onyambu,非常感谢您的帮助。您知道从对数 P 值获取 z 分数的方法吗?例如,如果 P 是 5e-08,那么 z 分数是 - 但如果 p 太小,这将返回 Inf......qnorm(5e-08/2, lower.tail = FALSE, log.p = FALSE)
0赞
Chirag Krishna
4/12/2023
没关系,@Ben Bolker 很好地回答了这个问题!stackoverflow.com/questions/67560210/......
上一个:SAS 四舍五入小数点后 2 位
下一个:R 中处理无限分数时的数学不精确
评论
log
以 10 为基数,而不是以 10 为基数e
log(coef(summary(lm1))[2,4])
pt(coef(summary(lm1))["x","t value"] , 48, lower.tail = FALSE, log.p = TRUE)
log(pt(coef(summary(lm1))["x","t value"] , 48, lower.tail = FALSE)*2)
log(coef(summary(lm1))[2,4])
pt(coef(summary(lm1))["x","t value"] , 48, lower.tail = FALSE, log.p = TRUE)