C++ 在一次pnorm调用中访问正常CDF的两个尾部
我正在编写一个R包,其中我需要对一个非常大的矩阵C++ 在一次pnorm调用中访问正常CDF的两个尾部,c++,r,C++,R,我正在编写一个R包,其中我需要对一个非常大的矩阵a(例如,5000 x 20000)的每个条目多次计算正常CDFPhi(.),并对两个尾部进行精确计算,即log(Phi(a))和log(1-Phi(a)) 到目前为止,我已经使用R函数pnorm两次了 logphiA <- pnorm(A, log.p = TRUE) log1_phiA <- pnorm(A, log.p = TRUE, lower.tail = FALSE) 因为在我的案例中,这会导致稳定性问题 我查阅了 Pri
a
(例如,5000 x 20000)的每个条目多次计算正常CDFPhi(.)
,并对两个尾部进行精确计算,即log(Phi(a))
和log(1-Phi(a))
到目前为止,我已经使用R函数pnorm
两次了
logphiA <- pnorm(A, log.p = TRUE)
log1_phiA <- pnorm(A, log.p = TRUE, lower.tail = FALSE)
因为在我的案例中,这会导致稳定性问题
我查阅了
谢谢 精确计算尾部的算法很昂贵。我怀疑开销是问题所在,所以重新实现或更改C代码可能不会有帮助。我怀疑如果你牺牲准确性,你只能提高速度(在一般情况下)。不过,也许
log1_phiA_1非常感谢您的回复罗兰。好的,我将使用expm1
运行一些测试,并查看算法的行为。
log1_phiA <- log(1-exp(logphiA))