Re: [R] [Tagged] Re: Fwd: r-stats: Geometric Distribution

2023-10-19 Thread Ben Bolker
  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.


Re: [R] [Tagged] Re: Fwd: r-stats: Geometric Distribution

2023-10-19 Thread Jeff Newmiller via R-help
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.

-- 
Sent from my phone. Please excuse my brevity.

__
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.