Release cards

0.10.0 release card: the boundary#

Release card

The boundary

0.10.0

This card maps, for each supported method, the problems it can handle: those it finishes within the cap and solves with fewer errors than the empty graph. It measures Andrey alone, on the 0.9.0 code, with no other package. Each boundary is a reference for the measured conditions, not a hard limit; it depends on the data, settings, and hardware.

Summary#

How far each method goes. At 2,000 samples and a mean degree of 2, every size up to these finished and beat the empty graph: BOSS 1,600 variables; GRaSP 800; PC, CALM, and DirectLiNGAM 400; GES, GIES, and XGES 200 (400 with 10,000 samples); CD-NOD, tabu search, and hill climbing 100; ICA-LiNGAM 50; exact search 22. The post’s table gives 500 and 10,000 samples, and the maps below every size.

What stops them. Most score-based searches stop on accuracy, and reach further with more samples. The permutation-based searches, exact search, and CALM stop on time. PC stops on accuracy.

The boundary#

Inside the boundary. A size, a number of variables with a number of samples and a mean degree, is inside a method’s boundary when it is through, fewer than 3 of its fits cut by the time cap, the memory cap, or an error, and the median errors of its finished fits are fewer than the empty graph’s. A fit that did not finish never counts as an empty graph. A ladder’s boundary is the largest size up to which every size is inside.

How a ladder ends. A ladder steps the number of variables on one setting until it stops: on time, memory, or an error (3 fits of a size cut), past the accuracy boundary (two sizes in a row that do not beat the empty graph), or at its last planned size. Larger sizes past the accuracy boundary cost compute and tell you nothing more. Seven ladders ran past it before the rule, and keep those sizes, marked.

What a boundary is not. Each boundary is a reference measured under the conditions below: our graph and data generators, the listed sizes and densities, each method’s settings as listed under Reproduce, and the listed machines. Other graphs, data, settings, or hardware move it. It is not a guarantee that a method fails past it, or succeeds before it.

Method#

Data. Each method runs on the data its release card used: Erdos-Renyi graphs with linear relations and Gaussian noise for the Gaussian searches, with non-Gaussian noise for the LiNGAM methods; for RCD and BottomUpParceLiNGAM, one node in five is hidden (at least one), the number of variables counts the hidden ones, and the errors are against the true PAG of the observed nodes; for GIES, 40% of the variables get single-variable interventions, with the samples split evenly between observation and each intervention, so the samples per setting shrink as the variables grow. Each ladder’s label names its setting.

Two maps. The size map: variables from 20, doubling, by 500, 2,000, and 10,000 samples, with a mean degree of 2. The density map: the same variables by a mean degree of 1, 2, 4, and 8, with 2,000 samples. Exact search runs from 10 variables.

Datasets. 5 datasets per size, one per seed, 10 where the median errors were within 10% of the empty graph’s, and 20 per size for the pairwise methods. A size stops after 3 fits that did not finish (on time, memory, or an error), so a cut size lists 3 or 4 datasets. For RCD and BottomUpParceLiNGAM, a seed whose graph has too few nodes with two or more children to hide is skipped, so a size can have fewer datasets.

Errors. The structural Hamming distance against the true graph in the form each method returns: the CPDAG for the constraint-based, score-based, permutation-based, and LiNGAM searches, with a DAG estimate (from CALM, exact search, hill climbing, and tabu search) scored against its equivalence class; the PAG, marks included, for FCI and GFCI; the true PAG of the observed nodes, endpoint by endpoint, for RCD and BottomUpParceLiNGAM; and the time-series graph for PCMCI, PCMCI+, and LPCMCI. F1 for VARMA-LiNGAM and LongitudinalLiNGAM, the share of pairs with the right direction for ANM and PNL, and the adjusted Rand index of the indicator clusters for GIN. The empty graph’s errors are the number of true edges.

Limits. A one-hour wall cap and a 28,000 MB memory cap per fit, on 4 CPUs: almost all on an AMD EPYC 7713, some on an AMD EPYC 9534 or an Intel Xeon Gold 6542Y. Nine sizes ran on two CPU models; their errors are the median over every finished fit, and they quote no time.

Builds and versions#

On the 1,252 fits of our release checks, 0.10.0 returns the same results as these builds.

Measurement

Build

Exact search

b94e647

LongitudinalLiNGAM

2fd784a

The other methods

52b814f, 8a134cd, and 1fce718

Constraint-based methods#

Constraint-based

CD-NOD

Samples, mean degree 210,000 samples20 variables, 10,000 samples: 15% of the empty graph's errors50 variables, 10,000 samples: 24% of the empty graph's errors100 variables, 10,000 samples: 38% of the empty graph's errors×200 variables, 10,000 samples; stopped: time cap2,000 samples20 variables, 2,000 samples: 25% of the empty graph's errors50 variables, 2,000 samples: 30% of the empty graph's errors100 variables, 2,000 samples: 35% of the empty graph's errors×200 variables, 2,000 samples; stopped: time cap500 samples20 variables, 500 samples: 35% of the empty graph's errors50 variables, 500 samples: 32% of the empty graph's errors100 variables, 500 samples: 42% of the empty graph's errors200 variables, 500 samples: 54% of the empty graph's errors×400 variables, 500 samples; stopped: time cap2050100200400800Mean degree, 2,000 samplesdegree 820 variables, degree 8: 85% of the empty graph's errors50 variables, degree 8: 90% of the empty graph's errors100 variables, degree 8: 79% of the empty graph's errors200 variables, degree 8: 70% of the empty graph's errors400 variables, degree 8: 63% of the empty graph's errors×800 variables, degree 8; stopped: time capdegree 420 variables, degree 4: 62% of the empty graph's errors50 variables, degree 4: 53% of the empty graph's errors100 variables, degree 4: 42% of the empty graph's errors200 variables, degree 4: 33% of the empty graph's errors×400 variables, degree 4; stopped: time capdegree 220 variables, degree 2: 25% of the empty graph's errors50 variables, degree 2: 30% of the empty graph's errors100 variables, degree 2: 35% of the empty graph's errors×200 variables, degree 2; stopped: time capdegree 120 variables, degree 1: 10% of the empty graph's errors50 variables, degree 1: 68% of the empty graph's errors×100 variables, degree 1; stopped: time cap2050100200400800

PC

