Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 8 additions & 15 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,22 +51,15 @@ jobs:
version: ${{ matrix.version }}
arch: ${{ matrix.arch }}
- uses: julia-actions/cache@v3
# ProximalSolvers, CovarianceSelection and the ProximalBase that
# CovarianceSelection needs (SliceSum, FiberSum) are not registered yet: all
# from their masters. Julia 1.11 and later take them from [sources] in
# Project.toml; Julia 1.10 ignores [sources], and resolves each Pkg.add with
# the whole project, so they are added in one call. Remove the step and
# [sources] once they are registered.
- name: Add the unregistered dependencies from GitHub on Julia 1.10
if: matrix.version == 'lts'
shell: julia --color=yes --project=. {0}
run: |
using Pkg
Pkg.add([PackageSpec(url="https://github.com/mlakolar/ProximalBase.jl", rev="master"),
PackageSpec(url="https://github.com/mlakolar/ProximalSolvers.jl", rev="master"),
PackageSpec(url="https://github.com/mlakolar/CovarianceSelection.jl", rev="master")])
- name: Check naming conventions
run: ${{ runner.os == 'Windows' && 'python' || 'python3' }} scripts/check_naming.py
- name: Resolve dependencies from master checkouts
run: julia --color=yes scripts/instantiate.jl
- uses: julia-actions/julia-buildpkg@v1
- uses: julia-actions/julia-runtest@v1
- name: Test against dependency master checkouts
run: julia --color=yes scripts/test_master.jl
env:
JULIA_TEST_COVERAGE: "true"
- uses: julia-actions/julia-processcoverage@v1
- uses: codecov/codecov-action@v7
with:
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,9 @@
/exper/sim*/*.pdf
/benchmark/compare/*/Manifest*.toml
/benchmark/compare/results/

# Generated master dependency test environments
.master-test-env/

# Local Julia-minor environments are regenerated from master checkouts
/Manifest-v*.toml
21 changes: 21 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Development conventions

Types and modules use UpperCamelCase. Descriptive functions, fields and keyword
arguments use snake_case; mutating functions end in `!`. Retain standard numerical
abbreviations, mathematical identifiers and names required by upstream interfaces.
Run `python3 scripts/check_naming.py` to check new declarations.

Workspace dependencies use sibling master checkouts, including transitive
dependencies. Missing checkouts are cloned from master. Existing checkouts are
never reset or silently updated. Package version numbering and registry changes
are deferred.

Run the complete tests from the repository root:

```sh
julia scripts/test_master.jl
```

The script prepares an isolated master-based environment with test extras on
Julia 1.10 and newer, then runs the suite without changing package dependencies.
For the simulation environment, use `julia scripts/instantiate.jl exper`.
6 changes: 3 additions & 3 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b"
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"

[sources]
CovarianceSelection = {url = "https://github.com/mlakolar/CovarianceSelection.jl", rev = "master"}
ProximalBase = {url = "https://github.com/mlakolar/ProximalBase.jl", rev = "master"}
ProximalSolvers = {url = "https://github.com/mlakolar/ProximalSolvers.jl", rev = "master"}
CovarianceSelection = {path = "../CovarianceSelection.jl"}
ProximalBase = {path = "../ProximalBase.jl"}
ProximalSolvers = {path = "../ProximalOPT.jl"}

[compat]
Aqua = "0.8"
Expand Down
47 changes: 40 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,16 @@ independent Gaussian samples.
`ReducedOracleNormal`, and with bootstrap standard errors
`SymmetricOracleBoot`, `AsymmetricOracleBoot`
* Simultaneous confidence intervals for all entries by the bootstrap:
`bootstrap`, `simulCI`, `simulCIstudentized`
* Support recovery: `supportEstimate` with `ANTSupport`, `BootStdSupport` or
`bootstrap`, `simul_ci`, `simul_ci_studentized`
* Support recovery: `support_estimate` with `ANTSupport`, `BootStdSupport` or
`DTraceValidationSupport`

