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.r00t at gmail.com> wrote:> ? Tue, 17 Oct 2023 12:12:05 +0530 > Sahil Sharma <sahilsharmahimalaya at 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]]
Jeff Newmiller
2023-Oct-19 07:20 UTC
[R] [Tagged] Re: Fwd: r-stats: Geometric Distribution
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 <sahilsharmahimalaya at 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.r00t at gmail.com> wrote: > >> ? Tue, 17 Oct 2023 12:12:05 +0530 >> Sahil Sharma <sahilsharmahimalaya at 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 at 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.