Samples, mean degree 210,000 samples20 variables, 10,000 samples: 0% of the empty graph's errors50 variables, 10,000 samples: 16% of the empty graph's errors100 variables, 10,000 samples: 32% of the empty graph's errors200 variables, 10,000 samples: 60% of the empty graph's errors400 variables, 10,000 samples: 82% of the empty graph's errors800 variables, 10,000 samples: 146% of the empty graph's errors1,600 variables, 10,000 samples: 250% of the empty graph's errors; stopped: past the accuracy boundary○1,600 variables, 10,000 samples: 250% of the empty graph's errors; stopped: past the accuracy boundary2,000 samples20 variables, 2,000 samples: 5% of the empty graph's errors50 variables, 2,000 samples: 32% of the empty graph's errors100 variables, 2,000 samples: 45% of the empty graph's errors200 variables, 2,000 samples: 57% of the empty graph's errors400 variables, 2,000 samples: 80% of the empty graph's errors800 variables, 2,000 samples: 131% of the empty graph's errors1,600 variables, 2,000 samples: 202% of the empty graph's errors; stopped: past the accuracy boundary○1,600 variables, 2,000 samples: 202% of the empty graph's errors; stopped: past the accuracy boundary500 samples20 variables, 500 samples: 40% of the empty graph's errors50 variables, 500 samples: 48% of the empty graph's errors100 variables, 500 samples: 39% of the empty graph's errors200 variables, 500 samples: 58% of the empty graph's errors400 variables, 500 samples: 80% of the empty graph's errors800 variables, 500 samples: 110% of the empty graph's errors1,600 variables, 500 samples: 152% of the empty graph's errors; stopped: past the accuracy boundary○1,600 variables, 500 samples: 152% of the empty graph's errors; stopped: past the accuracy boundary20501002004008001,6003,200Mean degree, 2,000 samplesdegree 820 variables, degree 8: 99% of the empty graph's errors50 variables, degree 8: 100% of the empty graph's errors100 variables, degree 8: 96% of the empty graph's errors200 variables, degree 8: 94% of the empty graph's errors400 variables, degree 8: 88% of the empty graph's errors800 variables, degree 8: 86% of the empty graph's errors1,600 variables, degree 8: 84% of the empty graph's errors3,200 variables, degree 8: 82% of the empty graph's errorsdegree 420 variables, degree 4: 80% of the empty graph's errors50 variables, degree 4: 73% of the empty graph's errors100 variables, degree 4: 70% of the empty graph's errors200 variables, degree 4: 62% of the empty graph's errors400 variables, degree 4: 48% of the empty graph's errors800 variables, degree 4: 51% of the empty graph's errors1,600 variables, degree 4: 62% of the empty graph's errors3,200 variables, degree 4: 74% of the empty graph's errorsdegree 220 variables, degree 2: 5% of the empty graph's errors50 variables, degree 2: 32% of the empty graph's errors100 variables, degree 2: 45% of the empty graph's errors200 variables, degree 2: 57% of the empty graph's errors400 variables, degree 2: 80% of the empty graph's errors800 variables, degree 2: 131% of the empty graph's errors1,600 variables, degree 2: 202% of the empty graph's errors; stopped: past the accuracy boundary○1,600 variables, degree 2: 202% of the empty graph's errors; stopped: past the accuracy boundarydegree 120 variables, degree 1: 20% of the empty graph's errors50 variables, degree 1: 84% of the empty graph's errors100 variables, degree 1: 144% of the empty graph's errors200 variables, degree 1: 217% of the empty graph's errors; stopped: past the accuracy boundary○200 variables, degree 1: 217% of the empty graph's errors; stopped: past the accuracy boundary20501002004008001,6003,200
Columns: the number of variables. Color: errors as a share of the empty graph's, the stronger the fewer; gray does no better than the empty graph. × stopped at the time cap, ■ at the memory cap, ! failed, ○ past the accuracy boundary. The outline is the boundary: in each row, the sizes before the first that does not finish or does not beat the empty graph. A cell's tip gives its errors as a share of the empty graph's: on a denser graph the empty graph makes more errors, so beating it says less.

Score-based methods#

Score-based

CALM

Samples, mean degree 210,000 samples20 variables, 10,000 samples: 25% of the empty graph's errors50 variables, 10,000 samples: 32% of the empty graph's errors100 variables, 10,000 samples: 29% of the empty graph's errors200 variables, 10,000 samples: 35% of the empty graph's errors400 variables, 10,000 samples: 28% of the empty graph's errors×800 variables, 10,000 samples; stopped: time cap2,000 samples20 variables, 2,000 samples: 25% of the empty graph's errors50 variables, 2,000 samples: 28% of the empty graph's errors100 variables, 2,000 samples: 27% of the empty graph's errors200 variables, 2,000 samples: 34% of the empty graph's errors400 variables, 2,000 samples: 27% of the empty graph's errors×800 variables, 2,000 samples; stopped: time cap500 samples20 variables, 500 samples: 40% of the empty graph's errors50 variables, 500 samples: 34% of the empty graph's errors100 variables, 500 samples: 40% of the empty graph's errors200 variables, 500 samples: 34% of the empty graph's errors400 variables, 500 samples: 28% of the empty graph's errors×800 variables, 500 samples; stopped: time cap2050100200400800Mean degree, 2,000 samplesdegree 820 variables, degree 8: 102% of the empty graph's errors50 variables, degree 8: 88% of the empty graph's errors100 variables, degree 8: 82% of the empty graph's errors200 variables, degree 8: 83% of the empty graph's errors400 variables, degree 8: 79% of the empty graph's errors×800 variables, degree 8; stopped: time capdegree 420 variables, degree 4: 48% of the empty graph's errors50 variables, degree 4: 60% of the empty graph's errors100 variables, degree 4: 60% of the empty graph's errors200 variables, degree 4: 53% of the empty graph's errors400 variables, degree 4: 53% of the empty graph's errors×800 variables, degree 4; stopped: time capdegree 220 variables, degree 2: 25% of the empty graph's errors50 variables, degree 2: 28% of the empty graph's errors100 variables, degree 2: 27% of the empty graph's errors200 variables, degree 2: 34% of the empty graph's errors400 variables, degree 2: 27% of the empty graph's errors×800 variables, degree 2; stopped: time capdegree 120 variables, degree 1: 0% of the empty graph's errors50 variables, degree 1: 20% of the empty graph's errors100 variables, degree 1: 10% of the empty graph's errors200 variables, degree 1: 11% of the empty graph's errors×400 variables, degree 1; stopped: time cap2050100200400800

Exact search

Samples, mean degree 210,000 samples10 variables, 10,000 samples: 0% of the empty graph's errors14 variables, 10,000 samples: 0% of the empty graph's errors18 variables, 10,000 samples: 0% of the empty graph's errors20 variables, 10,000 samples: 0% of the empty graph's errors22 variables, 10,000 samples: 9% of the empty graph's errors×24 variables, 10,000 samples; stopped: time cap2,000 samples10 variables, 2,000 samples: 20% of the empty graph's errors14 variables, 2,000 samples: 0% of the empty graph's errors18 variables, 2,000 samples: 33% of the empty graph's errors20 variables, 2,000 samples: 20% of the empty graph's errors22 variables, 2,000 samples: 27% of the empty graph's errors×24 variables, 2,000 samples; stopped: time cap500 samples10 variables, 500 samples: 30% of the empty graph's errors14 variables, 500 samples: 14% of the empty graph's errors18 variables, 500 samples: 50% of the empty graph's errors20 variables, 500 samples: 30% of the empty graph's errors22 variables, 500 samples: 50% of the empty graph's errors×24 variables, 500 samples; stopped: time cap10141820222426Mean degree, 2,000 samplesdegree 810 variables, degree 8: 82% of the empty graph's errors14 variables, degree 8: 0% of the empty graph's errors18 variables, degree 8: 0% of the empty graph's errors20 variables, degree 8: 0% of the empty graph's errors22 variables, degree 8: 0% of the empty graph's errors×24 variables, degree 8; stopped: time capdegree 410 variables, degree 4: 0% of the empty graph's errors14 variables, degree 4: 4% of the empty graph's errors18 variables, degree 4: 0% of the empty graph's errors20 variables, degree 4: 0% of the empty graph's errors22 variables, degree 4: 5% of the empty graph's errors×24 variables, degree 4; stopped: time capdegree 210 variables, degree 2: 20% of the empty graph's errors14 variables, degree 2: 0% of the empty graph's errors18 variables, degree 2: 33% of the empty graph's errors20 variables, degree 2: 20% of the empty graph's errors22 variables, degree 2: 27% of the empty graph's errors×24 variables, degree 2; stopped: time capdegree 110 variables, degree 1: 0% of the empty graph's errors14 variables, degree 1: 29% of the empty graph's errors18 variables, degree 1: 11% of the empty graph's errors20 variables, degree 1: 50% of the empty graph's errors22 variables, degree 1: 27% of the empty graph's errors24 variables, degree 1: 33% of the empty graph's errors×26 variables, degree 1; stopped: time cap10141820222426

