Selector-based multi-arm C-TMLE#
This reporting study exercises the greedy, ordered, and discrete selector strategies for a
labelled three-arm treatment. No canonical implementation is compared: R ctmle 0.1.2 is
binary-treatment only, and separate binary fits would target different parameters rather than
form a legitimate multi-arm comparator.
Each strategy is tested against the known truth for three arm means and two ATEs, risk ratios, and odds ratios. The property record runs all three selector paths beside a forced empty path on identical draws. Each path reports its own root-mean-square error against that control. A path that reaches a ratio of one chose the control’s mechanism path, so its pair is not a control.
The primary fit is not cross-fitted, and it still draws a split. The selector scores its
candidate path over five selection folds. That split reads no label here: the fit declares
stratify_folds="none", and it asserts the realized partition before it reports a row. The
property cells declare the same split, and there it reaches the outer folds, the selection folds
and the nested folds of each candidate. No cell declares q_bounds, because every law in this
row has a binary outcome, whose outcome scaler is already the identity.
Accuracy against known truth#
law |
estimand |
what was tested |
implementation |
bias (99% interval) |
coverage |
SE ratio |
result |
|---|---|---|---|---|---|---|---|
three-arm binary-outcome law, discrete selector |
|
difference in counterfactual means, low versus high |
|
-0.0020 to 0.0036 |
0.9400 |
0.9859 |
pass |
three-arm binary-outcome law, discrete selector |
|
difference in counterfactual means, medium versus high |
|
-0.0015 to 0.0040 |
0.9400 |
0.9799 |
pass |
three-arm binary-outcome law, discrete selector |
|
counterfactual mean under treatment arm ‘high’ |
|
-0.0027 to 0.0012 |
0.9437 |
0.9882 |
pass |
three-arm binary-outcome law, discrete selector |
|
counterfactual mean under treatment arm ‘low’ |
|
-0.0020 to 0.0020 |
0.9487 |
0.9856 |
pass |
three-arm binary-outcome law, discrete selector |
|
counterfactual mean under treatment arm ‘medium’ |
|
-0.0015 to 0.0025 |
0.9375 |
0.9591 |
pass |
three-arm binary-outcome law, discrete selector |
|
marginal odds ratio, low versus high, reported on the log scale |
|
-0.0071 to 0.0158 |
0.9413 |
0.9855 |
pass |
three-arm binary-outcome law, discrete selector |
|
marginal odds ratio, medium versus high, reported on the log scale |
|
-0.0041 to 0.0196 |
0.9387 |
0.9780 |
pass |
three-arm binary-outcome law, discrete selector |
|
marginal risk ratio, low versus high, reported on the log scale |
|
-0.0037 to 0.0089 |
0.9437 |
0.9854 |
pass |
three-arm binary-outcome law, discrete selector |
|
marginal risk ratio, medium versus high, reported on the log scale |
|
-0.0021 to 0.0095 |
0.9425 |
0.9845 |
pass |
three-arm binary-outcome law, greedy selector |
|
difference in counterfactual means, low versus high |
|
-0.0044 to 0.0013 |
0.9363 |
0.9580 |
pass |
three-arm binary-outcome law, greedy selector |
|
difference in counterfactual means, medium versus high |
|
-0.0041 to 0.0013 |
0.9400 |
0.9877 |
pass |
three-arm binary-outcome law, greedy selector |
|
counterfactual mean under treatment arm ‘high’ |
|
-0.0012 to 0.0028 |
0.9513 |
0.9824 |
pass |
three-arm binary-outcome law, greedy selector |
|
counterfactual mean under treatment arm ‘low’ |
|
-0.0027 to 0.0013 |
0.9413 |
0.9898 |
pass |
three-arm binary-outcome law, greedy selector |
|
counterfactual mean under treatment arm ‘medium’ |
|
-0.0025 to 0.0014 |
0.9437 |
0.9704 |
pass |
three-arm binary-outcome law, greedy selector |
|
marginal odds ratio, low versus high, reported on the log scale |
|
-0.0169 to 0.0066 |
0.9387 |
0.9578 |
pass |
three-arm binary-outcome law, greedy selector |
|
marginal odds ratio, medium versus high, reported on the log scale |
|
-0.0153 to 0.0080 |
0.9450 |
0.9875 |
pass |
three-arm binary-outcome law, greedy selector |
|
marginal risk ratio, low versus high, reported on the log scale |
|
-0.0093 to 0.0037 |
0.9375 |
0.9567 |
pass |
three-arm binary-outcome law, greedy selector |
|
marginal risk ratio, medium versus high, reported on the log scale |
|
-0.0077 to 0.0038 |
0.9450 |
0.9878 |
pass |
three-arm binary-outcome law, ordered selector |
|
difference in counterfactual means, low versus high |
|
-0.0026 to 0.0029 |
0.9450 |
0.9906 |
pass |
three-arm binary-outcome law, ordered selector |
|
difference in counterfactual means, medium versus high |
|
-0.0028 to 0.0025 |
0.9463 |
1.0012 |
pass |
three-arm binary-outcome law, ordered selector |
|
counterfactual mean under treatment arm ‘high’ |
|
-0.0011 to 0.0029 |
0.9363 |
0.9664 |
pass |
three-arm binary-outcome law, ordered selector |
|
counterfactual mean under treatment arm ‘low’ |
|
-0.000906 to 0.0031 |
0.9500 |
0.9986 |
pass |
three-arm binary-outcome law, ordered selector |
|
counterfactual mean under treatment arm ‘medium’ |
|
-0.0011 to 0.0027 |
0.9450 |
1.0006 |
pass |
three-arm binary-outcome law, ordered selector |
|
marginal odds ratio, low versus high, reported on the log scale |
|
-0.0098 to 0.0130 |
0.9437 |
0.9911 |
pass |
three-arm binary-outcome law, ordered selector |
|
marginal odds ratio, medium versus high, reported on the log scale |
|
-0.0097 to 0.0134 |
0.9500 |
1.0028 |
pass |
three-arm binary-outcome law, ordered selector |
|
marginal risk ratio, low versus high, reported on the log scale |
|
-0.0058 to 0.0067 |
0.9363 |
0.9895 |
pass |
three-arm binary-outcome law, ordered selector |
|
marginal risk ratio, medium versus high, reported on the log scale |
|
-0.0058 to 0.0057 |
0.9487 |
0.9914 |
pass |
Canonical comparison#
No canonical implementation is compared for this row. The committed equivalence.csv is
therefore intentionally empty.
Theory properties#
property |
cell |
role |
what was tested |
what must hold |
measured |
result |
|---|---|---|---|---|---|---|
|
|
diagnostic |
each split is balanced on the treatment, which the package refuses |
reported, not gated: the coverage interval and its paired difference from the unstratified arm are published and no margin is applied |
coverage 0.9331 to 0.9469, paired coverage difference -0.0069 to 0.0016 |
reported |
|
|
diagnostic |
each split is drawn without reading the treatment or the outcome |
reported, not gated: the coverage interval is published and no margin is applied |
coverage 0.9359 to 0.9494 |
reported |
|
|
positive |
both nuisances are correctly specified |
SE ratio and coverage intervals both inside their calibration bands |
coverage 0.9119 to 0.9454, SE ratio 0.8987 to 0.9862 |
fail |
|
|
positive |
the same test applied to a law with a real effect |
rejection lower bound clears the minimum power |
rejection 1, 0.9868 to 1 |
pass |
|
|
positive |
bias, coverage and SE calibration at n = 2,000 |
bias inside the margin, coverage clears the floor, SE ratio inside the sanity band |
bias 0.000089, coverage 0.9087 to 0.9702, SE ratio 0.9567 |
pass |
|
|
positive |
bias, coverage and SE calibration at n = 500 |
bias inside the margin, coverage clears the floor, SE ratio inside the band |
bias 0.0010, coverage 0.8965 to 0.9627, SE ratio 0.9892 |
fail |
|
|
positive |
bias, coverage and SE calibration at n = 8,000 |
bias inside the margin, coverage clears the floor, SE ratio inside the sanity band |
bias 0.000647, coverage 0.9057 to 0.9683, SE ratio 0.9815 |
pass |
|
|
positive |
log empirical spread of the estimates regressed on log n across three sizes |
slope interval inside the root-n band and excluding -1/4 |
slope -0.5502 to -0.4599 |
pass |
|
|
positive |
the same regression applied to the mean reported standard error |
slope interval inside the root-n band and excluding -1/4 |
slope -0.5123 to -0.5058 |
pass |
|
|
positive |
the discrete selector chooses among a declared candidate ladder |
bias interval inside the equivalence margin, and RMSE below the control’s by the declared ratio |
bias 0.1589 to 0.1660, margin 0.0069, RMSE ratio 1 |
fail |
|
|
control |
the selector is forced to stop at an empty path |
bias interval must fall entirely outside the margin |
bias 0.1589 to 0.1660, margin 0.0069, RMSE ratio 1 |
pass |
|
|
positive |
the greedy selector chooses its own mechanism path |
bias interval inside the equivalence margin, and RMSE below the control’s by the declared ratio |
bias 0.0279 to 0.0443, margin 0.0158, RMSE ratio 0.4415 |
fail |
|
|
positive |
the ordered selector chooses how far along a fixed covariate order to go |
bias interval inside the equivalence margin, and RMSE below the control’s by the declared ratio |
bias 0.0154 to 0.0304, margin 0.0145, RMSE ratio 0.3781 |
fail |
|
|
positive |
a confounded law whose true contrast is exactly zero |
one-sided rejection bound stays under the declared type-I ceiling |
rejection 0.0625, 0.0354 to 0.1004 |
fail |
Measured values#
quantity |
value |
source |
|---|---|---|
|
800 |
primary replications per selector strategy |
|
1500 |
observations per primary replication |
|
27 |
implementation-estimand truth tests |
|
27 |
truth tests passing |
|
27 |
selector truth tests |
|
27 |
selector truth tests passing |
|
12 |
repeated-sampling property cells |
|
5 |
property cells passing |
|
2 |
fold-policy rows reported rather than gated, and excluded from the two counts above |
|
0.9429 |
reported coverage of the split this row declares |
|
0.9403 |
reported coverage of the treatment-stratified split |
|
-0.0069 |
its paired 99% lower bound against the unstratified arm |
|
0.0016 |
its paired 99% upper bound against the unstratified arm |
|
8000 |
paired replications behind that difference |
|
400 |
replications behind the gated n = 500 cell |
|
0.9900 |
Monte Carlo confidence level |
|
0.0500 |
nominal estimator size |
|
0.9500 |
nominal estimator coverage |
|
10000 |
resamples for bootstrap intervals |
|
0.2500 |
bias equivalence margin in empirical SDs |
|
0.9000 |
lower coverage gate |
|
0.9900 |
reported conservative-coverage ceiling |
|
0.8000 |
lower SE-ratio screen |
|
1.2000 |
upper SE-ratio screen |
|
0.9300 |
lower calibration band |
|
1.0700 |
upper calibration band |
|
0.9200 |
lower calibration-coverage band |
|
0.9800 |
upper calibration-coverage band |
|
0.1000 |
largest supported type-I rate |
|
0.1500 |
paired similarity margin in empirical SDs |
|
1.1000 |
RMSE-ratio non-inferiority margin |
|
-0.0250 |
coverage-difference non-inferiority margin |
|
0.0500 |
SE-calibration non-inferiority margin |
|
0.8000 |
lower power gate |
|
-0.5000 |
root-n contraction target |
|
-0.6250 |
lower contraction band |
|
-0.3750 |
upper contraction band |
|
-0.2500 |
slower rate the interval must exclude |
|
0.8000 |
required collaborative-to-control RMSE ratio |
Limitations#
This row has reporting policy because multi-arm repeated-sampling evidence was absent when the
study was declared. Six cells fail their own rule, and selector_necessity/empty_control is red
through the family’s joint clause. Each one measures a different thing.
The red-cell ledger lists each red cell of this study with the roadmap ask that
owns it.
The selector-necessity law is a strong instrument. It is the only law in this row that puts units
outside the declared 0.025 truncation bounds.
tests/unit/test_multi_arm_studies.py::test_the_selector_law_leaves_the_declared_truncation_region
records that difference against the registered law, which keeps every unit inside them. The greedy
and ordered paths cut the error ratio well below the declared bar on that law. Both paths still
carry a bias the equivalence margin rejects at n = 1,500, and their coverage stays under the floor.
The discrete ladder reaches a ratio of one, because its cross-validated loss selects the empty
candidate on every draw. Read those cells as measurements under practical positivity loss. They do
not transfer to a law that satisfies the estimator’s declared bounds.
These cells measure a diagnostic that the package does not publish as inference. The greedy,
ordered, and discrete paths refuse ci, pvalue, and std_error, and report plugin_std_error
and plugin_interval instead. The std_error, ci_lower, ci_upper, and covered columns of
this study read those two accessors. The numbers are the ones the committed artifacts carry: the
two accessors call the same body the refused ones call, so the reframing changed no arithmetic and
no regeneration was run.
The interval-calibration and null-size cells are red on the registered law, where the selector reaches the empty candidate under a correct outcome regression. The reported covariance treats the selected candidate as fixed and makes no conditional-coverage claim, so this row shows no calibrated diagnostic interval while selection is load-bearing. F18 records the missing result.
The n = 500 size cell is red as well. Its exact 99% coverage endpoint falls below the 0.90 floor by a few thousandths at 400 replications. Every other declared quantity in that cell is green: the bias sits well inside the margin and the SE ratio sits inside the sanity band. The cell was green on a treatment-stratified split and is red on the unstratified one this row now declares. The budget, the size, the seed and the margins did not move, so the comparison is between two splits at one Monte Carlo resolution. The two larger sizes stay green, and both root-n rates stay inside their band, so the row records no departure from the rate the theory predicts.
RM18 design BD re-read the n = 500 cell on 6,000 fresh replicates, under a declaration written
before its run. The coverage interval runs 0.9318 to 0.9478 and clears the floor. The bias and SE
ratio also meet the cell’s rule, so the reading is resolved: truth satisfies the gate. The
coverage interval lies wholly below 0.95. The re-read does not move the cell’s verdict.
What design BD found at commit 985849c6 gives the numbers, and
tests/diagnostics/rm18_boundary/ holds the rows.
The fold_policy family now measures that comparison. It runs the two split policies on one
binary law and on one set of draws. It reports and it does not gate. Neither cell declares a
margin, so the pass counts above leave both out.
The measured table above gives the paired coverage difference and its two endpoints. That interval covers zero. The fold policy therefore does not explain the endpoint move on this law at this size.
The diagnostic reads its own coverage over 8,000 draws. That coverage does not re-read the
n_500 cell. The gated cell keeps its own 400-replication budget. RM18 at commit dea3297e
declares the rule this reading applies, in “The two readings, declared before they run”.
The row does not establish equivalence to an external package, simultaneous inference, conditional effects, or cross-fitted primary performance. It covers binary outcomes, ordinary GLM nuisance fits, and a pointwise working-mechanism plug-in diagnostic. It excludes missing outcomes, weights, clusters, fold repeats, simultaneous bands, and longitudinal treatment.