-
Notifications
You must be signed in to change notification settings - Fork 19
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
NICE sample-error correction #367
Conversation
86451dc
to
2190d58
Compare
index fix bugfix formatting plots comparing to inflation-only docstrings docstrings in API docs improve docs example code for docs example basic SECNice test localizers format link fix
2190d58
to
914505b
Compare
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.
This is great, thank you for all the work on this Ollie! I suggested some changes as comments. The most substantive are:
- What should we do for
N_ens
< 6? Right now a warning is issued, but it seems to me that it may be more useful to hard-code a look-up table for this case. - Shouldn't
corr_psd = corr_tmp .^ α_min_exceeded[1]
becorr_psd = corr_tmp .^ (α_min_exceeded[1] + 1)
, and similar forcorr_psd_prev
? Please check if I got it wrong.
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, thank you for making these changes! I only made two minor additional comments.
Offline changes were approved |
Purpose
Implements the NICE sample-error correction (Morzfeld, Vishny, et al 2024)
Content
Localizer
:SECNice()
with a couple of constructorsSECNice()
,SECNice(delta_ug, delta_gg)
andSECNice(n_samples, delta_ug, delta_gg)
n_samples are the number of samples to approximate the standard deviation through Fisher transformation and deltas are "fudge factors" on the discrepancy principle toleranceLocalization/localization_example_lorenz96.jl
Interpolations
into the Project toml (though we could do without if necessary)N_ens<=6
for a crude sampling scheme, (still performant on the lorenz example even with 5 particles)Examples
Implement Vishny, Morzfeld, 2024 localization. Using Fisher transformation to avoid lookup tables,
Instead we create a linear interpolation of the std of correlation space on first call, which is reused in future calls.
There is a gentle decline in performance as the iteration is decreased down to ~20 samples
Example: learning a 200dim state
x(t)
from a future time ofx(t+T)
whereT=1
, using 20 ensemble members.SECNice(n_samples, delta_ug, delta_gg)
Result -
SECNice(5000,1.0,1.0)
andSECNice(5000,0.8,1.0)
Result -
SECNice(1000,1.0,1.0)
andSECNice(1000,0.8,1.0)
Results for even smaller samples =
200,50,20