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 
<sahilsharmahimal...@gmail.com> 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 <krylov.r...@gmail.com> wrote:

В Tue, 17 Oct 2023 12:12:05 +0530
Sahil Sharma <sahilsharmahimal...@gmail.com> пишет:

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.

Reply via email to