GES

Samples, mean degree 210,000 samples20 variables, 10,000 samples: 0% of the empty graph's errors50 variables, 10,000 samples: 18% of the empty graph's errors100 variables, 10,000 samples: 37% of the empty graph's errors200 variables, 10,000 samples: 65% of the empty graph's errors400 variables, 10,000 samples: 93% of the empty graph's errors800 variables, 10,000 samples: 136% of the empty graph's errors1,600 variables, 10,000 samples: 208% of the empty graph's errors; stopped: past the accuracy boundary○1,600 variables, 10,000 samples: 208% of the empty graph's errors; stopped: past the accuracy boundary2,000 samples20 variables, 2,000 samples: 25% of the empty graph's errors50 variables, 2,000 samples: 36% of the empty graph's errors100 variables, 2,000 samples: 59% of the empty graph's errors200 variables, 2,000 samples: 98% of the empty graph's errors400 variables, 2,000 samples: 153% of the empty graph's errors800 variables, 2,000 samples: 228% of the empty graph's errors; stopped: past the accuracy boundary○800 variables, 2,000 samples: 228% of the empty graph's errors; stopped: past the accuracy boundary500 samples20 variables, 500 samples: 30% of the empty graph's errors50 variables, 500 samples: 85% of the empty graph's errors100 variables, 500 samples: 114% of the empty graph's errors200 variables, 500 samples: 160% of the empty graph's errors; stopped: past the accuracy boundary○200 variables, 500 samples: 160% of the empty graph's errors; stopped: past the accuracy boundary20501002004008001,6003,200Mean degree, 2,000 samplesdegree 820 variables, degree 8: 123% of the empty graph's errors50 variables, degree 8: 148% of the empty graph's errors; stopped: past the accuracy boundary○50 variables, degree 8: 148% of the empty graph's errors; stopped: past the accuracy boundarydegree 420 variables, degree 4: 86% of the empty graph's errors50 variables, degree 4: 82% of the empty graph's errors100 variables, degree 4: 85% of the empty graph's errors200 variables, degree 4: 67% of the empty graph's errors400 variables, degree 4: 72% of the empty graph's errors800 variables, degree 4: 94% of the empty graph's errors1,600 variables, degree 4: 116% of the empty graph's errors3,200 variables, degree 4: 140% of the empty graph's errors; stopped: past the accuracy boundary○3,200 variables, degree 4: 140% of the empty graph's errors; stopped: past the accuracy boundarydegree 220 variables, degree 2: 25% of the empty graph's errors50 variables, degree 2: 36% of the empty graph's errors100 variables, degree 2: 59% of the empty graph's errors200 variables, degree 2: 98% of the empty graph's errors400 variables, degree 2: 153% of the empty graph's errors800 variables, degree 2: 228% of the empty graph's errors; stopped: past the accuracy boundary○800 variables, degree 2: 228% of the empty graph's errors; stopped: past the accuracy boundarydegree 120 variables, degree 1: 40% of the empty graph's errors50 variables, degree 1: 56% of the empty graph's errors100 variables, degree 1: 122% of the empty graph's errors200 variables, degree 1: 203% of the empty graph's errors; stopped: past the accuracy boundary○200 variables, degree 1: 203% of the empty graph's errors; stopped: past the accuracy boundary20501002004008001,6003,200

GIES

Samples, mean degree 210,000 samples20 variables, 10,000 samples: 5% of the empty graph's errors50 variables, 10,000 samples: 13% of the empty graph's errors100 variables, 10,000 samples: 23% of the empty graph's errors200 variables, 10,000 samples: 44% of the empty graph's errors400 variables, 10,000 samples: 72% of the empty graph's errors800 variables, 10,000 samples: 139% of the empty graph's errors1,600 variables, 10,000 samples: 246% of the empty graph's errors; stopped: past the accuracy boundary○1,600 variables, 10,000 samples: 246% of the empty graph's errors; stopped: past the accuracy boundary2,000 samples20 variables, 2,000 samples: 14% of the empty graph's errors50 variables, 2,000 samples: 18% of the empty graph's errors100 variables, 2,000 samples: 54% of the empty graph's errors200 variables, 2,000 samples: 91% of the empty graph's errors400 variables, 2,000 samples: 157% of the empty graph's errors800 variables, 2,000 samples: 290% of the empty graph's errors; stopped: past the accuracy boundary○800 variables, 2,000 samples: 290% of the empty graph's errors; stopped: past the accuracy boundary500 samples20 variables, 500 samples: 30% of the empty graph's errors50 variables, 500 samples: 50% of the empty graph's errors100 variables, 500 samples: 97% of the empty graph's errors200 variables, 500 samples: 178% of the empty graph's errors400 variables, 500 samples: 312% of the empty graph's errors; stopped: past the accuracy boundary○400 variables, 500 samples: 312% of the empty graph's errors; stopped: past the accuracy boundary20501002004008001,600Mean degree, 2,000 samplesdegree 820 variables, degree 8: 35% of the empty graph's errors50 variables, degree 8: 50% of the empty graph's errors100 variables, degree 8: 55% of the empty graph's errors200 variables, degree 8: 54% of the empty graph's errors400 variables, degree 8: 35% of the empty graph's errors800 variables, degree 8: 63% of the empty graph's errors×1,600 variables, degree 8; stopped: time capdegree 420 variables, degree 4: 9% of the empty graph's errors50 variables, degree 4: 19% of the empty graph's errors100 variables, degree 4: 23% of the empty graph's errors200 variables, degree 4: 41% of the empty graph's errors400 variables, degree 4: 73% of the empty graph's errors800 variables, degree 4: 132% of the empty graph's errors×1,600 variables, degree 4; stopped: time capdegree 220 variables, degree 2: 14% of the empty graph's errors50 variables, degree 2: 18% of the empty graph's errors100 variables, degree 2: 54% of the empty graph's errors200 variables, degree 2: 91% of the empty graph's errors400 variables, degree 2: 157% of the empty graph's errors800 variables, degree 2: 290% of the empty graph's errors; stopped: past the accuracy boundary○800 variables, degree 2: 290% of the empty graph's errors; stopped: past the accuracy boundarydegree 120 variables, degree 1: 23% of the empty graph's errors50 variables, degree 1: 55% of the empty graph's errors100 variables, degree 1: 102% of the empty graph's errors200 variables, degree 1: 184% of the empty graph's errors; stopped: past the accuracy boundary○200 variables, degree 1: 184% of the empty graph's errors; stopped: past the accuracy boundary20501002004008001,600

Hill climbing

