Hello,
I have been working with various probability distributions in R, and it
seems the gamma distribution is inaccurate for some inputs.
For example, qgamma(1e-100, 5e-101, lower.tail=FALSE) gives: 1.0. However,
it seems this is incorrect; I think the correct answer should be
0.082372029620717283. When I check these numbers using pgamma, I get:
pgamma(1,5e-101, lower.tail=FALSE) = 9.1969860292859463e-102
and
pgamma(0.082372029620717283,5e-101, lower.tail=FALSE) 1.0000000000000166e-100.
Similarly, for example:
qgamma(1e-100,0.005,lower.tail=FALSE) = 109.36757177007101
pgamma(109.36757177007101, 0.005, lower.tail=FALSE) 1.4787306506694758e-52.
This looks completely wrong. The correct value, I think, should be
219.59373661415756. In fact,
pgamma(219.59373661415756, 0.005, lower.tail=FALSE) 9.9999999999999558e-101.
In fact, when I do the following in R, the results are completely wrong,
x<-c(5e-1,5e-2,5e-3,5e-4,5e-5,5e-6,5e-7,5e-8,5e-9,5e-10)
z1 <-qgamma(1e-100,x,lower.tail=FALSE)
y<-pgamma(z1,x,lower.tail=FALSE)
The value of y that I get should be close to 1e-100, but they are not:
> y
[1] 1.000000e-100 1.871683e-51 1.478731e-52 1.444034e-53 1.440606e-54
[6] 1.440264e-55 1.440230e-56 1.440226e-57 1.440226e-58 1.440226e-59
The correct values of z1 should be:
z1true <- c(226.97154111939946, 222.15218724493326, 219.59373661415756,
217.27485383840451, 214.98015408183574, 212.68797118872064,
210.39614286838227, 208.10445550564617, 205.81289009100664,
203.52144711679352)
With these values of z1true, we get the expected values:
y<-pgamma(z1true,x,lower.tail=FALSE)> y
[1] 1e-100 1e-100 1e-100 1e-100 1e-100 1e-100 1e-100 1e-100 1e-100 1e-100
I am using the precompiled binary version of R, under Windows Vista.
-----------> version
_
platform i386-pc-mingw32
arch i386
os mingw32
system i386, mingw32
status
major 2
minor 7.1
year 2008
month 06
day 23
svn rev 45970
language R
version.string R version 2.7.1 (2008-06-23)
------------
So, it seems qgamma is inaccurate for small probability values in the upper
tail, when the shape parameter is also small. Is this true, and if so can it
be fixed, or am I missing something here?
Thanks.
[[alternative HTML version deleted]]