Добавление точности с плавающей запятой в qnorm / pnorm? - PullRequest
5 голосов
/ 09 мая 2011

Мне было бы интересно увеличить предел с плавающей запятой для расчета qnorm / pnorm от их текущего уровня, например:

x <- pnorm(10) # 1
qnorm(x) # Inf
qnorm(.9999999999999999444) # The highst limit I've found that still return a <<Inf number

Возможно ли это (в разумные сроки)? Если да, то как?

1 Ответ

10 голосов
/ 09 мая 2011

Если аргумент указан в верхнем хвосте, вы должны быть в состоянии получить более высокую точность, вычисляя 1-p.Например:

> x = pnorm(10, lower.tail=F)
> qnorm(x, lower.tail=F)
10

Я ожидаю (хотя я точно не знаю), что функция pnorm () ссылается на подпрограмму C или Fortran, которая привязана к любому размеру с плавающей запятой, поддерживаемому аппаратным обеспечением.,Вероятно, лучше переставить проблему так, чтобы точность не требовалась.

Тогда, если вы имеете дело с действительно очень большими z-значениями, вы можете использовать log.p = T:

> qnorm(pnorm(100, low=F, log=T), low=F, log=T)
100

Извините, это не совсем то, что вы ищете.Но я думаю, что это будет более масштабируемым - pnorm достигает 1 так быстро при высоких значениях z (в конце концов, это e ^ (- x ^ 2)), что даже если вы добавите больше битов, они быстро истощатся.

...