Samples, mean degree 210,000 samples20 variables, 10,000 samples: 25% of the empty graph's errors50 variables, 10,000 samples: 80% of the empty graph's errors100 variables, 10,000 samples: 60% of the empty graph's errors200 variables, 10,000 samples: 90% of the empty graph's errors400 variables, 10,000 samples: 118% of the empty graph's errors800 variables, 10,000 samples: 178% of the empty graph's errors; stopped: past the accuracy boundary○800 variables, 10,000 samples: 178% of the empty graph's errors; stopped: past the accuracy boundary1,600 variables, 10,000 samples: 272% of the empty graph's errors2,000 samples20 variables, 2,000 samples: 55% of the empty graph's errors50 variables, 2,000 samples: 88% of the empty graph's errors100 variables, 2,000 samples: 99% of the empty graph's errors200 variables, 2,000 samples: 136% of the empty graph's errors400 variables, 2,000 samples: 198% of the empty graph's errors800 variables, 2,000 samples: 296% of the empty graph's errors1,600 variables, 2,000 samples: 521% of the empty graph's errors3,200 variables, 2,000 samples: 967% of the empty graph's errors500 samples20 variables, 500 samples: 72% of the empty graph's errors50 variables, 500 samples: 101% of the empty graph's errors100 variables, 500 samples: 151% of the empty graph's errors; stopped: past the accuracy boundary○100 variables, 500 samples: 151% of the empty graph's errors; stopped: past the accuracy boundary200 variables, 500 samples: 197% of the empty graph's errors400 variables, 500 samples: 317% of the empty graph's errors800 variables, 500 samples: 595% of the empty graph's errors1,600 variables, 500 samples: 1388% of the empty graph's errors20501002004008001,6003,200Mean degree, 2,000 samplesdegree 820 variables, degree 8: 148% of the empty graph's errors50 variables, degree 8: 284% of the empty graph's errors; stopped: past the accuracy boundary○50 variables, degree 8: 284% of the empty graph's errors; stopped: past the accuracy boundary100 variables, degree 8: 299% of the empty graph's errors200 variables, degree 8: 203% of the empty graph's errors400 variables, degree 8: 202% of the empty graph's errors800 variables, degree 8: 136% of the empty graph's errorsdegree 420 variables, degree 4: 105% of the empty graph's errors50 variables, degree 4: 140% of the empty graph's errors; stopped: past the accuracy boundary○50 variables, degree 4: 140% of the empty graph's errors; stopped: past the accuracy boundary100 variables, degree 4: 98% of the empty graph's errors200 variables, degree 4: 112% of the empty graph's errors400 variables, degree 4: 110% of the empty graph's errors800 variables, degree 4: 160% of the empty graph's errorsdegree 220 variables, degree 2: 55% of the empty graph's errors50 variables, degree 2: 88% of the empty graph's errors100 variables, degree 2: 99% of the empty graph's errors200 variables, degree 2: 136% of the empty graph's errors400 variables, degree 2: 198% of the empty graph's errors800 variables, degree 2: 296% of the empty graph's errors1,600 variables, degree 2: 521% of the empty graph's errors3,200 variables, degree 2: 967% of the empty graph's errorsdegree 120 variables, degree 1: 60% of the empty graph's errors50 variables, degree 1: 86% of the empty graph's errors100 variables, degree 1: 124% of the empty graph's errors200 variables, degree 1: 203% of the empty graph's errors; stopped: past the accuracy boundary○200 variables, degree 1: 203% of the empty graph's errors; stopped: past the accuracy boundary400 variables, degree 1: 360% of the empty graph's errors800 variables, degree 1: 615% of the empty graph's errors1,600 variables, degree 1: 1078% of the empty graph's errors20501002004008001,6003,200

Tabu search

Samples, mean degree 210,000 samples20 variables, 10,000 samples: 0% of the empty graph's errors50 variables, 10,000 samples: 48% of the empty graph's errors100 variables, 10,000 samples: 80% of the empty graph's errors200 variables, 10,000 samples: 88% of the empty graph's errors400 variables, 10,000 samples: 116% of the empty graph's errors800 variables, 10,000 samples: 180% of the empty graph's errors; stopped: past the accuracy boundary○800 variables, 10,000 samples: 180% of the empty graph's errors; stopped: past the accuracy boundary2,000 samples20 variables, 2,000 samples: 35% of the empty graph's errors50 variables, 2,000 samples: 84% of the empty graph's errors100 variables, 2,000 samples: 93% of the empty graph's errors200 variables, 2,000 samples: 137% of the empty graph's errors400 variables, 2,000 samples: 200% of the empty graph's errors; stopped: past the accuracy boundary○400 variables, 2,000 samples: 200% of the empty graph's errors; stopped: past the accuracy boundary800 variables, 2,000 samples: 297% of the empty graph's errors500 samples20 variables, 500 samples: 45% of the empty graph's errors50 variables, 500 samples: 93% of the empty graph's errors100 variables, 500 samples: 151% of the empty graph's errors200 variables, 500 samples: 198% of the empty graph's errors; stopped: past the accuracy boundary○200 variables, 500 samples: 198% of the empty graph's errors; stopped: past the accuracy boundary2050100200400800Mean degree, 2,000 samplesdegree 820 variables, degree 8: 148% of the empty graph's errors50 variables, degree 8: 284% of the empty graph's errors; stopped: past the accuracy boundary○50 variables, degree 8: 284% of the empty graph's errors; stopped: past the accuracy boundarydegree 420 variables, degree 4: 98% of the empty graph's errors50 variables, degree 4: 127% of the empty graph's errors100 variables, degree 4: 82% of the empty graph's errors200 variables, degree 4: 93% of the empty graph's errors400 variables, degree 4: 112% of the empty graph's errors800 variables, degree 4: 161% of the empty graph's errors; stopped: past the accuracy boundary○800 variables, degree 4: 161% of the empty graph's errors; stopped: past the accuracy boundarydegree 220 variables, degree 2: 35% of the empty graph's errors50 variables, degree 2: 84% of the empty graph's errors100 variables, degree 2: 93% of the empty graph's errors200 variables, degree 2: 137% of the empty graph's errors400 variables, degree 2: 200% of the empty graph's errors; stopped: past the accuracy boundary○400 variables, degree 2: 200% of the empty graph's errors; stopped: past the accuracy boundary800 variables, degree 2: 297% of the empty graph's errorsdegree 120 variables, degree 1: 40% of the empty graph's errors50 variables, degree 1: 84% of the empty graph's errors100 variables, degree 1: 130% of the empty graph's errors200 variables, degree 1: 217% of the empty graph's errors; stopped: past the accuracy boundary○200 variables, degree 1: 217% of the empty graph's errors; stopped: past the accuracy boundary2050100200400800

XGES

Samples, mean degree 210,000 samples20 variables, 10,000 samples: 0% of the empty graph's errors50 variables, 10,000 samples: 14% of the empty graph's errors100 variables, 10,000 samples: 26% of the empty graph's errors200 variables, 10,000 samples: 52% of the empty graph's errors400 variables, 10,000 samples: 94% of the empty graph's errors800 variables, 10,000 samples: 149% of the empty graph's errors1,600 variables, 10,000 samples: 252% of the empty graph's errors; stopped: past the accuracy boundary○1,600 variables, 10,000 samples: 252% of the empty graph's errors; stopped: past the accuracy boundary2,000 samples20 variables, 2,000 samples: 20% of the empty graph's errors50 variables, 2,000 samples: 36% of the empty graph's errors100 variables, 2,000 samples: 56% of the empty graph's errors200 variables, 2,000 samples: 95% of the empty graph's errors400 variables, 2,000 samples: 172% of the empty graph's errors800 variables, 2,000 samples: 291% of the empty graph's errors; stopped: past the accuracy boundary○800 variables, 2,000 samples: 291% of the empty graph's errors; stopped: past the accuracy boundary500 samples20 variables, 500 samples: 30% of the empty graph's errors50 variables, 500 samples: 66% of the empty graph's errors100 variables, 500 samples: 111% of the empty graph's errors200 variables, 500 samples: 178% of the empty graph's errors; stopped: past the accuracy boundary○200 variables, 500 samples: 178% of the empty graph's errors; stopped: past the accuracy boundary20501002004008001,600Mean degree, 2,000 samplesdegree 820 variables, degree 8: 126% of the empty graph's errors50 variables, degree 8: 257% of the empty graph's errors; stopped: past the accuracy boundary○50 variables, degree 8: 257% of the empty graph's errors; stopped: past the accuracy boundarydegree 420 variables, degree 4: 0% of the empty graph's errors50 variables, degree 4: 10% of the empty graph's errors100 variables, degree 4: 23% of the empty graph's errors200 variables, degree 4: 38% of the empty graph's errors400 variables, degree 4: 65% of the empty graph's errors800 variables, degree 4: 117% of the empty graph's errors1,600 variables, degree 4: 213% of the empty graph's errors; stopped: past the accuracy boundary○1,600 variables, degree 4: 213% of the empty graph's errors; stopped: past the accuracy boundarydegree 220 variables, degree 2: 20% of the empty graph's errors50 variables, degree 2: 36% of the empty graph's errors100 variables, degree 2: 56% of the empty graph's errors200 variables, degree 2: 95% of the empty graph's errors400 variables, degree 2: 172% of the empty graph's errors800 variables, degree 2: 291% of the empty graph's errors; stopped: past the accuracy boundary○800 variables, degree 2: 291% of the empty graph's errors; stopped: past the accuracy boundarydegree 120 variables, degree 1: 40% of the empty graph's errors50 variables, degree 1: 48% of the empty graph's errors100 variables, degree 1: 122% of the empty graph's errors200 variables, degree 1: 205% of the empty graph's errors; stopped: past the accuracy boundary○200 variables, degree 1: 205% of the empty graph's errors; stopped: past the accuracy boundary20501002004008001,600
Columns: the number of variables. Color: errors as a share of the empty graph's, the stronger the fewer; gray does no better than the empty graph. × stopped at the time cap, ■ at the memory cap, ! failed, ○ past the accuracy boundary. The outline is the boundary: in each row, the sizes before the first that does not finish or does not beat the empty graph. A cell's tip gives its errors as a share of the empty graph's: on a denser graph the empty graph makes more errors, so beating it says less.

Permutation-based methods#

Permutation-based

BOSS

Samples, mean degree 210,000 samples20 variables, 10,000 samples: 0% of the empty graph's errors50 variables, 10,000 samples: 0% of the empty graph's errors100 variables, 10,000 samples: 0% of the empty graph's errors200 variables, 10,000 samples: 4% of the empty graph's errors400 variables, 10,000 samples: 3% of the empty graph's errors800 variables, 10,000 samples: 5% of the empty graph's errors×1,600 variables, 10,000 samples; stopped: time cap2,000 samples20 variables, 2,000 samples: 0% of the empty graph's errors50 variables, 2,000 samples: 12% of the empty graph's errors100 variables, 2,000 samples: 5% of the empty graph's errors200 variables, 2,000 samples: 2% of the empty graph's errors400 variables, 2,000 samples: 2% of the empty graph's errors800 variables, 2,000 samples: 4% of the empty graph's errors1,600 variables, 2,000 samples: 4% of the empty graph's errors×3,200 variables, 2,000 samples; stopped: time cap500 samples20 variables, 500 samples: 0% of the empty graph's errors50 variables, 500 samples: 10% of the empty graph's errors100 variables, 500 samples: 0% of the empty graph's errors200 variables, 500 samples: 9% of the empty graph's errors400 variables, 500 samples: 4% of the empty graph's errors800 variables, 500 samples: 5% of the empty graph's errors1,600 variables, 500 samples: 6% of the empty graph's errors×3,200 variables, 500 samples; stopped: time cap20501002004008001,6003,200Mean degree, 2,000 samplesdegree 820 variables, degree 8: 131% of the empty graph's errors50 variables, degree 8: 2% of the empty graph's errors100 variables, degree 8: 0% of the empty graph's errors200 variables, degree 8: 0% of the empty graph's errors400 variables, degree 8: 1% of the empty graph's errors■800 variables, degree 8; stopped: memory capdegree 420 variables, degree 4: 0% of the empty graph's errors50 variables, degree 4: 0% of the empty graph's errors100 variables, degree 4: 0% of the empty graph's errors200 variables, degree 4: 6% of the empty graph's errors400 variables, degree 4: 1% of the empty graph's errors800 variables, degree 4: 2% of the empty graph's errors×1,600 variables, degree 4; stopped: time capdegree 220 variables, degree 2: 0% of the empty graph's errors50 variables, degree 2: 12% of the empty graph's errors100 variables, degree 2: 5% of the empty graph's errors200 variables, degree 2: 2% of the empty graph's errors400 variables, degree 2: 2% of the empty graph's errors800 variables, degree 2: 4% of the empty graph's errors1,600 variables, degree 2: 4% of the empty graph's errors×3,200 variables, degree 2; stopped: time capdegree 120 variables, degree 1: 0% of the empty graph's errors50 variables, degree 1: 0% of the empty graph's errors100 variables, degree 1: 0% of the empty graph's errors200 variables, degree 1: 0% of the empty graph's errors400 variables, degree 1: 4% of the empty graph's errors800 variables, degree 1: 4% of the empty graph's errors1,600 variables, degree 1: 4% of the empty graph's errors×3,200 variables, degree 1; stopped: time cap20501002004008001,6003,200

GRaSP

Samples, mean degree 210,000 samples20 variables, 10,000 samples: 0% of the empty graph's errors50 variables, 10,000 samples: 0% of the empty graph's errors100 variables, 10,000 samples: 0% of the empty graph's errors200 variables, 10,000 samples: 0% of the empty graph's errors400 variables, 10,000 samples: 0% of the empty graph's errors800 variables, 10,000 samples: 1% of the empty graph's errors×1,600 variables, 10,000 samples; stopped: time cap2,000 samples20 variables, 2,000 samples: 0% of the empty graph's errors50 variables, 2,000 samples: 0% of the empty graph's errors100 variables, 2,000 samples: 7% of the empty graph's errors200 variables, 2,000 samples: 8% of the empty graph's errors400 variables, 2,000 samples: 5% of the empty graph's errors800 variables, 2,000 samples: 6% of the empty graph's errors×1,600 variables, 2,000 samples; stopped: time cap500 samples20 variables, 500 samples: 5% of the empty graph's errors50 variables, 500 samples: 0% of the empty graph's errors100 variables, 500 samples: 8% of the empty graph's errors200 variables, 500 samples: 14% of the empty graph's errors400 variables, 500 samples: 8% of the empty graph's errors800 variables, 500 samples: 11% of the empty graph's errors×1,600 variables, 500 samples; stopped: time cap20501002004008001,600Mean degree, 2,000 samplesdegree 820 variables, degree 8: 84% of the empty graph's errors50 variables, degree 8: 24% of the empty graph's errors100 variables, degree 8: 6% of the empty graph's errors200 variables, degree 8: 8% of the empty graph's errors400 variables, degree 8: 12% of the empty graph's errors800 variables, degree 8: 10% of the empty graph's errors×1,600 variables, degree 8; stopped: time capdegree 420 variables, degree 4: 0% of the empty graph's errors50 variables, degree 4: 0% of the empty graph's errors100 variables, degree 4: 21% of the empty graph's errors200 variables, degree 4: 7% of the empty graph's errors400 variables, degree 4: 2% of the empty graph's errors800 variables, degree 4: 3% of the empty graph's errors×1,600 variables, degree 4; stopped: time capdegree 220 variables, degree 2: 0% of the empty graph's errors50 variables, degree 2: 0% of the empty graph's errors100 variables, degree 2: 7% of the empty graph's errors200 variables, degree 2: 8% of the empty graph's errors400 variables, degree 2: 5% of the empty graph's errors800 variables, degree 2: 6% of the empty graph's errors×1,600 variables, degree 2; stopped: time capdegree 120 variables, degree 1: 0% of the empty graph's errors50 variables, degree 1: 0% of the empty graph's errors100 variables, degree 1: 0% of the empty graph's errors200 variables, degree 1: 0% of the empty graph's errors400 variables, degree 1: 0% of the empty graph's errors800 variables, degree 1: 0% of the empty graph's errors×1,600 variables, degree 1; stopped: time cap20501002004008001,600
Columns: the number of variables. Color: errors as a share of the empty graph's, the stronger the fewer; gray does no better than the empty graph. × stopped at the time cap, ■ at the memory cap, ! failed, ○ past the accuracy boundary. The outline is the boundary: in each row, the sizes before the first that does not finish or does not beat the empty graph. A cell's tip gives its errors as a share of the empty graph's: on a denser graph the empty graph makes more errors, so beating it says less.

Linear non-Gaussian methods#

Linear non-Gaussian

DirectLiNGAM

Samples, mean degree 210,000 samples20 variables, 10,000 samples: 0% of the empty graph's errors50 variables, 10,000 samples: 4% of the empty graph's errors100 variables, 10,000 samples: 2% of the empty graph's errors200 variables, 10,000 samples: 2% of the empty graph's errors×400 variables, 10,000 samples; stopped: time cap2,000 samples20 variables, 2,000 samples: 0% of the empty graph's errors50 variables, 2,000 samples: 2% of the empty graph's errors100 variables, 2,000 samples: 6% of the empty graph's errors200 variables, 2,000 samples: 5% of the empty graph's errors400 variables, 2,000 samples: 6% of the empty graph's errors×800 variables, 2,000 samples; stopped: time cap500 samples20 variables, 500 samples: 5% of the empty graph's errors50 variables, 500 samples: 10% of the empty graph's errors100 variables, 500 samples: 10% of the empty graph's errors200 variables, 500 samples: 18% of the empty graph's errors400 variables, 500 samples: 134% of the empty graph's errors!800 variables, 500 samples; stopped: failed2050100200400800Mean degree, 2,000 samplesdegree 820 variables, degree 8: 0% of the empty graph's errors50 variables, degree 8: 2% of the empty graph's errors100 variables, degree 8: 8% of the empty graph's errors200 variables, degree 8: 10% of the empty graph's errors400 variables, degree 8: 26% of the empty graph's errors×800 variables, degree 8; stopped: time capdegree 420 variables, degree 4: 0% of the empty graph's errors50 variables, degree 4: 2% of the empty graph's errors100 variables, degree 4: 2% of the empty graph's errors200 variables, degree 4: 4% of the empty graph's errors400 variables, degree 4: 6% of the empty graph's errors×800 variables, degree 4; stopped: time capdegree 220 variables, degree 2: 0% of the empty graph's errors50 variables, degree 2: 2% of the empty graph's errors100 variables, degree 2: 6% of the empty graph's errors200 variables, degree 2: 5% of the empty graph's errors400 variables, degree 2: 6% of the empty graph's errors×800 variables, degree 2; stopped: time capdegree 120 variables, degree 1: 0% of the empty graph's errors50 variables, degree 1: 4% of the empty graph's errors100 variables, degree 1: 8% of the empty graph's errors200 variables, degree 1: 9% of the empty graph's errors400 variables, degree 1: 10% of the empty graph's errors×800 variables, degree 1; stopped: time cap2050100200400800

ICA-LiNGAM

Samples, mean degree 210,000 samples20 variables, 10,000 samples: 0% of the empty graph's errors50 variables, 10,000 samples: 2% of the empty graph's errors100 variables, 10,000 samples: 10% of the empty graph's errors200 variables, 10,000 samples: 328% of the empty graph's errors400 variables, 10,000 samples: 334% of the empty graph's errors×800 variables, 10,000 samples; stopped: time cap2,000 samples20 variables, 2,000 samples: 0% of the empty graph's errors50 variables, 2,000 samples: 16% of the empty graph's errors100 variables, 2,000 samples: 287% of the empty graph's errors200 variables, 2,000 samples: 304% of the empty graph's errors400 variables, 2,000 samples: 309% of the empty graph's errors×800 variables, 2,000 samples; stopped: time cap500 samples20 variables, 500 samples: 15% of the empty graph's errors50 variables, 500 samples: 240% of the empty graph's errors100 variables, 500 samples: 296% of the empty graph's errors200 variables, 500 samples: 276% of the empty graph's errors400 variables, 500 samples: 304% of the empty graph's errors!800 variables, 500 samples; stopped: failed2050100200400800Mean degree, 2,000 samplesdegree 820 variables, degree 8: 161% of the empty graph's errors50 variables, degree 8: 426% of the empty graph's errors; stopped: past the accuracy boundary○50 variables, degree 8: 426% of the empty graph's errors; stopped: past the accuracy boundary100 variables, degree 8: 777% of the empty graph's errors200 variables, degree 8: 1260% of the empty graph's errors400 variables, degree 8: 2042% of the empty graph's errorsdegree 420 variables, degree 4: 38% of the empty graph's errors50 variables, degree 4: 343% of the empty graph's errors100 variables, degree 4: 670% of the empty graph's errors200 variables, degree 4: 951% of the empty graph's errors400 variables, degree 4: 1240% of the empty graph's errors×800 variables, degree 4; stopped: time capdegree 220 variables, degree 2: 0% of the empty graph's errors50 variables, degree 2: 16% of the empty graph's errors100 variables, degree 2: 287% of the empty graph's errors200 variables, degree 2: 304% of the empty graph's errors400 variables, degree 2: 309% of the empty graph's errors×800 variables, degree 2; stopped: time capdegree 120 variables, degree 1: 0% of the empty graph's errors50 variables, degree 1: 12% of the empty graph's errors100 variables, degree 1: 126% of the empty graph's errors200 variables, degree 1: 112% of the empty graph's errors400 variables, degree 1: 120% of the empty graph's errors×800 variables, degree 1; stopped: time cap2050100200400800

MultiGroupDirectLiNGAM

