【问题标题】:Convert P to Z in log space在日志空间中将 P 转换为 Z
【发布时间】:2021-05-16 18:28:13
【问题描述】:

给定一个 -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. 

【问题讨论】:

    标签: r math logarithm


    【解决方案1】:

    qnorm 也有一个类似于pnormlog.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)
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 2011-03-30
      相关资源
      最近更新 更多