Jeff: I think you might be misdiagnosing the OP's problem; I'm not
sure that the R parameterization is primarily intended to avoid FP
problems, but rather is *one* possible sensible choice of definition.
Note that the Wikipedia page on the geometric distribution:
https://en.wikipedia.org/wiki/Geometric_distribution (obviously not an
authoritative reference, but Wikipedia is generally very good for these
things) gives *both* the starting-from-zero and starting-from-1 definitions.
Sahil: this is not an error in R, it's simply a different (and
equally sensible) choice of definition from yours. You can certainly
write your code to do `dgeom(x-1, p)`: in fact, you could write a wrapper
my_dgeom <- function(x, ...) dgeom(x-1, ...)
so that you never have to think about it again ...
cheers
Ben Bolker
On 2023-10-19 3:20 a.m., Jeff Newmiller via R-help wrote:
What makes sense in a math class is not necessarily the same as what makes
sense in a floating point analysis environment.
You lose a lot of significant digits when you add 1 to a floating point number
that is close to zero, and this implementation allows the user to avoid that
structural deficiency inherent in your preferred formulation.
This is a case where you need to read the documentation and adapt your handling
of numbers to get the most accurate results.
Or write your own version that destroys significant digits.
There are other functions that allow for similar maintenance of significant
digits... like log1p and expm1. See i.e.
https://en.m.wikipedia.org/wiki/Natural_logarithm#lnp1 for discussion.
On October 18, 2023 10:44:21 PM PDT, Sahil Sharma
wrote:
Hi, today I came across the same problem. And, I'm able to explain it with
an example as well.
Suppose I want to PDF or P(X=5) in Geometric Distribution with P = 0.2.
The theoretical formula is P * (1-P) ^ (x -1). But the R function dgeom(x,
p) works like P * (1-P) ^ x, it does not reduce 1 from x because in r the x
starts from 0. In that case, if I am writing x as 5 then in-principle it
should work like x = 4 because starting from zero, 4 is the 5th place of x.
E.g., 0,1,2,3,4 there are five digits.
However, the x in dgeom(x,p) is exactly working like 5.
Here are some codes that I used:
dgeom(5, 0.2)
[1] 0.065536
If I use the formula manually, i.e., p(1-P)^x-1, I get this.
0.2 * (1-0.2)^(5-1)
[1] 0.08192
Even if x starts from 0 in r, that's why we do not minus 1 from x, it
should work like 4 when I'm writing 5, but not, it is working exactly 5.
For example, if I manually put the 5 at the place of X, I get same results
as dgeom(x,p).
0.2 * (1-0.2)^(5)
[1] 0.065536
I guess there is a need for solution to this problem otherwise, it may
result in erroneous calculations. Either the function dgeom(x,p) can
perform and result as per the theoretical definition of PDF in Geometric
Distribution, or the user applying this function must be prompted about the
nature of this function so that the user manually minus one from x and then
enter it into the function dgeom(x,p).
Thanks, and Regards
Sahil
On Tue, Oct 17, 2023 at 6:39 PM Ivan Krylov wrote:
В Tue, 17 Oct 2023 12:12:05 +0530
Sahil Sharma пишет:
The original formula for Geometric Distribution PDF is
*((1-p)^x-1)*P*. However, the current r function *dgeom(x, p)* is
doing this: *((1-p)^x)*P, *it is not reducing 1 from x.
Your definition is valid for integer 'x' starting from 1. ('x'th trial
is the first success.)
The definition in help(dgeom):
p(x) = p (1-p)^x
for x = 0, 1, 2, ..., 0 < p <= 1.
...is valid for integer x starting from 0. ('x' failures until the
first success.)
They are equivalent, but they use the name 'x' for two subtly different
things.
Thank you for giving attention to this and best of luck in your future
research!
--
Best regards,
Ivan
[[alternative HTML version deleted]]
__
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
__
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.