Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add squared L2 norms of some discrete distributions #1340

Merged
merged 3 commits into from
Jun 9, 2021

Conversation

giordano
Copy link
Contributor

@giordano giordano commented Jun 7, 2021

Ref: #806. CC: @ablaom

Comment on lines +58 to +62
# The identity is obvious if you look at the definition of the modified Bessel function of
# first kind I_0. Starting from the L2-norm of the Poisson distribution this can be proven
# by observing this is the Laguerre exponential l−e of x², which is related to said Bessel
# function, see <https://doi.org/10.1140/epjst/e2018-00073-1> (preprint:
# <https://arxiv.org/abs/1707.01135>).
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Computing this took me more time than I'd like to admit. If you have the definition of the modified Bessel function of the first kind, then the identity is easy to see, but I had to dig it up quite a bit to get there. I don't know whether the reference I dropped here is more useful or confusing, I can remove it if you consider it unnecessary

test/pdfnorm.jl Outdated
@testset "Poisson" begin
@test pdfsquaredL2norm(Poisson(0)) ≈ 1
@test pdfsquaredL2norm(Poisson(1)) ≈ besseli(0, 2) * exp(-2)
@test pdfsquaredL2norm(Poisson(pi)) ≈ besseli(0, 2 * pi) * exp(-2)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this should be

Suggested change
@test pdfsquaredL2norm(Poisson(pi)) besseli(0, 2 * pi) * exp(-2)
@test pdfsquaredL2norm(Poisson(pi)) besseli(0, 2 * pi) * exp(-2 * pi)

In general, I wonder though if it would be more useful to compare the results of pdfsquaredL2norm with approximations from numerical integration - it seems here you just plug in the values in the formula that you used for the implementation, so if the formula is incorrect, the tests won't discover it?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point, I've changed the tests to compute all norms numerically (when possible).

Note that these methods aren't bullet-proof, for example they will fail for divergent norms

src/pdfnorm.jl Outdated Show resolved Hide resolved
Co-authored-by: David Widmann <devmotion@users.noreply.github.com>
Copy link
Member

@devmotion devmotion left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good!

@devmotion devmotion merged commit 5cafbcd into JuliaStats:master Jun 9, 2021
@giordano giordano deleted the mg/pdfnorm-discrete branch June 9, 2021 08:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants