给定一个-log10(P)值,我想计算日志空间中的Z得分,我该怎么做呢?
那么,给定以下代码,如何重新编码最后一行,以便从日志空间中的log10P计算Z?
Z=10
log10P = -1*(pnorm(-abs(Z),log.p = T)*1/log(10) + log10(2))
Z== -1*(qnorm(10^-log10P/2)) # <- this needs to be in log space. 发布于 2021-05-17 03:24:04
qnorm也有一个类似于pnorm的log.p参数,所以您可以逆转最初用于获取log10P的操作(我花了几次尝试才弄明白这一点……)
我稍微调整了一下你的log10P计算。
log10P_from_Z <- function(Z) {
abs((pnorm(-abs(Z),log.p=TRUE)+log(2))/log(10))
}
Z_from_log10P <- function(log10P) {
-1*qnorm(-(log10P*log(10))-log(2), log.p=TRUE)
}我们可以检查往返精度(例如,从-log10(p)到Z再转换回来,看看我们与原始值有多接近)。这对于20左右的值非常有效,但对于较大的值,确实会产生一点舍入错误(必须更仔细地查看是否有任何可以补救的地方)。
zvec <- seq(20,400)
err <- sapply(zvec, function(z) {
abs(Z_from_log10P(log10P_from_Z(z))-z)
})

https://stackoverflow.com/questions/67560210
复制相似问题