-
Notifications
You must be signed in to change notification settings - Fork 421
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
Conversation
# 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>). |
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
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
@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?
There was a problem hiding this comment.
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
Co-authored-by: David Widmann <devmotion@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good!
Ref: #806. CC: @ablaom