Samples, mean degree 25,000 samples10 variables, 5,000 samples: 0% of the empty graph's errors20 variables, 5,000 samples: 0% of the empty graph's errors50 variables, 5,000 samples: 2% of the empty graph's errors100 variables, 5,000 samples: 2% of the empty graph's errors200 variables, 5,000 samples: 3% of the empty graph's errors1,000 samples10 variables, 1,000 samples: 0% of the empty graph's errors20 variables, 1,000 samples: 2% of the empty graph's errors50 variables, 1,000 samples: 4% of the empty graph's errors100 variables, 1,000 samples: 5% of the empty graph's errors200 variables, 1,000 samples: 8% of the empty graph's errors102050100200
Columns: the number of variables. Color: errors as a share of the empty graph's, the stronger the fewer; gray does no better than the empty graph. × stopped at the time cap, ■ at the memory cap, ! failed, ○ past the accuracy boundary. The outline is the boundary: in each row, the sizes before the first that does not finish or does not beat the empty graph. A cell's tip gives its errors as a share of the empty graph's: on a denser graph the empty graph makes more errors, so beating it says less.

Methods on their own axes#

FCI and GFCI run with the samples growing with the variables (10 or 50 samples per variable). The latent-variable, time-series, and pairwise methods run on their own axes. Granger is not measured in this release: its data grow denser as the variables grow, so its sizes are not comparable. PCMCI+’s ladders end at 320 variables, where the campaign’s generator found no stationary series; 0.10.0’s generator draws one.

The other methods' boundaries

Max sizeEnded
Constraint-basedFCImean degree 2, 10 samples per variable200 variablespast the accuracy boundary, 800 variables
FCImean degree 2, 50 samples per variable200 variablespast the accuracy boundary, 800 variables
FCImean degree 4, 10 samples per variable1,600 variablestime cap, 3,200 variables
FCImean degree 4, 50 samples per variable1,600 variablestime cap, 3,200 variables
GFCImean degree 2, 10 samples per variable1,600 variablestime cap, 3,200 variables
GFCImean degree 2, 50 samples per variable3,200 variableslargest size measured, 3,200 variables
GFCImean degree 4, 10 samples per variable1,600 variablestime cap, 3,200 variables
GFCImean degree 4, 50 samples per variable3,200 variableslargest size measured, 3,200 variables
Latent variablesBottomUpParceLiNGAMmean degree 2, 10,000 samples10 variablespast the accuracy boundary, 20 variables
BottomUpParceLiNGAMmean degree 2, 2,000 samples10 variablespast the accuracy boundary, 20 variables
BottomUpParceLiNGAMmean degree 4, 10,000 samples-time cap, 30 variables
BottomUpParceLiNGAMmean degree 4, 2,000 samples-past the accuracy boundary, 20 variables
GIN1,000 samples, 3 observed indicators per latent variable16 latent variableslargest size measured, 16 latent variables
GIN5,000 samples, 3 observed indicators per latent variable8 latent variablestime cap, 12 latent variables
RCDmean degree 2, 10,000 samples30 variablesmemory cap, 60 variables
RCDmean degree 2, 2,000 samples-past the accuracy boundary, 60 variables
RCDmean degree 4, 10,000 samples-time cap, 30 variables
RCDmean degree 4, 2,000 samples-past the accuracy boundary, 10 variables
Time seriesLongitudinalLiNGAM2,000 units, each observed at 20 time points40 variableslargest size measured, 40 variables
LongitudinalLiNGAM500 units, each observed at 20 time points40 variableslargest size measured, 40 variables
LPCMCIseries of max(1,000, 4·τ·(d+1)) time steps, τ = 340 variablestime cap, 80 variables
LPCMCIseries of 5·max(1,000, 4·τ·(d+1)) time steps (five times as long), τ = 340 variablestime cap, 80 variables
PCMCIseries of max(1,000, 4·τ·(d+1)) time steps, τ = 220 variablespast the accuracy boundary, 80 variables
PCMCIseries of 5·max(1,000, 4·τ·(d+1)) time steps (five times as long), τ = 220 variablespast the accuracy boundary, 80 variables
PCMCI+series of max(1,000, 4·τ·(d+1)) time steps, τ = 5160 variablesno data could be generated at 320 variables
PCMCI+series of 5·max(1,000, 4·τ·(d+1)) time steps (five times as long), τ = 5160 variablesno data could be generated at 320 variables
VARMA-LiNGAMseries of max(1,000, 4·τ·(d+1)) time steps, τ = 140 variablestime cap, 80 variables
VARMA-LiNGAMseries of 5·max(1,000, 4·τ·(d+1)) time steps (five times as long), τ = 120 variablestime cap, 40 variables
PairwiseANM2 variables, samples doubling from 1,00016,000 samplesmemory cap, 32,000 samples
PNL2 variables, samples doubling from 1,00032,000 samplesmemory cap, 64,000 samples
Max size: the largest size up to which every size finished and beat the empty graph. For the latent-variable and LPCMCI ladders, the variables include the hidden ones.

Comparisons with Tetrad#

Each table answers one question: on the same datasets, how fast and how accurate is Andrey’s PC, GES, BOSS, GRaSP, and FCI against Tetrad 7.6.10’s? Both run with the same score or test, penalty, and depth, on the same node, with one worker; Tetrad’s time is its search inside the Java virtual machine, without its start or the data loading. Each time is the median over 5 datasets. The errors are the mean SHD over every dataset of the matched rerun (Datasets), and for FCI the median over its 5.

PC against Tetrad's PC

VariablesAndrey (s)Tetrad (s)FasterAndrey errorsTetrad errorsDatasets
20200 samples0.003900.02486.28x8.910.220
50500 samples0.02430.09583.95x17.921.230
1001,000 samples0.03130.32810.5x39.447.620
2002,000 samples0.1081.6215.0x98.9111.110

GES against Tetrad's FGES

VariablesAndrey (s)Tetrad (s)FasterAndrey errorsTetrad errorsDatasets
20200 samples0.02860.09443.31x10.29.920
50500 samples0.1280.3002.35x36.935.820
1001,000 samples0.2531.234.88x80.678.220
2002,000 samples0.96410.911.4x203.8198.710

BOSS against Tetrad's BOSS

VariablesAndrey (s)Tetrad (s)FasterAndrey errorsTetrad errorsDatasets
20200 samples0.02600.05912.27x3.04.020
50500 samples0.1340.2481.85x4.24.720
1001,000 samples0.4370.8691.99x6.77.520
2002,000 samples1.664.032.42x8.83.010

GRaSP against Tetrad's GRaSP

VariablesAndrey (s)Tetrad (s)FasterAndrey errorsTetrad errorsDatasets
20200 samples0.02360.02681.13x5.34.320
50500 samples0.1380.1821.32x5.21.620
1001,000 samples0.6192.984.82x7.82.620
2002,000 samples5.1317033.2x12.23.510

FCI against Tetrad's FCI

VariablesAndrey (s)Tetrad (s)FasterAndrey errorsTetrad errorsDatasets
20200 samples0.004400.03888.80x14155
50500 samples0.02310.1024.43x28325
1001,000 samples0.1150.3212.80x70775
2002,000 samples0.5771.452.51x2182275

