diff --git a/CHANGELOG.md b/CHANGELOG.md index 60e5c940..5d8caeb4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `survey=`/`weights=` kwargs on the HAD pretest helpers (`stute_test`, `qug_test`, `did_had_pretest_workflow`, ...) are unchanged in this release and removed separately. +### Fixed +- **`HonestDiD` Δ^SD optimal-FLCI center parity with R (SE-audit B2b).** The optimal + Fixed-Length CI optimizer was a flat Nelder-Mead over slope weights that landed on a + different affine estimator than R `HonestDiD::findOptimalFLCI` at intermediate smoothness + `M` — the CI **center** drifted up to ~9% (the width/coverage matched). Replaced it with a + faithful port of R's **nested convex program**: an inner minimum-worst-case-bias problem at a + fixed estimator SD `h` (a smooth convex QCQP over slope weights, solved with `scipy` SLSQP — + no cvxpy) and an outer 1-D search over `h`. Now matches R's optimal FLCI **center + + half-length + optimalVec** to ~1e-3 (median ~1e-5) across a stress grid. diff-diff's + **analytical** folded-normal critical value is strictly more accurate than R's Monte-Carlo + `.qfoldednormal`, so it also solves the deterministic version of R's problem more precisely + than stock R. Verified vs R HonestDiD 0.2.6 (`benchmarks/data/honest_flci_golden.json`, + `TestHonestFLCIParityR`); the M=0 result and all existing behaviour are unchanged. + ### Testing - **CI-locked standard-error parity for flagship and previously-unasserted paths (SE-audit coverage batch).** These surfaces computed SEs matching R but had no CI assertion pinning them diff --git a/TODO.md b/TODO.md index c35b548f..d721ffd3 100644 --- a/TODO.md +++ b/TODO.md @@ -34,7 +34,7 @@ The `Origin` column (Actionable tables) and the `PR` column (Deferred tables) bo | `CallawaySantAnna` no-covariate ipw treats the propensity as unconditional (no correction term); R's `did` fits an intercept-only logit whose estimation effect is identically zero in the IF, so values match — decide whether to document-only (current REGISTRY note) or mirror R's code path for structural parity. | `staggered.py::_ipw_estimation` (no-cov branch) | CS-scaling | Quick | Low | | Fold the R `did` 2.5.1 ipw aggregation yardsticks (hardcoded with provenance in `test_golden_ipw_aggregation_se_vs_r_did_251`) into `csdid_golden_values.json` on the next fixture regeneration — the generator already emits the ipw `aggte` blocks; switch the test to read the JSON. | `benchmarks/R/generate_csdid_test_values.R`, `tests/test_csdid_ported.py` | CS-scaling | Quick | Low | | TWFE's HC2/HC2-BM inline full-dummy build (`twfe.py:280-315`) duplicates the dummy-construction logic in `DifferenceInDifferences(fixed_effects=...)` (`estimators.py:478-486`). Extract a shared helper, or delegate TWFE's HC2/HC2-BM path to DiD's `fixed_effects=` branch (with TWFE-specific cluster-default threading), to reduce drift risk on FE naming / survey behavior / result-surface conventions. Substantive refactor — touches both estimators. | `twfe.py::fit`, `estimators.py::DifferenceInDifferences.fit` | follow-up | Heavy | Low | -| `HonestDiD` Δ^SD optimal-FLCI affine-estimator optimizer (Nelder-Mead over slope weights) diverges from R `.FLCI.computeFLCI` at intermediate small M (~`[0.005, 0.02]`): the CI **center** shifts up to ~9% on wide pre/post windows while the **width** matches to ~1e-3. Not a local-minimum artifact (multi-start does not move it); the two implementations land on different affine estimators of near-equal length. Coverage is unaffected. Reconcile our FLCI optimization with R's exact algorithm. Exposed when the identified-set NaN gate was removed (finite CIs now surface at all M). | `honest_did.py::_compute_optimal_flci` | SE-audit | Mid | Low | +| `HonestDiD` Δ^SD optimal-FLCI center parity — **LANDED (SE-audit B2b)**: replaced the flat Nelder-Mead affine-estimator optimizer with a faithful port of R `HonestDiD::findOptimalFLCI`'s nested convex program (inner min-worst-case-bias at fixed estimator SD `h` via SLSQP QCQP; outer grid-zoom over `h`). Matches R's center + half-length + optimalVec to ~1e-3 (median ~1e-5) across a stress grid; the prior ~9% intermediate-M center drift is removed (widths always matched, coverage unaffected). Analytical folded-normal cv is more accurate than R's MC `.qfoldednormal`. Golden `honest_flci_golden.json` + `TestHonestFLCIParityR`. | `honest_did.py::_flci_solve` | SE-audit | Done | Low | ### Performance diff --git a/benchmarks/R/generate_honest_flci_golden.R b/benchmarks/R/generate_honest_flci_golden.R new file mode 100644 index 00000000..7cd85477 --- /dev/null +++ b/benchmarks/R/generate_honest_flci_golden.R @@ -0,0 +1,102 @@ +#!/usr/bin/env Rscript +# Generate R HonestDiD parity goldens for diff-diff's Delta^SD optimal FLCI +# (`_compute_optimal_flci`, Rambachan & Roth 2023 Section 4.1). SE-audit B2b. +# +# Requires: R 4.4+, install.packages(c("HonestDiD", "jsonlite")). HonestDiD 0.2.6. +# Run from the REPO ROOT: `Rscript benchmarks/R/generate_honest_flci_golden.R` +# (the output path below is resolved relative to the working directory). +# Output: benchmarks/data/honest_flci_golden.json +# +# Two tiers, both stored per case: +# (1) override-R (PRIMARY): R's Monte-Carlo folded-normal quantile +# `.qfoldednormal` (10^6 draws, seed 0) is replaced by an ANALYTICAL +# quantile via assignInNamespace, so R solves the SAME deterministic outer +# problem as diff-diff (whose `_cv_alpha` is analytical). diff-diff matches +# the override-R center + half-length + optimalVec to ~1e-3 (median ~1e-5). +# (2) stock-R (REALISM): the unmodified MC `.qfoldednormal`. Because the width +# surface is near-flat at the optimum, R's MC noise perturbs R's own +# hstar/center by up to a few e-3 -- diff-diff (analytical) is strictly more +# accurate, so it matches stock R only to ~1.4e-2 (max observed). Looser tier. +suppressWarnings(suppressMessages({ + library(HonestDiD) + library(jsonlite) +})) +stopifnot(as.character(packageVersion("HonestDiD")) == "0.2.6") + +qfold_analytic <- function(p, mu = 0, sd = 1, ...) sapply(mu, function(m) { + f <- function(x) (pnorm(x - m, sd = sd) - pnorm(-x - m, sd = sd)) - p + uniroot(f, lower = 0, upper = abs(m) + sd * 12 + 5, tol = 1e-12)$root +}) + +# --- Curated stress grid (includes a curved [1,0,1,...] pre-trend, kink-prone +# for the L1 inner objective) ------------------------------------------------ +set.seed(20260707) +cases <- list() +for (npre in c(3, 6, 9)) { + for (npost in c(1, 4)) { + n <- npre + npost + idx <- 0:(n - 1) + for (rho in c(0.0, 0.5)) { + corr <- rho^abs(outer(idx, idx, "-")) + sigma <- corr * 0.01 + base_pre <- rep(c(1, 0), length.out = npre) + beta <- c(base_pre, seq(1.2, 1.7, length.out = npost)) + lvecs <- list(c(1, rep(0, npost - 1))) + if (npost > 1) lvecs <- c(lvecs, list(rep(1 / npost, npost))) + for (l in lvecs) { + for (M in c(0.0, 0.05, 0.1, 0.2, 0.5)) { + cases[[length(cases) + 1]] <- list( + beta = beta, sigma = sigma, num_pre = npre, num_post = npost, + l_vec = l, M = M, alpha = 0.05 + ) + } + } + } + } +} + +run_flci <- function(c) { + r <- suppressWarnings(findOptimalFLCI( + betahat = c$beta, sigma = matrix(unlist(c$sigma), nrow = length(c$beta)), + M = c$M, numPrePeriods = c$num_pre, numPostPeriods = c$num_post, + l_vec = c$l_vec, alpha = c$alpha + )) + list(center = mean(r$FLCI), half_length = (r$FLCI[2] - r$FLCI[1]) / 2, + optimal_vec = as.numeric(r$optimalVec)) +} + +# stock-R tier first (unmodified MC .qfoldednormal) +stock <- lapply(cases, function(c) tryCatch(run_flci(c)$center, error = function(e) NA)) + +# override-R tier (deterministic analytical quantile) -- PRIMARY +assignInNamespace(".qfoldednormal", qfold_analytic, "HonestDiD") +out <- vector("list", length(cases)) +for (i in seq_along(cases)) { + c <- cases[[i]] + ov <- tryCatch(run_flci(c), error = function(e) NULL) + out[[i]] <- list( + beta = c$beta, sigma = c$sigma, num_pre = c$num_pre, num_post = c$num_post, + l_vec = c$l_vec, M = c$M, alpha = c$alpha, + center = if (is.null(ov)) NA else ov$center, + half_length = if (is.null(ov)) NA else ov$half_length, + optimal_vec = if (is.null(ov)) NA else ov$optimal_vec, + stock_center = stock[[i]] + ) +} + +golden <- list( + meta = list( + did_version = as.character(packageVersion("HonestDiD")), + n_cases = length(cases), + note = paste0( + "Delta^SD optimal FLCI. `center`/`half_length`/`optimal_vec` are override-R ", + "(analytical .qfoldednormal -> deterministic outer problem; diff-diff matches ", + "to ~1e-3). `stock_center` is unmodified MC-R (diff-diff matches to ~1.4e-2; the ", + "gap is R's simulation noise on the near-flat width surface)." + ) + ), + cases = out +) +out_path <- file.path("benchmarks", "data", "honest_flci_golden.json") +writeLines(toJSON(golden, auto_unbox = TRUE, digits = 14, pretty = TRUE), out_path) +cat("Wrote", out_path, "-", length(cases), "cases\n") diff --git a/benchmarks/data/honest_flci_golden.json b/benchmarks/data/honest_flci_golden.json new file mode 100644 index 00000000..29f7c973 --- /dev/null +++ b/benchmarks/data/honest_flci_golden.json @@ -0,0 +1,2079 @@ +{ + "meta": { + "did_version": "0.2.6", + "n_cases": 90, + "note": "Delta^SD optimal FLCI. `center`/`half_length`/`optimal_vec` are override-R (analytical .qfoldednormal -> deterministic outer problem; diff-diff matches to ~1e-3). `stock_center` is unmodified MC-R (diff-diff matches to ~1.4e-2; the gap is R's simulation noise on the near-flat width surface)." + }, + "cases": [ + { + "beta": [1, 0, 1, 1.2], + "sigma": [ + [0.01, 0, 0, 0], + [0, 0.01, 0, 0], + [0, 0, 0.01, 0], + [0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 1, + "l_vec": 1, + "M": 0, + "alpha": 0.05, + "center": 1.48575528987607, + "half_length": 0.202875546401568, + "optimal_vec": [0.214101056232411, 0.143021320229767, 0.0716542336436621, 1], + "stock_center": 1.48575528987607 + }, + { + "beta": [1, 0, 1, 1.2], + "sigma": [ + [0.01, 0, 0, 0], + [0, 0.01, 0, 0], + [0, 0, 0.01, 0], + [0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 1, + "l_vec": 1, + "M": 0.05, + "alpha": 0.05, + "center": 1.52634895987866, + "half_length": 0.250459332503154, + "optimal_vec": [0.0314153336190004, 0.305410186411428, 0.294933626259655, 1], + "stock_center": 1.53269987482138 + }, + { + "beta": [1, 0, 1, 1.2], + "sigma": [ + [0.01, 0, 0, 0], + [0, 0.01, 0, 0], + [0, 0, 0.01, 0], + [0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 1, + "l_vec": 1, + "M": 0.1, + "alpha": 0.05, + "center": 1.67452641383249, + "half_length": 0.313458657958823, + "optimal_vec": [1.4015842980875e-10, 0.262736792932774, 0.474526413692334, 1], + "stock_center": 1.6769901069974 + }, + { + "beta": [1, 0, 1, 1.2], + "sigma": [ + [0.01, 0, 0, 0], + [0, 0.01, 0, 0], + [0, 0, 0.01, 0], + [0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 1, + "l_vec": 1, + "M": 0.2, + "alpha": 0.05, + "center": 2.03478246906161, + "half_length": 0.431217243166294, + "optimal_vec": [-5.22063031086743e-12, 0.0826087654750007, 0.834782469066833, 1], + "stock_center": 2.03568602943555 + }, + { + "beta": [1, 0, 1, 1.2], + "sigma": [ + [0.01, 0, 0, 0], + [0, 0.01, 0, 0], + [0, 0, 0.01, 0], + [0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 1, + "l_vec": 1, + "M": 0.5, + "alpha": 0.05, + "center": 2.19999999993086, + "half_length": 0.732617430726547, + "optimal_vec": [-1.0773491809276e-11, 4.53342779325044e-11, 0.999999999941632, 1], + "stock_center": 2.19999999993086 + }, + { + "beta": [1, 0, 1, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125], + [0.005, 0.01, 0.005, 0.0025], + [0.0025, 0.005, 0.01, 0.005], + [0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 1, + "l_vec": 1, + "M": 0, + "alpha": 0.05, + "center": 1.12853523123463, + "half_length": 0.195119452680227, + "optimal_vec": [0.42841075193424, 0.107321653181894, -0.49987552069961, 1], + "stock_center": 1.12853523123463 + }, + { + "beta": [1, 0, 1, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125], + [0.005, 0.01, 0.005, 0.0025], + [0.0025, 0.005, 0.01, 0.005], + [0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 1, + "l_vec": 1, + "M": 0.05, + "alpha": 0.05, + "center": 1.06873476216774, + "half_length": 0.271013845132539, + "optimal_vec": [0.159478512980705, 0.406154105932635, -0.290743750812968, 1], + "stock_center": 1.06624599124562 + }, + { + "beta": [1, 0, 1, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125], + [0.005, 0.01, 0.005, 0.0025], + [0.0025, 0.005, 0.01, 0.005], + [0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 1, + "l_vec": 1, + "M": 0.1, + "alpha": 0.05, + "center": 1.19412747799138, + "half_length": 0.351476184950717, + "optimal_vec": [1.08604539783501e-10, 0.502936260894609, -0.00587252211722639, 1], + "stock_center": 1.19632983187625 + }, + { + "beta": [1, 0, 1, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125], + [0.005, 0.01, 0.005, 0.0025], + [0.0025, 0.005, 0.01, 0.005], + [0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 1, + "l_vec": 1, + "M": 0.2, + "alpha": 0.05, + "center": 2.00143608768822, + "half_length": 0.484211636465734, + "optimal_vec": [-2.26527210459502e-11, 0.0992819561786276, 0.801436087710874, 1], + "stock_center": 2.00635347859419 + }, + { + "beta": [1, 0, 1, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125], + [0.005, 0.01, 0.005, 0.0025], + [0.0025, 0.005, 0.01, 0.005], + [0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 1, + "l_vec": 1, + "M": 0.5, + "alpha": 0.05, + "center": 2.19999999985492, + "half_length": 0.784897005287011, + "optimal_vec": [-8.57140210135209e-12, 8.12690573363712e-11, 0.999999999863488, 1], + "stock_center": 2.19999999985492 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0, + "alpha": 0.05, + "center": 1.48575528987607, + "half_length": 0.202875546401568, + "optimal_vec": [0.214101056232411, 0.143021320229767, 0.0716542336436621, 1, 0, 0, 0], + "stock_center": 1.48575528987607 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.05, + "alpha": 0.05, + "center": 1.52634895987866, + "half_length": 0.250459332503154, + "optimal_vec": [0.0314153336190004, 0.305410186411428, 0.294933626259655, 1, 0, 0, 0], + "stock_center": 1.53269987471633 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.1, + "alpha": 0.05, + "center": 1.67452641471952, + "half_length": 0.313458657958824, + "optimal_vec": [1.4015842310939e-10, 0.262736792489259, 0.474526414579359, 1, 0, 0, 0], + "stock_center": 1.6769901069974 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.2, + "alpha": 0.05, + "center": 2.03478246906161, + "half_length": 0.431217243166294, + "optimal_vec": [-5.22063031086743e-12, 0.0826087654750007, 0.834782469066833, 1, 0, 0, 0], + "stock_center": 2.03568602943555 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.5, + "alpha": 0.05, + "center": 2.19999999993086, + "half_length": 0.732617430726547, + "optimal_vec": [-1.0773491809276e-11, 4.53342779325044e-11, 0.999999999941632, 1, 0, 0, 0], + "stock_center": 2.19999999993086 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0, + "alpha": 0.05, + "center": 2.16428576305853, + "half_length": 0.163563493960891, + "optimal_vec": [0.535714071655053, 0.357143048603853, 0.178571691403476, 0.25, 0.25, 0.25, 0.25], + "stock_center": 2.16428576305853 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.05, + "alpha": 0.05, + "center": 2.203036571692, + "half_length": 0.476585989561021, + "optimal_vec": [0.361335423553363, 0.51214629059539, 0.391701148138642, 0.25, 0.25, 0.25, 0.25], + "stock_center": 2.20307733078885 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.1, + "alpha": 0.05, + "center": 2.2669454904766, + "half_length": 0.793333920385725, + "optimal_vec": [0.0737143014984663, 0.767812953245206, 0.743231188978131, 0.25, 0.25, 0.25, 0.25], + "stock_center": 2.26713765181091 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.2, + "alpha": 0.05, + "center": 2.65977452809088, + "half_length": 1.36906552502129, + "optimal_vec": [4.11068336655228e-11, 0.6451127359133, 1.20977452804977, 0.25, 0.25, 0.25, 0.25], + "stock_center": 2.66072105065913 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.5, + "alpha": 0.05, + "center": 3.95000000031175, + "half_length": 2.91935703682469, + "optimal_vec": [4.0242697899544e-11, -1.95204184872326e-10, 2.50000000027151, 0.25, 0.25, 0.25, 0.25], + "stock_center": 3.95000000031175 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0, + "alpha": 0.05, + "center": 1.12853523123463, + "half_length": 0.195119452680227, + "optimal_vec": [0.42841075193424, 0.107321653181894, -0.49987552069961, 1, 0, 0, 0], + "stock_center": 1.12853523123463 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.05, + "alpha": 0.05, + "center": 1.06873476216774, + "half_length": 0.271013845132539, + "optimal_vec": [0.159478512980705, 0.406154105932635, -0.290743750812968, 1, 0, 0, 0], + "stock_center": 1.06624599124562 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.1, + "alpha": 0.05, + "center": 1.19412747799138, + "half_length": 0.351476184950717, + "optimal_vec": [1.08604539783501e-10, 0.502936260894609, -0.00587252211722639, 1, 0, 0, 0], + "stock_center": 1.19632983187625 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.2, + "alpha": 0.05, + "center": 2.00143608768822, + "half_length": 0.484211636465734, + "optimal_vec": [-2.26527210459502e-11, 0.0992819561786276, 0.801436087710874, 1, 0, 0, 0], + "stock_center": 2.00635347859419 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.5, + "alpha": 0.05, + "center": 2.19999999985492, + "half_length": 0.784897005287011, + "optimal_vec": [-8.57140210135209e-12, 8.12690573363712e-11, 0.999999999863488, 1, 0, 0, 0], + "stock_center": 2.19999999985492 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0, + "alpha": 0.05, + "center": 1.99686909793972, + "half_length": 0.220160738811155, + "optimal_vec": [0.781223448087076, 0.195342001167747, -0.234354350147361, 0.25, 0.25, 0.25, 0.25], + "stock_center": 1.99686909793971 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.05, + "alpha": 0.05, + "center": 1.92633634125641, + "half_length": 0.54733738607121, + "optimal_vec": [0.463863543789754, 0.547968285582222, 0.012472797466653, 0.25, 0.25, 0.25, 0.25], + "stock_center": 1.92626099616327 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.1, + "alpha": 0.05, + "center": 1.87630389398119, + "half_length": 0.871814486720413, + "optimal_vec": [5.74918869788305e-10, 1.03684805243401, 0.426303893406269, 0.25, 0.25, 0.25, 0.25], + "stock_center": 1.8770263766978 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.2, + "alpha": 0.05, + "center": 2.95301773376133, + "half_length": 1.4522420168802, + "optimal_vec": [3.84654437601697e-11, 0.49849113308085, 1.50301773372287, 0.25, 0.25, 0.25, 0.25], + "stock_center": 2.95620513469913 + }, + { + "beta": [1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 3, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.5, + "alpha": 0.05, + "center": 3.9499999999982, + "half_length": 2.9634139743878, + "optimal_vec": [-4.91570811749368e-14, 9.92213579304548e-13, 2.49999999999825, 0.25, 0.25, 0.25, 0.25], + "stock_center": 3.9499999999982 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 1, + "l_vec": 1, + "M": 0, + "alpha": 0.05, + "center": 1.33187566931697, + "half_length": 0.197070359525451, + "optimal_vec": [0.065909839193805, 0.054942362943283, 0.0439678880504867, 0.0329864144593177, 0.021997942072683, 0.0110024706725523, 1], + "stock_center": 1.33187313423754 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 1, + "l_vec": 1, + "M": 0.05, + "alpha": 0.05, + "center": 1.50542263653962, + "half_length": 0.250459332450931, + "optimal_vec": [-3.4245848649899e-10, 1.08278841190608e-09, -9.91588721699393e-09, 0.0314171338831123, 0.305422646797961, 0.294903341079248, 1], + "stock_center": 1.51934132965076 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 1, + "l_vec": 1, + "M": 0.1, + "alpha": 0.05, + "center": 1.46273319578712, + "half_length": 0.313458658099554, + "optimal_vec": [3.03146636025285e-13, -1.40466840528848e-12, -5.50531752176287e-10, 1.18389855645546e-09, 0.262733196337348, 0.474533605963654, 1], + "stock_center": 1.46150806569029 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 1, + "l_vec": 1, + "M": 0.2, + "alpha": 0.05, + "center": 1.28260831015023, + "half_length": 0.431217243156205, + "optimal_vec": [-4.89917226658179e-13, -4.65322744414153e-12, -3.80446116313701e-12, -1.70921616465198e-10, 0.082608310154528, 0.834783380241148, 1], + "stock_center": 1.28215712411335 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 1, + "l_vec": 1, + "M": 0.5, + "alpha": 0.05, + "center": 1.20000000003056, + "half_length": 0.732617430686603, + "optimal_vec": [-3.09276802351849e-15, 2.36463914347115e-13, -1.72304106705361e-12, -4.85461043885798e-12, 3.22903956080424e-11, 0.99999999995576, 1], + "stock_center": 1.20000000003056 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 1, + "l_vec": 1, + "M": 0, + "alpha": 0.05, + "center": 1.41738944166983, + "half_length": 0.175185374899793, + "optimal_vec": [0.152105807950597, 0.0543662335552196, 0.0435090127710693, 0.0326451177807376, 0.0217746209481672, -0.499986595951255, 1], + "stock_center": 1.41738944166983 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 1, + "l_vec": 1, + "M": 0.05, + "alpha": 0.05, + "center": 1.60613081318417, + "half_length": 0.271013845350722, + "optimal_vec": [-2.3531121085276e-11, -6.07942523789564e-12, 1.04382224199601e-10, 0.159483999554578, 0.406130813103321, -0.290713625116427, 1], + "stock_center": 1.61913068707605 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 1, + "l_vec": 1, + "M": 0.1, + "alpha": 0.05, + "center": 1.70293329156709, + "half_length": 0.351476184946541, + "optimal_vec": [-1.25631714173782e-11, 3.47408480445341e-13, -5.1464787632903e-11, 3.340390082798e-10, 0.502933291631119, -0.00586658398809442, 1], + "stock_center": 1.70116691108177 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 1, + "l_vec": 1, + "M": 0.2, + "alpha": 0.05, + "center": 1.29928095956085, + "half_length": 0.484211636477307, + "optimal_vec": [-1.21391829553898e-13, 1.54210903748937e-14, -1.56219264194734e-13, 9.79197148941091e-13, 0.09928095956113, 0.801438080876091, 1], + "stock_center": 1.29682463106467 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 1, + "l_vec": 1, + "M": 0.5, + "alpha": 0.05, + "center": 1.20000000000077, + "half_length": 0.784897005289569, + "optimal_vec": [-1.26498038438498e-14, 1.06611054537432e-17, -1.26923411949627e-14, -2.59862630767557e-14, 7.90957523090197e-13, 0.999999999998674, 1], + "stock_center": 1.20000000000077 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0, + "alpha": 0.05, + "center": 1.33187566931697, + "half_length": 0.197070359525451, + "optimal_vec": [0.065909839193805, 0.054942362943283, 0.0439678880504867, 0.0329864144593177, 0.021997942072683, 0.0110024706725523, 1, 0, 0, 0], + "stock_center": 1.33187313423754 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.05, + "alpha": 0.05, + "center": 1.50542263653962, + "half_length": 0.250459332450931, + "optimal_vec": [-3.4245848649899e-10, 1.08278841190608e-09, -9.91588721699393e-09, 0.0314171338831123, 0.305422646797961, 0.294903341079248, 1, 0, 0, 0], + "stock_center": 1.51934132965076 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.1, + "alpha": 0.05, + "center": 1.46273319578712, + "half_length": 0.313458658099554, + "optimal_vec": [3.03146636025285e-13, -1.40466840528848e-12, -5.50531752176287e-10, 1.18389855645546e-09, 0.262733196337348, 0.474533605963654, 1, 0, 0, 0], + "stock_center": 1.46150806569029 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.2, + "alpha": 0.05, + "center": 1.28260831015023, + "half_length": 0.431217243156205, + "optimal_vec": [-4.89917226658179e-13, -4.65322744414153e-12, -3.80446116313701e-12, -1.70921616465198e-10, 0.082608310154528, 0.834783380241148, 1, 0, 0, 0], + "stock_center": 1.28215712411335 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.5, + "alpha": 0.05, + "center": 1.20000000003056, + "half_length": 0.732617430686603, + "optimal_vec": [-3.09276802351849e-15, 2.36463914347115e-13, -1.72304106705361e-12, -4.85461043885798e-12, 3.22903956080424e-11, 0.99999999995576, 1, 0, 0, 0], + "stock_center": 1.20000000003056 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0, + "alpha": 0.05, + "center": 1.77968916886842, + "half_length": 0.110643626251895, + "optimal_vec": [0.164774610165514, 0.137355908969051, 0.109919714305232, 0.0824660261300144, 0.0549948443976772, 0.0275061690473202, 0.25, 0.25, 0.25, 0.25], + "stock_center": 1.77968916886842 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.05, + "alpha": 0.05, + "center": 1.98684729321362, + "half_length": 0.476444800612413, + "optimal_vec": [-1.11663707379478e-12, -0.0169014406329559, 0.0338028817057058, 0.352561493207836, 0.50304441150903, 0.385522373677846, 0.25, 0.25, 0.25, 0.25], + "stock_center": 1.98688147188094 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.1, + "alpha": 0.05, + "center": 2.21780552489426, + "half_length": 0.793333922148363, + "optimal_vec": [-4.41380832365375e-11, 1.79282738651468e-10, -4.9332226657723e-09, 0.0737119369557212, 0.76780552987162, 0.743253148489679, 0.25, 0.25, 0.25, 0.25], + "stock_center": 2.21857078983997 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.2, + "alpha": 0.05, + "center": 2.09511385536674, + "half_length": 1.36906552520197, + "optimal_vec": [-4.35099114453907e-14, 7.84403647469565e-13, -1.79860280461511e-11, 3.55181999957773e-11, 0.645113855384773, 1.20977228919167, 0.25, 0.25, 0.25, 0.25], + "stock_center": 2.09464077950644 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.5, + "alpha": 0.05, + "center": 1.45000000000544, + "half_length": 2.91935703704354, + "optimal_vec": [4.95422271903096e-17, 2.75581885452725e-16, -3.82376063589096e-15, -1.34087294096304e-12, 5.44720153491374e-12, 2.49999999999325, 0.25, 0.25, 0.25, 0.25], + "stock_center": 1.45000000000544 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0, + "alpha": 0.05, + "center": 1.41738944166983, + "half_length": 0.175185374899793, + "optimal_vec": [0.152105807950597, 0.0543662335552196, 0.0435090127710693, 0.0326451177807376, 0.0217746209481672, -0.499986595951255, 1, 0, 0, 0], + "stock_center": 1.41738944166983 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.05, + "alpha": 0.05, + "center": 1.60613081318417, + "half_length": 0.271013845350722, + "optimal_vec": [-2.3531121085276e-11, -6.07942523789564e-12, 1.04382224199601e-10, 0.159483999554578, 0.406130813103321, -0.290713625116427, 1, 0, 0, 0], + "stock_center": 1.61913068707605 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.1, + "alpha": 0.05, + "center": 1.70293329156709, + "half_length": 0.351476184946541, + "optimal_vec": [-1.25631714173782e-11, 3.47408480445341e-13, -5.1464787632903e-11, 3.340390082798e-10, 0.502933291631119, -0.00586658398809442, 1, 0, 0, 0], + "stock_center": 1.70116691108177 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.2, + "alpha": 0.05, + "center": 1.29928095956085, + "half_length": 0.484211636477307, + "optimal_vec": [-1.21391829553898e-13, 1.54210903748937e-14, -1.56219264194734e-13, 9.79197148941091e-13, 0.09928095956113, 0.801438080876091, 1, 0, 0, 0], + "stock_center": 1.29682463106467 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.5, + "alpha": 0.05, + "center": 1.20000000000077, + "half_length": 0.784897005289569, + "optimal_vec": [-1.26498038438498e-14, 1.06611054537432e-17, -1.26923411949627e-14, -2.59862630767557e-14, 7.90957523090197e-13, 0.999999999998674, 1, 0, 0, 0], + "stock_center": 1.20000000000077 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0, + "alpha": 0.05, + "center": 1.84628593996063, + "half_length": 0.154729522105068, + "optimal_vec": [0.277388418690013, 0.0990747458544249, 0.0792626425662937, 0.0594493535334689, 0.0396348787043244, -0.234372629066059, 0.25, 0.25, 0.25, 0.25], + "stock_center": 1.84628593996063 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.05, + "alpha": 0.05, + "center": 1.99798408184906, + "half_length": 0.547337386156363, + "optimal_vec": [-3.54492358866963e-10, 1.17715723301269e-11, 1.8171361351939e-09, 0.463854988228565, 0.547984080386418, 0.0124668693315855, 0.25, 0.25, 0.25, 0.25], + "stock_center": 1.99834332376588 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.1, + "alpha": 0.05, + "center": 2.48684732872689, + "half_length": 0.871814486776208, + "optimal_vec": [-2.20779111586884e-11, -8.41599472160002e-13, -3.18660357495175e-11, 1.21048294985131e-09, 1.03684732878084, 0.426305339072191, 0.25, 0.25, 0.25, 0.25], + "stock_center": 2.48649120973121 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.2, + "alpha": 0.05, + "center": 1.94849504933893, + "half_length": 1.45224201679935, + "optimal_vec": [-2.07652753140384e-11, -2.75372566372202e-14, -2.22412845543318e-11, 1.46585579684738e-10, 0.498495049381933, 1.5030099010095, 0.25, 0.25, 0.25, 0.25], + "stock_center": 1.94690524331711 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 6, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.5, + "alpha": 0.05, + "center": 1.45000000002691, + "half_length": 2.96341397436582, + "optimal_vec": [-4.64085212236516e-13, 5.29565372145751e-15, -4.78922580823796e-13, -1.21829019242584e-12, 2.78491680632773e-11, 2.49999999995259, 0.25, 0.25, 0.25, 0.25], + "stock_center": 1.45000000002691 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 1, + "l_vec": 1, + "M": 0, + "alpha": 0.05, + "center": 1.28795792753731, + "half_length": 0.196339950687225, + "optimal_vec": [0.0312554285202264, 0.0279352417250851, 0.0245756046108189, 0.0211782471711751, 0.0177430831198785, 0.0142701944987002, 0.0107594627572928, 0.0072108399226046, 0.00362434852909169, 1], + "stock_center": 1.28795792666614 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 1, + "l_vec": 1, + "M": 0.05, + "alpha": 0.05, + "center": 1.52635152442134, + "half_length": 0.250459332712714, + "optimal_vec": [-4.49953573676872e-15, -2.25267753532434e-14, 3.97384695002165e-13, 1.18339380128618e-12, -4.48873431694716e-11, -3.9250349830022e-10, 0.0314158838575295, 0.3054083548019, 0.294935640608305, 1], + "stock_center": 1.53317336217775 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 1, + "l_vec": 1, + "M": 0.1, + "alpha": 0.05, + "center": 1.67451946618141, + "half_length": 0.313458658226072, + "optimal_vec": [-9.3002915058991e-17, 4.47315577051874e-16, 1.55392285797759e-15, -3.17124314391148e-13, 2.11080400034265e-12, -3.96110559088371e-11, 8.48026804066911e-11, 0.262740266901697, 0.474519466094492, 1], + "stock_center": 1.67699209475662 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 1, + "l_vec": 1, + "M": 0.2, + "alpha": 0.05, + "center": 2.03478494663074, + "half_length": 0.431217243250469, + "optimal_vec": [-1.2175697615955e-17, 4.15954023469245e-16, 3.66028003593276e-15, -3.94431891696161e-14, -9.68051011917959e-13, -1.51750323500812e-11, -4.62313690114893e-11, 0.0826075267621639, 0.834784946677934, 1], + "stock_center": 2.03568519758099 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 1, + "l_vec": 1, + "M": 0.5, + "alpha": 0.05, + "center": 2.19999999994708, + "half_length": 0.732617430601513, + "optimal_vec": [1.72561709341197e-17, 1.31352467078968e-16, -2.2603510897633e-15, 1.34597902212634e-14, 2.61237533380929e-13, -2.35693594950777e-12, -4.1472740258815e-12, 3.48184228387357e-11, 0.999999999950971, 1], + "stock_center": 2.19999999994708 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 1, + "l_vec": 1, + "M": 0, + "alpha": 0.05, + "center": 0.83708650027439, + "half_length": 0.17172058892371, + "optimal_vec": [0.078188567582435, 0.0313345805589287, 0.0274415003996923, 0.0235425025967817, 0.0196369448211537, 0.0157249836217929, 0.0118065989305299, 0.00788173961172861, -0.499987111459421, 1], + "stock_center": 0.83708650027439 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 1, + "l_vec": 1, + "M": 0.05, + "alpha": 0.05, + "center": 1.0687722859858, + "half_length": 0.271013845357577, + "optimal_vec": [-7.09293017587994e-13, -9.92396080442584e-16, -7.21472654163123e-13, -1.53370282890146e-12, -3.69639031880464e-12, 2.23633577022756e-11, 0.15949008733251, 0.406123769649347, -0.29071780134158, 1], + "stock_center": 1.06615415409259 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 1, + "l_vec": 1, + "M": 0.1, + "alpha": 0.05, + "center": 1.19413000066541, + "half_length": 0.351476184960583, + "optimal_vec": [-9.57193643647633e-13, -6.41556561276844e-15, -9.65716346845492e-13, -1.94432142786212e-12, -3.7721894093942e-12, -9.7636332292967e-12, 1.40000845639245e-10, 0.502934999567348, -0.00586999946890049, 1], + "stock_center": 1.19432390795758 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 1, + "l_vec": 1, + "M": 0.2, + "alpha": 0.05, + "center": 2.00144341862729, + "half_length": 0.484211636473335, + "optimal_vec": [-6.02283097675185e-14, 4.0981449185069e-15, -5.81151842038834e-14, -1.12077335362849e-13, -2.23284013919614e-13, -4.98285142650629e-13, 3.430470302469e-12, 0.099278290685084, 0.801443418624203, 1], + "stock_center": 2.00635225941997 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 1, + "l_vec": 1, + "M": 0.5, + "alpha": 0.05, + "center": 2.19999999999698, + "half_length": 0.784897005289729, + "optimal_vec": [-3.56086720187173e-15, -2.33057076930117e-18, -3.56185372140435e-15, -7.12654569877834e-15, -1.42579550792012e-14, -2.85464545582604e-14, -5.60309426242504e-14, 1.72602140082278e-12, 0.999999999997053, 1], + "stock_center": 2.19999999999698 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0, + "alpha": 0.05, + "center": 1.28795792753731, + "half_length": 0.196339950687225, + "optimal_vec": [0.0312554285202264, 0.0279352417250851, 0.0245756046108189, 0.0211782471711751, 0.0177430831198785, 0.0142701944987002, 0.0107594627572928, 0.0072108399226046, 0.00362434852909169, 1, 0, 0, 0], + "stock_center": 1.28795792753731 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.05, + "alpha": 0.05, + "center": 1.52635152442134, + "half_length": 0.250459332712714, + "optimal_vec": [-4.49953573676872e-15, -2.25267753532434e-14, 3.97384695002165e-13, 1.18339380128618e-12, -4.48873431694716e-11, -3.9250349830022e-10, 0.0314158838575295, 0.3054083548019, 0.294935640608305, 1, 0, 0, 0], + "stock_center": 1.53317336217775 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.1, + "alpha": 0.05, + "center": 1.67451946618141, + "half_length": 0.313458658226072, + "optimal_vec": [-9.3002915058991e-17, 4.47315577051874e-16, 1.55392285797759e-15, -3.17124314391148e-13, 2.11080400034265e-12, -3.96110559088371e-11, 8.48026804066911e-11, 0.262740266901697, 0.474519466094492, 1, 0, 0, 0], + "stock_center": 1.67699209475662 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.2, + "alpha": 0.05, + "center": 2.03478494663074, + "half_length": 0.431217243250469, + "optimal_vec": [-1.2175697615955e-17, 4.15954023469245e-16, 3.66028003593276e-15, -3.94431891696161e-14, -9.68051011917959e-13, -1.51750323500812e-11, -4.62313690114893e-11, 0.0826075267621639, 0.834784946677934, 1, 0, 0, 0], + "stock_center": 2.03568519758099 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.5, + "alpha": 0.05, + "center": 2.19999999994708, + "half_length": 0.732617430601513, + "optimal_vec": [1.72561709341197e-17, 1.31352467078968e-16, -2.2603510897633e-15, 1.34597902212634e-14, 2.61237533380929e-13, -2.35693594950777e-12, -4.1472740258815e-12, 3.48184228387357e-11, 0.999999999950971, 1, 0, 0, 0], + "stock_center": 2.19999999994708 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0, + "alpha": 0.05, + "center": 1.66956679570763, + "half_length": 0.102206028356894, + "optimal_vec": [0.0786306741617569, 0.0700242723243475, 0.0614215848911145, 0.0527448301925268, 0.0440625030449869, 0.0353335293624815, 0.0265592816537957, 0.0177462798591957, 0.00889275195597317, 0.25, 0.25, 0.25, 0.25], + "stock_center": 1.66956679570763 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.05, + "alpha": 0.05, + "center": 2.17118819292033, + "half_length": 0.476444800358906, + "optimal_vec": [-5.23620548360271e-13, -1.51640451245048e-11, 2.30158443518751e-10, -1.0775113241737e-09, -0.0169004978361063, 0.0338010009723938, 0.352550006884441, 0.503054892956137, 0.385538683642357, 0.25, 0.25, 0.25, 0.25], + "stock_center": 2.17138697298911 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.1, + "alpha": 0.05, + "center": 2.26695088562278, + "half_length": 0.793333922154576, + "optimal_vec": [-1.28349780724368e-13, 4.23793235422053e-13, 1.1231867699348e-12, -1.72044496349587e-11, 1.64697066991694e-11, -1.5495182063203e-09, 0.0737133664072297, 0.767811193896531, 0.743237519198087, 0.25, 0.25, 0.25, 0.25], + "stock_center": 2.26714248412014 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.2, + "alpha": 0.05, + "center": 2.65977778754572, + "half_length": 1.36906552517266, + "optimal_vec": [6.45469066448533e-16, -3.33827677718874e-16, -4.43571426909953e-14, -1.49651234406312e-14, 1.25779001379668e-12, -1.15971945096447e-10, 2.44562105122875e-10, 0.645111106213814, 1.20977778729995, 0.25, 0.25, 0.25, 0.25], + "stock_center": 2.66071901714216 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.5, + "alpha": 0.05, + "center": 3.94999999999451, + "half_length": 2.91935703704313, + "optimal_vec": [-9.82367820994647e-21, -3.24710725667719e-19, -5.04071028749733e-19, 3.06675809103992e-17, 1.28162797838801e-16, -1.9602454712378e-15, -9.07233977678294e-13, 3.67326288749822e-12, 2.49999999999542, 0.25, 0.25, 0.25, 0.25], + "stock_center": 3.94999999999451 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06, 2.44140625e-06], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [2.44140625e-06, 4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0, + "alpha": 0.05, + "center": 0.83708650027439, + "half_length": 0.17172058892371, + "optimal_vec": [0.078188567582435, 0.0313345805589287, 0.0274415003996923, 0.0235425025967817, 0.0196369448211537, 0.0157249836217929, 0.0118065989305299, 0.00788173961172861, -0.499987111459421, 1, 0, 0, 0], + "stock_center": 0.83708650027439 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06, 2.44140625e-06], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [2.44140625e-06, 4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.05, + "alpha": 0.05, + "center": 1.0687722859858, + "half_length": 0.271013845357577, + "optimal_vec": [-7.09293017587994e-13, -9.92396080442584e-16, -7.21472654163123e-13, -1.53370282890146e-12, -3.69639031880464e-12, 2.23633577022756e-11, 0.15949008733251, 0.406123769649347, -0.29071780134158, 1, 0, 0, 0], + "stock_center": 1.06615415409259 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06, 2.44140625e-06], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [2.44140625e-06, 4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.1, + "alpha": 0.05, + "center": 1.19413000066541, + "half_length": 0.351476184960583, + "optimal_vec": [-9.57193643647633e-13, -6.41556561276844e-15, -9.65716346845492e-13, -1.94432142786212e-12, -3.7721894093942e-12, -9.7636332292967e-12, 1.40000845639245e-10, 0.502934999567348, -0.00586999946890049, 1, 0, 0, 0], + "stock_center": 1.19432390795758 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06, 2.44140625e-06], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [2.44140625e-06, 4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.2, + "alpha": 0.05, + "center": 2.00144341862729, + "half_length": 0.484211636473335, + "optimal_vec": [-6.02283097675185e-14, 4.0981449185069e-15, -5.81151842038834e-14, -1.12077335362849e-13, -2.23284013919614e-13, -4.98285142650629e-13, 3.430470302469e-12, 0.099278290685084, 0.801443418624203, 1, 0, 0, 0], + "stock_center": 2.00635225941997 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06, 2.44140625e-06], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [2.44140625e-06, 4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [1, 0, 0, 0], + "M": 0.5, + "alpha": 0.05, + "center": 2.19999999999698, + "half_length": 0.784897005289729, + "optimal_vec": [-3.56086720187173e-15, -2.33057076930117e-18, -3.56185372140435e-15, -7.12654569877834e-15, -1.42579550792012e-14, -2.85464545582604e-14, -5.60309426242504e-14, 1.72602140082278e-12, 0.999999999997053, 1, 0, 0, 0], + "stock_center": 2.19999999999698 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06, 2.44140625e-06], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [2.44140625e-06, 4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0, + "alpha": 0.05, + "center": 1.46553153041823, + "half_length": 0.141234197531605, + "optimal_vec": [0.142417407216904, 0.0571212038046479, 0.0500449635608326, 0.0429519594270836, 0.0358414307095063, 0.0287142772234162, 0.0215698446353599, 0.0144078081439832, -0.234342115704371, 0.25, 0.25, 0.25, 0.25], + "stock_center": 1.46553153041823 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06, 2.44140625e-06], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [2.44140625e-06, 4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.05, + "alpha": 0.05, + "center": 1.9263369562888, + "half_length": 0.547337386227356, + "optimal_vec": [-2.07602554117212e-11, 1.15960166916395e-12, -1.96845624830758e-11, -4.76618873569839e-11, -5.65856838851769e-10, 2.99512404744075e-09, 0.463869924508462, 0.547961592759728, 0.0124670323866369, 0.25, 0.25, 0.25, 0.25], + "stock_center": 1.92626205387483 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06, 2.44140625e-06], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [2.44140625e-06, 4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.1, + "alpha": 0.05, + "center": 1.8763090766382, + "half_length": 0.871814486784312, + "optimal_vec": [-9.17276889406284e-13, 6.52872075756517e-15, -9.17790798084749e-13, -1.8649564535257e-12, -4.08519336820438e-12, -1.10294242823093e-11, 3.44955403845706e-10, 1.03684546137868, 0.426309076299168, 0.25, 0.25, 0.25, 0.25], + "stock_center": 1.87704548356434 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06, 2.44140625e-06], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [2.44140625e-06, 4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.2, + "alpha": 0.05, + "center": 2.95301862473338, + "half_length": 1.45224201688975, + "optimal_vec": [-1.10683183776666e-13, 1.87932698050233e-16, -1.10746414514918e-13, -2.21633627632278e-13, -4.46896286918287e-13, -1.02544050290325e-12, 5.04240750554483e-12, 0.498490687632721, 1.50301862472901, 0.25, 0.25, 0.25, 0.25], + "stock_center": 2.95620098482395 + }, + { + "beta": [1, 0, 1, 0, 1, 0, 1, 0, 1, 1.2, 1.36666666666667, 1.53333333333333, 1.7], + "sigma": [ + [0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06, 2.44140625e-06], + [0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06, 4.8828125e-06], + [0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05, 9.765625e-06], + [0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05, 1.953125e-05], + [0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05, 3.90625e-05], + [0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625, 7.8125e-05], + [0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125, 0.00015625], + [7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625, 0.0003125], + [3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125, 0.000625], + [1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025, 0.00125], + [9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005, 0.0025], + [4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01, 0.005], + [2.44140625e-06, 4.8828125e-06, 9.765625e-06, 1.953125e-05, 3.90625e-05, 7.8125e-05, 0.00015625, 0.0003125, 0.000625, 0.00125, 0.0025, 0.005, 0.01] + ], + "num_pre": 9, + "num_post": 4, + "l_vec": [0.25, 0.25, 0.25, 0.25], + "M": 0.5, + "alpha": 0.05, + "center": 3.9499999999979, + "half_length": 2.96341397439769, + "optimal_vec": [-2.9437718098552e-15, 5.09993128640104e-18, -2.94060794802578e-15, -5.8762387686928e-15, -1.17533429253264e-14, -2.35778666615341e-14, -4.96997605132596e-14, 1.40615553048958e-12, 2.49999999999796, 0.25, 0.25, 0.25, 0.25], + "stock_center": 3.9499999999979 + } + ] +} diff --git a/diff_diff/honest_did.py b/diff_diff/honest_did.py index bf6da448..9308a71f 100644 --- a/diff_diff/honest_did.py +++ b/diff_diff/honest_did.py @@ -1709,7 +1709,181 @@ def _compute_worst_case_bias( return np.inf -def _compute_optimal_flci( +def _flci_bias_constant(l_vec: np.ndarray, num_post: int) -> float: + """Constant term of the worst-case-bias objective (R's + ``.createObjectiveObjectForBias``): ``sum_s |sum_{k=1..s} k*l[Tbar-s+k]| - + sum_s s*l[s]``. For NONNEGATIVE (averaging) ``l_vec`` the closed form + ``M*(constant + sum_i |cumsum(w)_i|)`` equals ``_compute_worst_case_bias(w, + ..., M)`` (the LP oracle) to machine precision; for signed/contrast ``l_vec`` + it intentionally follows R's conservative closed form (the FLCI still matches + R). See REGISTRY.md Delta^SD FLCI note. + """ + c = 0.0 + for s in range(1, num_post + 1): + seg = l_vec[num_post - s : num_post] + c += abs(float(np.dot(np.arange(1, s + 1), seg))) + c -= float(np.dot(np.arange(1, num_post + 1), l_vec)) + return c + + +def _flci_precompute(sigma: np.ndarray, l_vec: np.ndarray, num_pre: int, num_post: int) -> dict: + """Precompute the FLCI inner problem's quadratic-variance and bias pieces + (``sigma`` ordered ``[pre; post]``). ``D`` is the first-difference operator + (identical to the pre-block of ``_w_to_v``), ``L`` the cumsum operator, so the + estimator variance is ``var(w) = w'Qw + q'w + c0`` and the linear-trend + neutrality target is ``sum(w) = sum_s s*l[s]`` (R & R 2023 Eq. 17).""" + s_pre = sigma[:num_pre, :num_pre] + s_pp = sigma[:num_pre, num_pre:] + s_post = float(l_vec @ sigma[num_pre:, num_pre:] @ l_vec) + d_mat = np.eye(num_pre) + for col in range(num_pre - 1): + d_mat[col + 1, col] = -1.0 + return { + "Q": d_mat.T @ s_pre @ d_mat, + "q": 2.0 * (d_mat.T @ s_pp @ l_vec), + "c0": s_post, + "L": np.tril(np.ones((num_pre, num_pre))), + "target": float(np.dot(np.arange(1, num_post + 1), l_vec)), + "constant": _flci_bias_constant(l_vec, num_post), + "num_pre": num_pre, + } + + +def _flci_var(w: np.ndarray, P: dict) -> float: + return float(w @ P["Q"] @ w + P["q"] @ w + P["c0"]) + + +def _flci_w_min(P: dict) -> np.ndarray: + """Minimum-variance weights subject to ``sum(w)=target`` via the + equality-constrained KKT system (the abs-value constraints are non-binding for + the min-variance objective; verified against R's ``.findLowestH``).""" + k = P["num_pre"] + kkt = np.zeros((k + 1, k + 1)) + kkt[:k, :k] = 2.0 * P["Q"] + kkt[:k, k] = 1.0 + kkt[k, :k] = 1.0 + rhs = np.concatenate([-P["q"], [P["target"]]]) + try: + sol = np.linalg.solve(kkt, rhs) + except np.linalg.LinAlgError: + sol = np.linalg.lstsq(kkt, rhs, rcond=None)[0] + return sol[:k] + + +def _flci_h_bounds(P: dict): + """FLCI bracket: ``hmin`` = minimum estimator SD (R ``.findLowestH``), ``h0`` = + SD at the minimum-bias weights (all mass on the boundary slope, R + ``.findHForMinimumBias``). Both match R's closed forms to ~1e-8.""" + w_min = _flci_w_min(P) + hmin = float(np.sqrt(max(_flci_var(w_min, P), 0.0))) + w_hi = np.zeros(P["num_pre"]) + w_hi[-1] = P["target"] + h0 = float(np.sqrt(max(_flci_var(w_hi, P), 0.0))) + return hmin, h0, w_min + + +def _flci_min_bias_given_h(P: dict, h: float, x0_w: Optional[np.ndarray] = None): + """Inner solve (R's ``.findWorstCaseBiasGivenH``): minimize the worst-case bias + ``constant + sum_i|cumsum(w)_i|`` subject to ``sum(w)=target`` and the + second-order-cone ``var(w) <= h^2``, as a smooth convex QCQP over ``x=[U; w]`` + (``U >= |Lw|``) via SLSQP. Returns ``(w, bias_unit, feasible)``. + + Gating is on FEASIBILITY (``var<=h^2`` and ``sum=target``), NOT ``res.success`` + -- SLSQP frequently reports ``success=False`` on a correct convex optimum. + """ + from scipy.optimize import minimize as _sp_minimize + + k = P["num_pre"] + L = P["L"] + if k == 1: + w = np.array([P["target"]]) + return w, P["constant"] + float(np.abs(L @ w).sum()), True + if x0_w is None: + x0_w = _flci_w_min(P) + x0 = np.concatenate([np.abs(L @ x0_w), x0_w]) + c = np.concatenate([np.ones(k), np.zeros(k)]) + cons = [ + { + "type": "ineq", + "fun": lambda x: x[:k] - L @ x[k:], + "jac": lambda x: np.hstack([np.eye(k), -L]), + }, + { + "type": "ineq", + "fun": lambda x: x[:k] + L @ x[k:], + "jac": lambda x: np.hstack([np.eye(k), L]), + }, + { + "type": "eq", + "fun": lambda x: float(np.sum(x[k:]) - P["target"]), + "jac": lambda x: np.concatenate([np.zeros(k), np.ones(k)]), + }, + { + "type": "ineq", + "fun": lambda x: h * h - _flci_var(x[k:], P), + "jac": lambda x: np.concatenate([np.zeros(k), -(2.0 * P["Q"] @ x[k:] + P["q"])]), + }, + ] + res = _sp_minimize( + lambda x: float(c @ x), + x0, + jac=lambda x: c, + constraints=cons, + method="SLSQP", + options={"ftol": 1e-12, "maxiter": 500}, + ) + w = res.x[k:] + feasible = (_flci_var(w, P) <= h * h + 1e-7) and (abs(float(np.sum(w)) - P["target"]) < 1e-6) + return w, P["constant"] + float(np.abs(L @ w).sum()), bool(feasible) + + +def _flci_optimal_h( + P: dict, + hmin: float, + h0: float, + M: float, + alpha: float, + df: Optional[int], + levels=(40, 120, 120), +) -> float: + """Argmin over the estimator SD ``h`` of the half-length + ``W(h)=cv(M*bias(h)/h)*h`` (R's ``.findOptimalCIDerivativeBisection``), by a + multi-level GRID ZOOM. Each level restarts from ``w_min`` and warm-starts the + inner solve within the level (``h`` ascending), which keeps the objective + smooth despite ~1e-6 SLSQP noise; zooming refines resolution. + + A grid zoom (not R's derivative-bisection or an envelope-theorem derivative) is + used deliberately: the width surface is near-flat at the optimum AND the + min-bias inner solutions are degenerate (most ``cumsum(w)`` components sit at + the abs-value kink), so ``mu`` is not recoverable from ``sign(Lw)`` and + finite-difference derivatives are swamped by solver noise. Matches R's + (deterministic) center to <3e-4 across the validated stress grid. + """ + if h0 - hmin < 1e-12: + return h0 + lo, hi = hmin, h0 + gi, grid = 0, np.array([hmin]) + for npts in levels: + grid = np.linspace(lo, hi, npts) + seed = _flci_w_min(P) + vals = np.full(npts, np.inf) + for i, h in enumerate(grid): + if h <= 0.0: # rank-deficient covariance -> hmin=0; skip (M*bias/h undefined) + continue + w, bias_unit, ok = _flci_min_bias_given_h(P, h, x0_w=seed) + if ok and np.isfinite(bias_unit): + vals[i] = _cv_alpha(M * bias_unit / h, alpha, df=df) * h + seed = w + gi = int(np.argmin(vals)) + if not np.isfinite(vals[gi]): + return float("nan") + step = (hi - lo) / (npts - 1) + lo = max(grid[gi] - 2 * step, hmin) + hi = min(grid[gi] + 2 * step, h0) + return float(grid[gi]) + + +def _flci_solve( beta_pre: np.ndarray, beta_post: np.ndarray, sigma: np.ndarray, @@ -1719,7 +1893,7 @@ def _compute_optimal_flci( M: float, alpha: float = 0.05, df: Optional[int] = None, -) -> Tuple[float, float]: +) -> Tuple[float, float, Optional[np.ndarray]]: """ Compute the optimal Fixed Length Confidence Interval for Delta^SD. @@ -1765,72 +1939,68 @@ def _compute_optimal_flci( Lower bound of FLCI. ci_ub : float Upper bound of FLCI. + optimal_vec : np.ndarray or None + The optimal affine-estimator direction ``v`` (``theta_hat = v'beta``), for + parity testing; ``None`` when the CI is NaN. """ - T = num_pre - Tbar = num_post - - # Survey df gating: df<=0 sentinel → NaN inference + # Negative smoothness is invalid (cv_alpha's abs() would silently treat it as + # +|M|); guard the direct helper path too (fit()/sensitivity_analysis() also + # validate, but tests call this directly). + if M < 0: + raise ValueError(f"M must be non-negative, got M={M}") + # Survey df<=0 sentinel -> NaN inference. if df is not None and df <= 0: - return np.nan, np.nan - - # T slopes total (s = -T+1, ..., 0), including boundary slope s=0. - # Linear-trend neutrality requires sum(w) = sum_j j*l_j (Eq. 17). - n_slopes = T - target_sum = float(np.dot(np.arange(1, Tbar + 1), l_vec)) - - def flci_half_length(w_free): - """Compute FLCI half-length for given free slope weights.""" - # Reconstruct full w with constraint sum(w) = target_sum - if n_slopes == 1: - w = np.array([target_sum]) - elif len(w_free) == n_slopes - 1: - w = np.concatenate([w_free, [target_sum - np.sum(w_free)]]) - else: - w = w_free - - # Map w -> v for variance - v = _w_to_v(w, l_vec, T) - sigma_v = np.sqrt(float(v @ sigma @ v)) - if sigma_v <= 0: - return np.inf - - # Compute bias in fd-space - bias = _compute_worst_case_bias(w, l_vec, T, Tbar, M) - if not np.isfinite(bias): - return np.inf - - t = float(bias / sigma_v) - cv = _cv_alpha(t, alpha, df=df) - return float(sigma_v * cv) - - from scipy.optimize import minimize as scipy_minimize + return np.nan, np.nan, None - if n_slopes == 1: - # Only one slope weight, determined by constraint. - w_opt = np.array([target_sum]) - chi = flci_half_length(w_opt) - else: - # Optimize over T-1 free parameters (last w determined by sum constraint) - x0 = np.full(n_slopes - 1, target_sum / n_slopes) - - result = scipy_minimize( - flci_half_length, - x0=x0, - method="Nelder-Mead", - options={"maxiter": 500, "xatol": 1e-5, "fatol": 1e-6}, - ) - w_opt = np.concatenate([result.x, [target_sum - np.sum(result.x)]]) - chi = flci_half_length(result.x) - - # Build the estimator value: theta_hat = v'beta + P = _flci_precompute(sigma, l_vec, num_pre, num_post) beta_full = np.concatenate([beta_pre, beta_post]) - v_opt = _w_to_v(w_opt, l_vec, T) - theta_hat = float(v_opt @ beta_full) + with np.errstate(divide="ignore", invalid="ignore", over="ignore"): + if M == 0.0: + # Zero worst-case bias (linear trends): the FLCI estimator is simply the + # minimum-variance affine estimator, so this branch is unchanged from the + # prior optimizer's M=0 behaviour (min variance -> half-length z*sd). + w_opt = _flci_w_min(P) + hstar = float(np.sqrt(max(_flci_var(w_opt, P), 0.0))) + if hstar <= 0.0: + # Zero estimator SD (degenerate covariance) -> undefined inference. + return np.nan, np.nan, None + chi = _cv_alpha(0.0, alpha, df=df) * hstar + else: + hmin, h0, _ = _flci_h_bounds(P) + hstar = _flci_optimal_h(P, hmin, h0, M, alpha, df) + # hstar<=0 (zero SD, e.g. degenerate covariance) would divide by zero in + # M*bias/hstar; NaN the inference per the zero-SE convention. + if not np.isfinite(hstar) or hstar <= 0.0: + return np.nan, np.nan, None + w_opt, bias_unit, feasible = _flci_min_bias_given_h(P, hstar) + if not feasible: + return np.nan, np.nan, None + chi = _cv_alpha(M * bias_unit / hstar, alpha, df=df) * hstar + + v_opt = _w_to_v(w_opt, l_vec, num_pre) + theta_hat = float(v_opt @ beta_full) if not np.isfinite(chi): - return np.nan, np.nan + return np.nan, np.nan, None + return theta_hat - chi, theta_hat + chi, v_opt + - return theta_hat - chi, theta_hat + chi +def _compute_optimal_flci( + beta_pre: np.ndarray, + beta_post: np.ndarray, + sigma: np.ndarray, + l_vec: np.ndarray, + num_pre: int, + num_post: int, + M: float, + alpha: float = 0.05, + df: Optional[int] = None, +) -> Tuple[float, float]: + """Optimal Delta^SD FLCI ``(ci_lb, ci_ub)`` (Rambachan & Roth 2023 §4.1). + Thin wrapper over :func:`_flci_solve` (which also returns the optimal affine + estimator direction ``v`` for parity testing).""" + lb, ub, _ = _flci_solve(beta_pre, beta_post, sigma, l_vec, num_pre, num_post, M, alpha, df) + return lb, ub def _setup_moment_inequalities( @@ -2315,6 +2485,10 @@ def fit( Results containing bounds and robust confidence intervals. """ M = M if M is not None else self.M + # The fit()-time M override bypasses constructor validation; re-check here + # (a negative M would be silently treated as +|M| via cv_alpha's abs()). + if M < 0: + raise ValueError(f"M must be non-negative, got M={M}") # Extract event study parameters beta_hat, sigma, num_pre, num_post, pre_periods, post_periods, df_survey = ( @@ -2690,6 +2864,8 @@ def sensitivity_analysis( M_grid = [0, 0.1, 0.2, 0.3, 0.5, 0.75, 1.0] M_values = np.array(M_grid) + if np.any(M_values < 0): + raise ValueError(f"M must be non-negative; M_grid has a negative value: {M_grid}") bounds_list = [] ci_list = [] diff --git a/docs/methodology/REGISTRY.md b/docs/methodology/REGISTRY.md index 98fb462d..c351896e 100644 --- a/docs/methodology/REGISTRY.md +++ b/docs/methodology/REGISTRY.md @@ -3614,7 +3614,7 @@ Post-treatment consecutive first differences bounded by M̄ × max pre-treatment CRITICAL: δ_pre = β_pre pins pre-treatment violations to observed coefficients. Solved via LP (scipy.optimize.linprog). *Inference (Sections 3.2, 4.1):* -- Delta^SD: Optimal FLCI — jointly optimizes affine estimator direction and half-length via folded normal quantile cv_α(bias/se) (Equation 18). When `df_survey` is present, uses folded non-central t (`scipy.stats.nct`) instead of folded normal; `df_survey=0` → NaN inference. For M=0, uses `_get_critical_value(alpha, df)` (standard t/z). +- Delta^SD: Optimal FLCI — a nested convex program (inner: minimize worst-case bias at a fixed estimator SD `h`; outer: minimize the half-length over `h`) that matches R `HonestDiD::findOptimalFLCI`'s optimal affine estimator, using the folded-normal quantile cv_α(bias/se) (Equation 18). See the "Δ^SD FLCI optimizer" note below for the algorithm + R parity. When `df_survey` is present, uses folded non-central t (`scipy.stats.nct`) instead of folded normal; `df_survey=0` → NaN inference. For M=0, uses `_get_critical_value(alpha, df)` (standard t/z). - Delta^RM: Paper recommends ARP conditional/hybrid confidence sets (Equations 14-15, κ = α/10). Currently uses **naive FLCI** unconditionally (conservative — wider CIs, valid coverage). ARP infrastructure exists but is disabled. - **Note (deviation from R):** Delta^RM CIs use naive FLCI (`lb - z*se, ub + z*se`) instead of the paper's ARP hybrid. R's `HonestDiD` package implements full ARP conditional/hybrid. Our naive FLCI is conservative (wider, valid coverage) but does not adapt to the length of the identified set. ARP implementation deferred (see TODO.md). - **Note:** `method="combined"` (Delta^SDRM) uses naive FLCI on the intersection of Delta^SD and Delta^RM bounds. The paper proves FLCI is NOT consistent for Delta^SDRM (Proposition 4.2). The paper recommends ARP hybrid for non-SD restriction classes. This is a known conservative approximation; a runtime UserWarning is emitted. @@ -3629,7 +3629,37 @@ CRITICAL: δ_pre = β_pre pins pre-treatment violations to observed coefficients - Breakdown point: smallest M where CI includes zero - Negative M: not valid (constraints become infeasible) - **Note:** Δ^SD **empty estimated identified set** (the observed pre-trend's curvature exceeds M, so the `δ_pre = β_pre`-pinned identified-set LP is infeasible → `lb`/`ub` = NaN) does **not** suppress the FLCI. The optimal FLCI is an affine estimator whose worst-case bias is taken over `δ ∈ Δ^SD(M)` treating β as random, so it is well-defined given (Σ, M) regardless of whether the realized `β_pre` lies in Δ; R's `HonestDiD::createSensitivityResults` returns it in exactly this case. `_compute_smoothness_bounds` therefore returns the finite FLCI with `lb`/`ub` = NaN (empty id-set), matching R (prior behavior NaN-propagated the whole result, silently yielding no inference on high-curvature pre-trends). The naive fallback FLCI (diagonal Σ only) still requires finite id-set bounds and returns NaN CI when infeasible. Guarded by `test_infeasible_smoothness_fit_returns_flci_with_empty_idset`. -- **Note (deviation from R — Δ^SD FLCI optimizer at intermediate M):** The optimal-FLCI affine-estimator optimization (Nelder-Mead over slope weights) agrees with R `createSensitivityResults` to ~1e-3 at M=0 and at larger M, but diverges at **intermediate small M** (roughly `M ∈ [0.005, 0.02]` on wide pre/post windows): the CI **width** matches R to ~1e-3 while the **center** shifts by up to ~9% (npre=6/npost=4 event study). Not a local-minimum artifact (multi-start does not move it); the two implementations land on different affine estimators of near-equal length. Reconciliation with R's `.FLCI.computeFLCI` algorithm is deferred (see TODO.md). Coverage is unaffected (widths match); the shift is in the reported CI location. +- **Note (Δ^SD FLCI optimizer — R-faithful nested algorithm; B2b resolved):** The optimal + FLCI is a faithful port of R `HonestDiD::findOptimalFLCI`'s **nested convex program**. For a + fixed estimator standard deviation `h`, an inner problem minimizes the worst-case bias over + `Δ^SD(M)` subject to `sd(estimator) ≤ h` — a smooth convex QCQP over the slope weights `w` + (variables `[U; w]`, `U ≥ |cumsum(w)|`, one second-order-cone `var(w) ≤ h²`, linear-trend + neutrality `Σw = Σ_s s·l_s`), solved with `scipy.optimize` SLSQP (no cvxpy). An outer 1-D + search over `h ∈ [hMin, h0]` (a warm-started grid zoom) minimizes the half-length + `cv_α(M·bias(h)/h)·h`. The worst-case bias uses R's exact **closed form** + `M·(constant + Σ_i |cumsum(w)_i|)` (a direct port of R's `.createObjectiveObjectForBias`), so + the inner objective is linear in the abs-linearized weights; `hMin`/`h0` are the min-variance + and min-bias SDs (R's `.findLowestH` / `.findHForMinimumBias`). For **nonnegative (averaging)** + `l_vec` — the standard case, including the default first-post-period basis vector and equal + weights — this closed form equals the general LP oracle `_compute_worst_case_bias` (max |v'δ| + over Δ^SD) to machine precision. For a **signed / contrast** `l_vec` (e.g. `[1, -1]`) R's closed + form is *conservative* relative to the exact LP-oracle bias (a shared R property, not a + diff-diff bug); the FLCI still matches R (verified to ~1e-6 for `l_vec=[1,-1]`, + `test_signed_contrast_lvec_matches_r`), because we port R's objective exactly. This matches R's + optimal FLCI **center + half-length + optimalVec** to ~1e-3 (median ~1e-5) across a stress grid + (`num_pre × num_post × AR(1) ρ × M`); `TestHonestFLCIParityR`, golden + `benchmarks/data/honest_flci_golden.json`. The prior flat Nelder-Mead optimizer drifted from + R's center by up to ~9% at intermediate M (widths matched, coverage unaffected); the nested + structure removes that drift (SE-audit B2b). A derivative-based outer solve is not viable: the + min-bias inner solutions are degenerate (most `cumsum(w)` components sit at the abs-value + kink), so the SD-constraint multiplier is not recoverable from `sign(Lw)`, and the width + surface is near-flat at the optimum. +- **Deviation from R:** diff-diff uses an **analytical** folded-normal critical value + (`_cv_alpha`, `scipy.stats`) in place of R's Monte-Carlo `.qfoldednormal` (10⁶ draws, seed 0) + — strictly more accurate (noise-free). Against **override-R** (R with the MC quantile replaced + by the analytical one, so both solve the same deterministic outer problem) the center matches + to ~1e-3; against **stock** MC-R the center matches to ~1.4e-2, the residual being R's own + simulation noise on the near-flat width surface. The committed golden stores both tiers. - **Note:** Phase 7d: survey variance support. When input results carry `survey_metadata` with `df_survey`, Delta^SD smoothness uses folded non-central t critical values (`scipy.stats.nct`); Delta^RM and naive FLCI paths use `_get_critical_value(alpha, df)` (standard t-distribution). `df_survey=0` → NaN inference. CallawaySantAnnaResults stores `event_study_vcov` (full cross-event-time VCV from IF vectors), which HonestDiD uses instead of the diagonal fallback. For replicate-weight designs, the event-study VCV falls back to diagonal (multivariate replicate VCV deferred). - **Note (deviation from R):** When HonestDiD receives bootstrap-fitted CallawaySantAnna results (`n_bootstrap > 0`), the full event-study covariance is unavailable (cleared to prevent mixing analytical VCV with bootstrap SEs). HonestDiD falls back to `diag(se^2)` from the bootstrap SEs with a UserWarning. R's `honest_did.AGGTEobj` computes a full covariance from the influence function matrix; implementing bootstrap event-study covariance is deferred. For full covariance structure in HonestDiD, use analytical SEs (`n_bootstrap=0`). - **Note (deviation from R):** When CallawaySantAnna results are passed to HonestDiD, `base_period != "universal"` emits a warning but does not error. R's `honest_did::honest_did.AGGTEobj` requires universal base period. Our implementation warns because the varying-base pre-treatment coefficients use consecutive comparisons (not a common reference), which changes the parallel-trends restriction interpretation. diff --git a/tests/test_honest_did.py b/tests/test_honest_did.py index 8fa1441d..f5229a2e 100644 --- a/tests/test_honest_did.py +++ b/tests/test_honest_did.py @@ -389,6 +389,19 @@ def test_fit_returns_results(self, mock_multiperiod_results): assert results.M == 1.0 assert results.method == "relative_magnitude" + def test_fit_negative_M_override_raises(self, mock_multiperiod_results): + """A negative M passed to fit() (bypassing constructor validation) must + raise, not be silently treated as +|M| by the FLCI cv abs().""" + honest = HonestDiD(method="smoothness", M=0.0) + with pytest.raises(ValueError, match="non-negative"): + honest.fit(mock_multiperiod_results, M=-0.1) + + def test_sensitivity_analysis_negative_M_grid_raises(self, mock_multiperiod_results): + """A negative value in M_grid must raise (bypasses constructor validation).""" + honest = HonestDiD(method="smoothness") + with pytest.raises(ValueError, match="non-negative"): + honest.sensitivity_analysis(mock_multiperiod_results, M_grid=[0.0, -0.1]) + def test_fit_smoothness(self, mock_multiperiod_results): """Test fit with smoothness method.""" honest = HonestDiD(method="smoothness", M=0.0) diff --git a/tests/test_methodology_honest_did.py b/tests/test_methodology_honest_did.py index efdfb1d7..1fdcae87 100644 --- a/tests/test_methodology_honest_did.py +++ b/tests/test_methodology_honest_did.py @@ -6,6 +6,8 @@ """ +import json +import os import warnings import numpy as np @@ -24,7 +26,6 @@ _solve_rm_bounds_union, ) - # ============================================================================= # TestDeltaSDConstraintMatrix # ============================================================================= @@ -472,16 +473,16 @@ def test_smoothness_df_survey_zero_returns_nan(self): ) assert np.isnan(ci_lb) and np.isnan(ci_ub), "df=0 should give NaN CI" - def test_smoothness_flci_finite_across_M_grid_and_matches_r_at_zero(self): - """Smoothness FLCI is finite across an M grid; tight R parity at M=0. + def test_smoothness_flci_finite_and_matches_r_across_M_grid(self): + """Smoothness FLCI is finite AND matches R across the M grid (not just M=0). - Regression guard for the identified-set NaN-gate bug: an empty estimated - identified set must not suppress the FLCI (previously it did). The FLCI must - stay finite for every M. At M=0 the affine-estimator optimum is unambiguous - and matches R ``createSensitivityResults`` to <1e-3; at intermediate M there - is a known optimizer/center divergence from R (up to ~9% on wide pre/post - windows, CI width unaffected; see REGISTRY.md and TODO.md), so this test only - pins finiteness there. + Regression guard for the identified-set NaN-gate bug (an empty estimated + identified set must not suppress the FLCI). Also the B2b center-parity lock: + the nested optimizer now matches R HonestDiD's optimal FLCI CENTER at + intermediate M (previously the flat Nelder-Mead drifted up to ~9%). This + ``[1, 0, 1]`` curved pre-trend is the kink-prone case; R centers are the + deterministic (analytical-quantile) values, matching R's own MC output to its + simulation noise. See ``TestHonestFLCIParityR`` for the full stress grid. """ from diff_diff.honest_did import _compute_optimal_flci @@ -489,18 +490,163 @@ def test_smoothness_flci_finite_across_M_grid_and_matches_r_at_zero(self): beta_post = np.array([2.0]) sigma = np.eye(4) * 0.01 lvec = np.array([1.0]) - for M in [0.0, 0.01, 0.02, 0.05, 0.1]: + # R HonestDiD 0.2.6, deterministic (analytical .qfoldednormal) centers. + r_center = {0.0: 2.285755, 0.02: 2.295042, 0.05: 2.326349, 0.10: 2.474526} + for M in [0.0, 0.02, 0.05, 0.1]: ci_lb, ci_ub = _compute_optimal_flci( beta_pre, beta_post, sigma, lvec, 3, 1, M=M, df=None ) assert np.isfinite(ci_lb) and np.isfinite(ci_ub), f"M={M}: non-finite FLCI" assert ci_ub > ci_lb, f"M={M}: degenerate CI" - # M=0: tight R parity (R HonestDiD 0.2.6: [2.082644, 2.488866]). + center = (ci_lb + ci_ub) / 2 + assert abs(center - r_center[M]) < 1e-3, ( + f"M={M} center={center:.6f} vs R {r_center[M]:.6f}" + ) + # M=0: tight R parity on the endpoints too (R 0.2.6: [2.082880, 2.488631]). ci_lb, ci_ub = _compute_optimal_flci( beta_pre, beta_post, sigma, lvec, 3, 1, M=0.0, df=None ) - assert abs(ci_lb - 2.082644) < 1e-3, f"M=0 ci_lb={ci_lb:.6f} vs R 2.082644" - assert abs(ci_ub - 2.488866) < 1e-3, f"M=0 ci_ub={ci_ub:.6f} vs R 2.488866" + assert abs(ci_lb - 2.082880) < 1e-3, f"M=0 ci_lb={ci_lb:.6f} vs R 2.082880" + assert abs(ci_ub - 2.488631) < 1e-3, f"M=0 ci_ub={ci_ub:.6f} vs R 2.488631" + + def test_zero_sd_covariance_returns_nan(self): + """Degenerate (zero) covariance -> zero estimator SD -> NaN inference (no + ZeroDivisionError in M*bias/h), for M=0 and M>0 (zero-SE convention).""" + from diff_diff.honest_did import _compute_optimal_flci + + beta_pre = np.array([0.1, -0.05, 0.1]) + beta_post = np.array([1.0]) + sigma = np.zeros((4, 4)) + lvec = np.array([1.0]) + for M in [0.0, 0.1, 0.5]: + ci_lb, ci_ub = _compute_optimal_flci(beta_pre, beta_post, sigma, lvec, 3, 1, M=M) + assert np.isnan(ci_lb) and np.isnan(ci_ub), f"M={M}: expected NaN CI on zero SD" + + def test_signed_contrast_lvec_matches_r(self): + """A signed contrast target (l_vec=[1, -1], a difference of post-period + effects) matches R HonestDiD's optimal FLCI. Our worst-case-bias objective + is a faithful port of R's ``.createObjectiveObjectForBias``; for signed + (non-averaging) l_vec that closed form is CONSERVATIVE relative to the exact + LP-oracle bias ``_compute_worst_case_bias`` (the two coincide only for + nonnegative l_vec) -- we match R either way. R HonestDiD 0.2.6 (deterministic + quantile): center 0.200000, half-length 4.637049. + """ + from diff_diff.honest_did import _compute_optimal_flci + + lb, ub = _compute_optimal_flci( + np.array([0.1, 0.0, 0.1]), np.array([1.2, 0.9]), + np.eye(5) * 0.05, np.array([1.0, -1.0]), 3, 2, M=1.0, + ) + assert abs((lb + ub) / 2 - 0.200000) < 1e-3, f"center={(lb + ub) / 2:.6f} vs R 0.200000" + assert abs((ub - lb) / 2 - 4.637049) < 1e-3, f"half={(ub - lb) / 2:.6f} vs R 4.637049" + + def test_negative_M_raises(self): + """Negative smoothness in the direct FLCI helper raises (cv_alpha's abs() + would otherwise silently treat M=-0.1 like M=0.1).""" + from diff_diff.honest_did import _compute_optimal_flci + + with pytest.raises(ValueError, match="non-negative"): + _compute_optimal_flci( + np.array([0.1, 0.0, 0.1]), np.array([1.0]), + np.eye(4) * 0.01, np.array([1.0]), 3, 1, M=-0.1, + ) + + +# ============================================================================= +# TestHonestFLCIParityR - B2b optimal-FLCI parity vs R HonestDiD 0.2.6 +# ============================================================================= + +_FLCI_GOLDEN = os.path.join( + os.path.dirname(os.path.dirname(os.path.abspath(__file__))), + "benchmarks", + "data", + "honest_flci_golden.json", +) + + +@pytest.mark.skipif( + not os.path.exists(_FLCI_GOLDEN), + reason="HonestDiD FLCI golden absent (partial checkout); " + "run benchmarks/R/generate_honest_flci_golden.R", +) +class TestHonestFLCIParityR: + """B2b: the nested optimal-FLCI optimizer matches R HonestDiD 0.2.6 across a + stress grid (num_pre x num_post x AR(1) rho x M x l_vec). + + ``center``/``half_length``/``optimal_vec`` in the golden are override-R + (R's Monte-Carlo ``.qfoldednormal`` replaced by an analytical quantile, so R + solves the same deterministic outer problem as diff-diff's analytical + ``_cv_alpha``) -> parity to 1e-3. The same diff-diff values also match stock + (MC) R (``stock_center``) to ~1e-2, the residual being R's simulation noise on + the near-flat width surface (diff-diff is strictly more accurate). + """ + + @staticmethod + def _cases(): + with open(_FLCI_GOLDEN) as fh: + return json.load(fh)["cases"] + + @staticmethod + def _unpack(c): + npre, npost = c["num_pre"], c["num_post"] + beta = np.asarray(c["beta"], float) + sigma = np.asarray(c["sigma"], float) + l_vec = np.atleast_1d(np.asarray(c["l_vec"], float)) # npost==1 auto-unboxed + return beta[:npre], beta[npre:], sigma, l_vec, npre, npost + + def test_center_and_halflength_match_override_r(self): + max_dc = max_dw = 0.0 + for c in self._cases(): + if c["center"] is None: + continue + bp, bq, sigma, l_vec, npre, npost = self._unpack(c) + lb, ub = _compute_optimal_flci(bp, bq, sigma, l_vec, npre, npost, c["M"], c["alpha"]) + center, half = (lb + ub) / 2, (ub - lb) / 2 + tag = f"npre={npre} npost={npost} M={c['M']}" + assert abs(center - c["center"]) < 1e-3, f"{tag}: center {center:.6f} vs R {c['center']:.6f}" + assert abs(half - c["half_length"]) < 1e-3, f"{tag}: half {half:.6f} vs R {c['half_length']:.6f}" + max_dc = max(max_dc, abs(center - c["center"])) + max_dw = max(max_dw, abs(half - c["half_length"])) + assert max_dc < 1e-3 and max_dw < 1e-3 + + def test_optimal_vec_matches_override_r(self): + from diff_diff.honest_did import _flci_solve + + for c in self._cases(): + if c["optimal_vec"] is None: + continue + bp, bq, sigma, l_vec, npre, npost = self._unpack(c) + _, _, v = _flci_solve(bp, bq, sigma, l_vec, npre, npost, c["M"], c["alpha"]) + r_v = np.atleast_1d(np.asarray(c["optimal_vec"], float)) + assert v is not None and np.max(np.abs(v - r_v)) < 3e-3, ( + f"npre={npre} M={c['M']}: optvec gap {np.max(np.abs(v - r_v)):.2e}" + ) + + def test_center_matches_stock_r_within_mc_noise(self): + for c in self._cases(): + if c["stock_center"] is None: + continue + bp, bq, sigma, l_vec, npre, npost = self._unpack(c) + lb, ub = _compute_optimal_flci(bp, bq, sigma, l_vec, npre, npost, c["M"], c["alpha"]) + # Loose tier: R's MC .qfoldednormal noise reaches ~1.4e-2 on flat-surface + # cases (max observed 1.39e-2); the tight parity is vs override-R (1e-3). + assert abs((lb + ub) / 2 - c["stock_center"]) < 1.5e-2, ( + f"npre={npre} M={c['M']}: vs stock-R {abs((lb + ub) / 2 - c['stock_center']):.2e}" + ) + + def test_inner_solve_failure_nan_consistent(self, monkeypatch): + """A failed / infeasible inner solve NaN-propagates the full FLCI (no silent + fallback to a wrong estimator), distinct from R's legitimate Inf-bias branch.""" + import diff_diff.honest_did as hd + + monkeypatch.setattr( + hd, "_flci_min_bias_given_h", + lambda P, h, x0_w=None: (np.zeros(P["num_pre"]), np.nan, False), + ) + lb, ub = _compute_optimal_flci( + np.array([0.1, -0.05, 0.1]), np.array([1.2]), np.eye(4) * 0.01, np.array([1.0]), 3, 1, M=0.1 + ) + assert np.isnan(lb) and np.isnan(ub) # =============================================================================