DiffPrecTest is one of five Julia packages for high-dimensional statistics,
three for estimation and inference and two for the optimization beneath them:

| Package | |
|---|---|
| [CoordinateDescent.jl](https://github.com/mlakolar/CoordinateDescent.jl) | the lasso and its paths; the group, square-root, scaled and heteroscedastic lasso; varying-coefficient models |
| [HighDimensionalModels.jl](https://github.com/mlakolar/HighDimensionalModels.jl) | the lasso and its paths; the group, square-root, scaled and heteroscedastic lasso; varying-coefficient models |
| [CovarianceSelection.jl](https://github.com/mlakolar/CovarianceSelection.jl) | Gaussian graphical models: the graphical lasso, CLIME and ACLIME, precision matrices by the scaled lasso, the fused graphical lasso, and the difference of two precision matrices |
| **DiffPrecTest.jl** (this package) | confidence intervals and tests for the difference of two precision matrices |
| [ProximalSolvers.jl](https://github.com/mlakolar/ProximalSolvers.jl) | the solvers: coordinate descent with penalty paths, screening and active sets; proximal gradient methods, proximal Newton and ADMM |
Expand All @@ -53,8 +53,8 @@ res.p .+ [-1.96, 1.96] .* res.std

# simultaneous 95% confidence intervals for the entries of the lower triangle of Δ;
# the off-diagonal entries are multiplied by √2
straps, = bootstrap(X, Y; bootSamples=500)
CI = simulCIstudentized(straps, 0.95)
straps, = bootstrap(X, Y; boot_samples=500)
CI = simul_ci_studentized(straps, 0.95)
```

`Distributions` also exports `estimate`; when both packages are loaded, call
Expand All @@ -68,7 +68,40 @@ coordinate descent of [ProximalSolvers.jl](https://github.com/mlakolar/ProximalS
on losses of [ProximalBase.jl](https://github.com/mlakolar/ProximalBase.jl):
the direct difference loss of [CovarianceSelection.jl](https://github.com/mlakolar/CovarianceSelection.jl)
and the inverse Hessian losses are its `KronQuadratic`. The functions of the
two stages (`diffEstimation`, `invQSymHessian`, `invAsymHessianEstimation`,
`reducedDiffEstimation`, `invHessianReduced`) take the solver options as a
two stages (`diff_estimation`, `inv_q_sym_hessian`, `inv_asym_hessian_estimation`,
`reduced_diff_estimation`, `inv_hessian_reduced`) take the solver options as a
ProximalSolvers `CDSolver`; so are the node-wise lasso regressions of
`SeparateNormal`.

## Naming migration

Types retain `UpperCamelCase`; descriptive functions, fields and keyword
arguments use `snake_case`. Mathematical identifiers remain available.

| Previous spelling | Canonical spelling |
|---|---|
| `diffEstimation` | `diff_estimation` |
| `invAsymHessianEstimation`, `invQSymHessian`, `invHessianReduced` | `inv_asym_hessian_estimation`, `inv_q_sym_hessian`, `inv_hessian_reduced` |
| `supportEstimate` | `support_estimate` |
| `simulCI`, `simulCIstudentized` | `simul_ci`, `simul_ci_studentized` |
| `computeSimulationResult` | `compute_simulation_result` |
| `bootSamples`, `estimSupport` | `boot_samples`, `estim_support` |
| `SimulationResult.lenCoverage` | `SimulationResult.len_coverage` |

Previous public spellings are deprecated aliases for a transition period.
Supplying both spellings of a keyword raises an error. Package versions are
unchanged. Active environments use sibling master checkouts of
CovarianceSelection, ProximalBase and ProximalSolvers through local sources.
The pinned `benchmark/compare/old` environment remains a historical baseline.

## Development tests

From the repository root, run:

```sh
julia scripts/test_master.jl
```

The script prepares an isolated test environment using dependency master
checkouts and test extras on Julia 1.10 and newer. See
[CONTRIBUTING.md](CONTRIBUTING.md) for the naming policy and environment setup.
6 changes: 3 additions & 3 deletions benchmark/compare/new/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"

[sources]
CovarianceSelection = {url = "https://github.com/mlakolar/CovarianceSelection.jl", rev = "master"}
CovarianceSelection = {path = "../../../../CovarianceSelection.jl"}
DiffPrecTest = {path = "../../.."}
ProximalBase = {url = "https://github.com/mlakolar/ProximalBase.jl", rev = "master"}
ProximalSolvers = {url = "https://github.com/mlakolar/ProximalSolvers.jl", rev = "master"}
ProximalBase = {path = "../../../../ProximalBase.jl"}
ProximalSolvers = {path = "../../../../ProximalOPT.jl"}

[compat]
CovarianceSelection = "0.1"
Expand Down
6 changes: 3 additions & 3 deletions exper/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"

# ProximalSolvers is listed for its [sources] entry, until it is registered
[sources]
CovarianceSelection = {url = "https://github.com/mlakolar/CovarianceSelection.jl", rev = "master"}
CovarianceSelection = {path = "../../CovarianceSelection.jl"}
DiffPrecTest = {path = ".."}
ProximalBase = {url = "https://github.com/mlakolar/ProximalBase.jl", rev = "master"}
ProximalSolvers = {url = "https://github.com/mlakolar/ProximalSolvers.jl", rev = "master"}
ProximalBase = {path = "../../ProximalBase.jl"}
ProximalSolvers = {path = "../../ProximalOPT.jl"}

[compat]
CSV = "1"
Expand Down
14 changes: 7 additions & 7 deletions exper/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,17 @@ the true support (`O-...`).

## Setup

With Julia 1.11 or later:
From the repository root, prepare the experiment environment on Julia 1.10
or newer:

```sh
julia --project=. -e 'using Pkg; Pkg.instantiate()'
julia scripts/instantiate.jl exper
```

`Project.toml` takes DiffPrecTest from this repository, and CovarianceSelection,
ProximalSolvers and ProximalBase from their masters on GitHub, until they are
registered. Julia 1.10 ignores these sources; there, run
`using Pkg; Pkg.develop(path=".."); Pkg.add([PackageSpec(url="https://github.com/mlakolar/ProximalBase.jl", rev="master"), PackageSpec(url="https://github.com/mlakolar/ProximalSolvers.jl", rev="master"), PackageSpec(url="https://github.com/mlakolar/CovarianceSelection.jl", rev="master")])`
once instead.
The bootstrap loads DiffPrecTest from this repository and CovarianceSelection,
ProximalSolvers and ProximalBase from sibling master checkouts, including their
transitive workspace dependencies. Existing checkouts are never reset or
silently updated.

## Running

Expand Down
4 changes: 2 additions & 2 deletions exper/sim10/sim10.jl
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Sx = Symmetric( X'X / n )
Sy = Symmetric( Y'Y / n )


@time boot_res, eS = bootstrap(X, Y)
@time boot_res, e_s = bootstrap(X, Y)


@save "$(dir)/res_$(ip)_$(rep).jld2" boot_res eS
@save "$(dir)/res_$(ip)_$(rep).jld2" boot_res e_s
2 changes: 1 addition & 1 deletion exper/sim10/sim10_o.jl
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Sy = Symmetric( Y'Y / n )
# oracle supports: Δ = 0, so every entry is refitted on its own
eS_init = [Int64[] for j=1:div((p + 1)*p, 2)]

@time boot_res, eS = bootstrap(X, Y; estimSupport=eS_init)
@time boot_res, e_s = bootstrap(X, Y; estim_support=eS_init)


@save "$(dir)/res_$(ip)_$(rep).jld2" boot_res
2 changes: 1 addition & 1 deletion exper/sim10/sim10_o_power.jl
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,6 @@ Sy = Symmetric( Y'Y / n )
S = [tril_index(p, r, c) for c = 1:p for r = c:p if abs(Δ[r, c]) > 1e-4]
eS_init = [copy(S) for j=1:div((p + 1)*p, 2)]

@time boot_res, eS = bootstrap(X, Y; estimSupport=eS_init)
@time boot_res, e_s = bootstrap(X, Y; estim_support=eS_init)

@save "$(dir)/res_$(rep).jld2" boot_res
4 changes: 2 additions & 2 deletions exper/sim11/sim11.jl
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Sx = Symmetric( X'X / n )
Sy = Symmetric( Y'Y / n )


@time boot_res, eS = bootstrap(X, Y)
@time boot_res, e_s = bootstrap(X, Y)


@save "$(dir)/res_$(ip)_$(rep).jld2" boot_res eS
@save "$(dir)/res_$(ip)_$(rep).jld2" boot_res e_s
2 changes: 1 addition & 1 deletion exper/sim11/sim11_o.jl
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ Sy = Symmetric( Y'Y / n )
# oracle supports: Δ = 0, so every entry is refitted on its own
eS_init = [Int64[] for j=1:div((p + 1)*p, 2)]

@time boot_res, eS = bootstrap(X, Y; estimSupport=eS_init)
@time boot_res, e_s = bootstrap(X, Y; estim_support=eS_init)


@save "$(dir)/res_$(ip)_$(rep).jld2" boot_res
2 changes: 1 addition & 1 deletion exper/sim11/sim11_o_power.jl
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,6 @@ Sy = Symmetric( Y'Y / n )
S = [tril_index(p, r, c) for c = 1:p for r = c:p if abs(Δ[r, c]) > 1e-4]
eS_init = [copy(S) for j=1:div((p + 1)*p, 2)]

@time boot_res, eS = bootstrap(X, Y; estimSupport=eS_init)
@time boot_res, e_s = bootstrap(X, Y; estim_support=eS_init)

@save "$(dir)/res_$(rep).jld2" boot_res
2 changes: 1 addition & 1 deletion exper/sim12/sim12_o_power.jl
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,6 @@ Sy = Symmetric( Y'Y / n )
S = [tril_index(p, r, c) for c = 1:p for r = c:p if abs(Δ[r, c]) > 1e-4]
eS_init = [copy(S) for j=1:div((p + 1)*p, 2)]

@time boot_res, eS = bootstrap(X, Y; estimSupport=eS_init)
@time boot_res, e_s = bootstrap(X, Y; estim_support=eS_init)

@save "$(dir)/res_$(rep).jld2" boot_res
10 changes: 5 additions & 5 deletions exper/sim5/sim5a.jl
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,16 @@ Sy = Symmetric( cov(Y) )
Sxtest = Symmetric( cov(Xtest) )
Sytest = Symmetric( cov(Ytest) )

@time eS = DiffPrecTest.__initSupport(Sx, Sy, X, Y)
@time eΔNormal, eΔNormalP, _ = supportEstimate(ANTSupport(), X, Y, τArr; estimSupport=eS)
@time eΔBoot , eΔBootP, _ = supportEstimate(BootStdSupport(), X, Y, τArr; estimSupport=eS)
@time e_s = DiffPrecTest.__init_support(Sx, Sy, X, Y)
@time eΔNormal, eΔNormalP, _ = support_estimate(ANTSupport(), X, Y, τArr; estim_support=e_s)
@time eΔBoot , eΔBootP, _ = support_estimate(BootStdSupport(), X, Y, τArr; estim_support=e_s)

# compete method

maxλ = maximum( abs.(Sx - Sy) )
minλ = maxλ * 0.04
Λarr = exp.(range(log(maxλ), log(minλ), length=50))

eΔDTr, i2, iInf, loss2arr, lossInfarr = supportEstimate(DTraceValidationSupport(), Sx, Sy, Sxtest, Sytest, Λarr)
eΔDTr, i2, i_inf, loss2arr, loss_infarr = support_estimate(DTraceValidationSupport(), Sx, Sy, Sxtest, Sytest, Λarr)

@save "$(dir)/res_$(rep).jld2" eΔNormal eΔNormalP eΔBoot eΔBootP eS eΔDTr i2 iInf loss2arr lossInfarr
@save "$(dir)/res_$(rep).jld2" eΔNormal eΔNormalP eΔBoot eΔBootP e_s eΔDTr i2 i_inf loss2arr loss_infarr
10 changes: 5 additions & 5 deletions exper/sim5/sim5b.jl
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,16 @@ Sy = Symmetric( cov(Y) )
Sxtest = Symmetric( cov(Xtest) )
Sytest = Symmetric( cov(Ytest) )

@time eS = DiffPrecTest.__initSupport(Sx, Sy, X, Y)
@time eΔNormal, eΔNormalP, _ = supportEstimate(ANTSupport(), X, Y, τArr; estimSupport=eS)
@time eΔBoot , eΔBootP, _ = supportEstimate(BootStdSupport(), X, Y, τArr; estimSupport=eS)
@time e_s = DiffPrecTest.__init_support(Sx, Sy, X, Y)
@time eΔNormal, eΔNormalP, _ = support_estimate(ANTSupport(), X, Y, τArr; estim_support=e_s)
@time eΔBoot , eΔBootP, _ = support_estimate(BootStdSupport(), X, Y, τArr; estim_support=e_s)

# compete method

maxλ = maximum( abs.(Sx - Sy) )
minλ = maxλ * 0.04
Λarr = exp.(range(log(maxλ), log(minλ), length=50))

eΔDTr, i2, iInf, loss2arr, lossInfarr = supportEstimate(DTraceValidationSupport(), Sx, Sy, Sxtest, Sytest, Λarr)
eΔDTr, i2, i_inf, loss2arr, loss_infarr = support_estimate(DTraceValidationSupport(), Sx, Sy, Sxtest, Sytest, Λarr)

@save "$(dir)/res_$(rep).jld2" eΔNormal eΔNormalP eΔBoot eΔBootP eS eΔDTr i2 iInf loss2arr lossInfarr
@save "$(dir)/res_$(rep).jld2" eΔNormal eΔNormalP eΔBoot eΔBootP e_s eΔDTr i2 i_inf loss2arr loss_infarr
6 changes: 3 additions & 3 deletions exper/sim5/summarize.jl
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ TPR_tr = zeros(NUM_REP, numΛ)
dtrace = DataFrame(selection=String[], rep=Int[], tpr=Float64[], fpr=Float64[], precision=Float64[])

for (rep, f) in enumerate(files)
eΔNormal, eΔBoot, eΔDTr, i2, iInf = jldopen(joinpath(dir, f), "r") do file
read(file, "eΔNormal"), read(file, "eΔBoot"), read(file, "eΔDTr"), read(file, "i2"), read(file, "iInf")
eΔNormal, eΔBoot, eΔDTr, i2, i_inf = jldopen(joinpath(dir, f), "r") do file
read(file, "eΔNormal"), read(file, "eΔBoot"), read(file, "eΔDTr"), read(file, "i2"), read(file, "i_inf")
end

for j=1:numτ
Expand All @@ -58,7 +58,7 @@ for (rep, f) in enumerate(files)
TPR_tr[rep, j] = tpr(cm)
end

for (selection, i) in (("frobenius", i2), ("max", iInf))
for (selection, i) in (("frobenius", i2), ("max", i_inf))
cm = getConfusionMatrix(Δ, eΔDTr[i])
push!(dtrace, (selection, rep, tpr(cm), fpr(cm), precision(cm)))
end
Expand Down
4 changes: 2 additions & 2 deletions exper/sim8/collect_our.jl
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ NUM_REP = parse(Int, get(ENV, "NUM_REP", "1000"))
covers(CI) = all(CI[:, 1] .<= 0 .<= CI[:, 2])

function coverage(res::Vector{BootstrapEstimates}, α::Float64=0.95)
mean(covers(simulCI(r, α)) for r in res)
mean(covers(simul_ci(r, α)) for r in res)
end

function coverage_studentized(res::Vector{BootstrapEstimates}, α::Float64=0.95)
mean(covers(simulCIstudentized(r, α)) for r in res)
mean(covers(simul_ci_studentized(r, α)) for r in res)
end

# loads folderName_rep.jld2 for the available repetitions
Expand Down
4 changes: 2 additions & 2 deletions exper/sim8/compute_coverage.jl
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ res = load(fName, "results")
# the intervals cover Δ = 0 when every one of them contains 0
covers(CI) = all(CI[:, 1] .<= 0 .<= CI[:, 2])

@show mean(covers(simulCI(r, alpha)) for r in res)
@show mean(covers(simulCIstudentized(r, alpha)) for r in res)
@show mean(covers(simul_ci(r, alpha)) for r in res)
@show mean(covers(simul_ci_studentized(r, alpha)) for r in res)
4 changes: 2 additions & 2 deletions exper/sim8/sim8.jl
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Sy = Symmetric( Y'Y / n )



@time boot_res, eS = bootstrap(X, Y)
@time boot_res, e_s = bootstrap(X, Y)


@save "$(dir)/res_$(ip)_$(rep).jld2" boot_res eS
@save "$(dir)/res_$(ip)_$(rep).jld2" boot_res e_s
2 changes: 1 addition & 1 deletion exper/sim8/sim8_o.jl
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,6 @@ Sy = Symmetric( Y'Y / n )
# oracle supports: Δ = 0, so every entry is refitted on its own
eS_init = [Int64[] for j=1:div((p + 1)*p, 2)]

@time boot_res, eS = bootstrap(X, Y; estimSupport=eS_init)
@time boot_res, e_s = bootstrap(X, Y; estim_support=eS_init)

@save "$(dir)/res_$(ip)_$(rep).jld2" boot_res
2 changes: 1 addition & 1 deletion exper/sim8/sim8_o_power.jl
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,6 @@ Sy = Symmetric( Y'Y / n )
S = [tril_index(p, r, c) for c = 1:p for r = c:p if abs(Δ[r, c]) > 1e-4]
eS_init = [copy(S) for j=1:div((p + 1)*p, 2)]

@time boot_res, eS = bootstrap(X, Y; estimSupport=eS_init)
@time boot_res, e_s = bootstrap(X, Y; estim_support=eS_init)

@save "$(dir)/res_$(rep).jld2" boot_res
4 changes: 2 additions & 2 deletions exper/sim9/sim9.jl
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ Sx = Symmetric( X'X / n )
Sy = Symmetric( Y'Y / n )


@time boot_res, eS = bootstrap(X, Y)
@time boot_res, e_s = bootstrap(X, Y)


@save "$(dir)/res_$(ip)_$(rep).jld2" boot_res eS
@save "$(dir)/res_$(ip)_$(rep).jld2" boot_res e_s
2 changes: 1 addition & 1 deletion exper/sim9/sim9_o.jl
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Sy = Symmetric( Y'Y / n )
# oracle supports: Δ = 0, so every entry is refitted on its own
eS_init = [Int64[] for j=1:div((p + 1)*p, 2)]

@time boot_res, eS = bootstrap(X, Y; estimSupport=eS_init)
@time boot_res, e_s = bootstrap(X, Y; estim_support=eS_init)


@save "$(dir)/res_$(ip)_$(rep).jld2" boot_res
Loading
Loading