Where the errors differ, the cause, from a matched rerun on more datasets:

  • PC. The two find the same skeleton on every dataset and differ only in how they orient colliders: Tetrad keeps the first separating set it finds, and Andrey the union of the sets of that size. Andrey makes fewer errors at every size.

  • GES. At the BIC penalty both packages use by default, both searches return graphs denser than the truth on these data, and Andrey’s single pass and FGES’s three passes stop in different local optima. With a penalty of 2 on both sides, the errors are equal within the run-to-run spread.

  • BOSS. Each package runs one start of a local search: Tetrad from the data’s column order, Andrey from a seeded order, and each reaches the true graph on some datasets and not others. Up to 100 variables the errors are equal within the run-to-run spread. At 200 variables Tetrad’s start from the column order has fewer errors (3.0 against 8.8); started from random orders, as Andrey’s search is, Tetrad’s mean is 7.5, within the spread of Andrey’s.

  • GRaSP. A difference in search quality, not in the depth or the score. At 100 variables, Andrey’s search ends at a worse BIC than the true graph’s in 58% to 75% of fits, and Tetrad’s in 45% to 55%, so Andrey makes more errors; the gap sits in the fits that go furthest wrong.

Other changes in 0.10.0#

  • Every method’s docstring gives its measured boundary in its Limitations paragraph: how far it beat the empty graph and how far it finished, on each setting measured here.

  • With several workers, the worker pool starts when TMPDIR is on a file system that rejects the forkserver’s socket, such as a cluster’s parallel file system, where ges, gfci, and the skeleton search raised OSError. Results do not change.

  • categorical=[] is accepted by every test and score, and every score search takes both names of the linear-Gaussian BIC, "local_score_BIC" and "local_score_BIC_from_cov".

  • andrey.data.storage and the data extra are removed.

The changelog lists every change.

Limits#

  • A reference, not a hard limit. The boundaries depend on the graph and data generators, the densities, each method’s settings, and the machine; see What a boundary is not.

  • Settings. Most methods run at their defaults, but not all: BOSS and GRaSP run with a BIC penalty of 4, GES with a limit of 4 parents, hill climbing and tabu search with up to 100,000 iterations, and the time-series methods with their own lag window; Reproduce lists every setting. A smaller alpha, a max_depth, or another score can move a boundary either way.

  • The cap. A longer cap moves a time boundary to the right; it does not move an accuracy boundary.

Reproduce#

Every size can be rerun from the protocol on this card. Each fit is one call of the method on one dataset, with a 3,600 s wall cap, a 28,000 MB memory cap, and 4 cores. The datasets per size and the stop rules are under Method and The boundary. Each method runs with the settings below, passed as keyword arguments, and every setting not listed is at its default; each dataset is drawn by the call below, from Andrey or the repository’s benchmarks/ folder, with its variables, samples, density, and seed.

Each method's settings

MethodSettings
PCdefaults
FCIdefaults
GFCIdefaults
CD-NODdefaults
GESmax_parents=4, score_func='local_score_BIC'max_parents as the measured build (8a134cd) applied it: a node holding 4 parents gains no new parent in the forward phase, and one move can still give a node more; on 0.10.0, andrey.ges(max_parents=4) caps every DAG of the returned class at 4 parents, a stricter rule.
GIESdefaults
XGESdefaults
Hill climbingmax_iter=100000, score_func='local_score_BIC_from_cov'
Tabu searchmax_iter=100000, max_tabu=10, score_func='local_score_BIC_from_cov'
Exact searchdefaults
CALMseed=0
BOSSlambda_value=4.0, score_func='local_score_BIC_from_cov', seed=0
GRaSPlambda_value=4.0, score_func='local_score_BIC_from_cov', seed=0
DirectLiNGAMdefaults
ICA-LiNGAMrandom_state=0
MultiGroupDirectLiNGAMdefaults
VARMA-LiNGAMprune=True
LongitudinalLiNGAMdefaults
PCMCItau_max=2
PCMCI+tau_max=5
LPCMCItau_max=3
ANMdefaults
PNLdefaults
GINdefaults
RCDdefaults
BottomUpParceLiNGAMdefaults
The keyword arguments of every fit; a setting not listed is at its default.

Each method's data

DataCall
Cause-effect pair, additive noiseANMandrey.data.sample_scm(graph="erdos_renyi", functional="additive_noise", noise="gaussian", d=2, n=n, density=1.0, scale="standardize", seed=seed)
Erdos-Renyi graph, linear Gaussian, means shifting across 4 domainsCD-NODbenchmarks/andrey_bench/regime_models.py: sample("domain_shift", d=d, n=n, seed=seed, density=mean_degree, noise="gaussian")
Erdos-Renyi graph, linear Gaussian, interventions on 40% of the variablesGIESbenchmarks/gies_cpu.py: DEGREE = mean_degree; X, interventions, dag = sample(d, seed, rows_per_variable=-(-n // d), target_share=0.4); X, interventions = X[:n], interventions[:n]
Erdos-Renyi graph, linear with uniform noise, one node in five hiddenRCD, BottomUpParceLiNGAMandrey.data.sample_scm(graph="erdos_renyi", functional="linear", noise="uniform", d=d, n=n, density=mean_degree, scale="standardize", latents=max(1, round(0.2 * d)), seed=seed)
Latent variables in a complete DAG, 3 observed indicators eachGINbenchmarks/andrey_bench/regime_models.py: sample("measurement", d=4 * latents, n=n, seed=seed, density=3, noise="uniform")
Erdos-Renyi graph, linear GaussianPC, FCI, GFCI, GES, XGES, Hill climbing, Tabu search, Exact search, CALM, BOSS, GRaSPandrey.data.sample_scm(graph="erdos_renyi", functional="linear", noise="gaussian", d=d, n=n, density=mean_degree, scale="standardize", seed=seed)
Erdos-Renyi graph, linear with uniform noiseDirectLiNGAM, ICA-LiNGAMandrey.data.sample_scm(graph="erdos_renyi", functional="linear", noise="uniform", d=d, n=n, density=mean_degree, scale="standardize", seed=seed)
Linear non-Gaussian panel of n units at 20 time pointsLongitudinalLiNGAMbenchmarks/andrey_bench/lingam_models.py: sample_panel("panel2013", d, 20, n, seed)
Linear-Gaussian time series, 30% of the series unobservedLPCMCIbenchmarks/andrey_bench/temporal_models.py: sample("lpcmci2020", d, n, seed)
Erdos-Renyi graph, linear with uniform noise, 3 groupsMultiGroupDirectLiNGAMbenchmarks/andrey_bench/regime_models.py: sample("multi_group", d=d, n=n, seed=seed, density=mean_degree, noise="uniform")
Linear-Gaussian time series with lagged linksPCMCIbenchmarks/andrey_bench/temporal_models.py: sample("pcmci2019", d, n, seed)
Linear-Gaussian time series with lagged and same-step linksPCMCI+benchmarks/andrey_bench/temporal_models.py: sample("pcmciplus2020", d, n, seed)
Cause-effect pair, post-nonlinearPNLandrey.data.sample_scm(graph="erdos_renyi", functional="post_nonlinear", noise="laplace", d=2, n=n, density=1.0, scale="standardize", seed=seed)
Linear non-Gaussian VARMA time seriesVARMA-LiNGAMbenchmarks/andrey_bench/lingam_models.py: sample_varma("varma2010", d, n, seed)
The call that draws each dataset, with its variables, samples, density, and seed.