Monthly efficiency series v1: method map
Prepared 2026-10-16T01:15:33.454Z. These are related tests with explicit implementation gaps, not an exact replication or a matched venue comparison. Both papers were read before implementation: Eric Zitzewitz, NBER w35845, October 2026, and w35846, October 2026. Page numbers below distinguish PDF position from printed page numbers. Tables near the end of w35845 have no printed page number.
| His definition | Location in his paper | Our implementation | Field name | Gap or assumption |
|---|---|---|---|---|
| Overpricing uses the sum of Yes bid prices on mutually exclusive outcomes. The hourly statistics measure opportunities after fees. | w35845 PDF p. 10, printed p. 9, Section IV; w35845 PDF p. 12, printed p. 11, Section IV; w35845 PDF p. 39, Table 3. | Take the maximum displayed bid on each listed Yes token, add across the entire listed negRisk event. Universe is open, politics-tagged negRisk events, at least three listed binary outcomes and one trading outcome. | basket_snapshots[].per_basket[].bid_sum, units cents | Event metadata and negRisk provide the grouping; semantic mutual exclusivity is not separately adjudicated. Augmented sets may contain placeholders or a changing Other outcome. This is a snapshot, not a share of market-hours. |
| Missing bids do not remove outcomes from bid sums; positive bids identify the relevant outcome count in the paper. | w35845 PDF p. 14, printed p. 13, footnote 18 and Table 5 discussion; w35845 PDF p. 41, Table 5A. | Primary: every listed outcome has a positive displayed bid. Secondary: every eligible basket, with missing bids zero. Report both and their denominators. A successful batch omitting a requested token means no displayed bid in the secondary set. HTTP failures are unknown. | primary.convention = every_listed_outcome_positive_bid; secondary.convention = all_listed_outcomes_missing_bids_zero; every_outcome_had_bid | The primary all-positive-bid restriction is our stricter choice, not his Table 3 or Table 4 sample. Primary and secondary are never pooled. |
| Table 3 reports fee-adjusted arbitrage at the start of an hour and throughout an hour. Table 4 reports mean bid sums across hourly observations for selected salient markets. | w35845 PDF p. 39, Table 3; w35845 PDF p. 40, Table 4. | Within each snapshot and convention, report the share above 100 cents, before and after fees, plus cross-sectional mean, median, p10, p90 and maximum. No hourly persistence inference. | primary / secondary: share_above_100, share_above_100_after_fees, mean, median, p10, p90, max | Snapshot medians are not Table 4 time means. The 110 to 125 range is introductory prose, PDF p. 3 / printed p. 2, not a Table 4 median or a top-decile estimate. |
| PredictIt assesses 10% on winning contract profits, without netting losses across contracts. Sell-all quantities can be varied to hedge fees. | w35845 PDF p. 11, printed p. 10, Section IV; w35845 PDF p. 31, printed p. 30, Appendix A.B; w35845 PDF p. 32, printed p. 31, Appendix A.B. | For PredictIt bids b in dollars, the paper's exact continuous-quantity condition is 0.9 * sum[b_i / (1 - 0.1*b_i)] > 1, using q_i proportional to 1 / (1 - 0.1*b_i). No blanket 110-cent hurdle. | PredictIt venue result would use paper_fee_adjusted_arbitrage; predictit.status records the blocked request | The public endpoint returned 403. No PredictIt market statistic is reported. The rule is taken from the paper; a current full fee schedule was not independently read through the blocked venue page. Integer quantities, limits, withdrawal charges and funding are outside the paper's Appendix A test. |
| Fee model must match the venue. | His PredictIt rule above. Polymarket Trading Fees, dated 10 July 2026, fetched 16 October 2026; Maker Rebates Program, fetched 16 October 2026. | Polymarket sale-side taker fee is C * rate * p * (1-p), paid in USDC. Use each market's feesEnabled and feeSchedule.rate, exponent 1. False flags give zero; unknown enabled schedules give unknown results. Subtract the per-leg fee from one-share bid proceeds, then compare proceeds with 100 cents. Current politics rate is 0.04, but other actual schedules in this politics-tagged universe include 0.05 and zero, so no blanket rate is used. | bid_sum_fee_cents, bid_sum_after_fees, fee_adjustment_known; per-outcome fees_enabled, fee_rate, fee_schedule | Continuous one-share fee curve. Five-decimal fee rounding, minimum order sizes, rebates, gas, conversion costs and book depth constraints are not incorporated. Current feesEnabled is not a historical fee regime. No fee correction is applied to the historical regression. |
| Binary longshot specification: logit of payoff on log price odds. Slope above one is consistent with overpricing longshots. Other market types use log price and market by time fixed effects. | w35845 PDF p. 17, printed p. 16, Section V.A.2; w35845 PDF p. 42, Table 6 notes. | Unweighted binary maximum likelihood: Pr(y=1) = logistic(intercept + slope * log[p/(1-p)]), one Yes contract observation at a fixed horizon. Include components of multi-outcome events and cluster at Gamma event_id. Efficient calibration has intercept 0 and slope 1. | runs[].longshot.slope, intercept, covariance_cluster; pooled.primary | Matches the binary functional form, not the paper's multinomial/fixed-effects model for multi-outcome markets. Sample includes all politics, not only elections. No claim of a structural estimate of investor beliefs. |
| Trim prices between 1.5 and 98.5 cents. | w35845 PDF p. 19, printed p. 18, end of Section V.A.2; w35845 PDF p. 50, Table A3. | Include p >= 0.015 and p <= 0.985; apply before fitting and counting contracts/events. | trim, trim_cents, trim_inclusive | Inclusive endpoints are our stated implementation choice; the prose does not settle equality at the cutoffs. |
| Table 8 uses the most recent eligible observation as of one week before an election, once per market; it is election-only. | w35845 PDF p. 21, printed p. 20, Table 8 discussion; w35845 PDF p. 44, Table 8, 1 or 2 outcomes, 1 week. | One observation on or before current scheduled end minus 7 days, at most 24 hours old, from saved hourly public prices-history. Group by scheduled-end month, January 2025 through September 2026. Primary USD 50,000 lifetime market-volume floor; USD 10,000 variant. Every month gets an estimate; n < 150 is thin. Add pooled estimates over the same period. | horizon = 7, max_price_age_hours = 24, volume_floor_usd, thin, pooled | A generic scheduled end is not a separately coded election day. Volume is cumulative volume observed at catalogue collection, not contemporaneous volume at the observation. The 24-hour freshness allowance is ours; his fresh-trade rule is tighter. October is incomplete and has no monthly slope. |
| Quote convention prioritizes quotes, otherwise recent trades. Single Yes/No contracts use midpoint or last trade. Multi-outcome quotes use normalized bids when bids sum >= 1, normalized asks when asks sum <= 1, otherwise an interpolation that sums to one. Quotes require one-cent spreads on every outcome in the baseline; trade sums must be within 0.9 to 1.1. | w35845 PDF p. 15, printed p. 14, Section V.A.1; w35845 PDF p. 16, printed p. 15, footnotes 21-23. | The backfill reuses scalar prices-history p and does not invent historical spreads or normalize incomplete historical outcome groups. Live books provide his piecewise quote probabilities alongside the literal w35846 alternative. | price_convention = public_scalar_prices_history; per-outcome price_w35845_piecewise, price_w35845_piecewise_rule | Historical executable quotes and one-cent spread filters cannot be recovered from the scalar history. Scalar price convention cannot be verified as his historical quote convention. |
| Weighted midpoint in w35846 footnote 20: p_i = b_i + (a_i-b_i) * (1-sum b) / (sum a-sum b). | w35846 PDF p. 11, printed p. 10, footnote 20; footnote 21 discusses quote inclusion. | Apply the exact formula only where every ask and bid sum is known and sum a > sum b. Preserve the common weight. Separately record whether it is within the spread and a valid probability vector. Also supply the w35845 piecewise alternative. Available for 77 first-snapshot and 78 fresh-snapshot baskets. | weighted_midpoint_footnote20, weighted_midpoint_lambda, weighted_midpoint_sum, weighted_midpoint_within_spread; live-outcome CSV | A complete interpolation may extrapolate if bids already exceed one or asks fall below one. Do not silently clip. No alternative-price longshot slope can be estimated on unresolved live outcomes. Comparison with Gamma's current outcomePrices is descriptive only; it is not a matched historical-price comparison. |
| Paper standard errors cluster on event date, allowing correlated contracts on the same election day. | w35845 PDF p. 22, printed p. 21, footnote 30; w35845 PDF p. 42, Table 6 notes; w35845 PDF p. 44, Table 8 notes. | CR1 sandwich scores aggregated by Gamma event_id, correction G/(G-1) * (N-1)/(N-2). Normal 95% ranges use 1.959963984540054. | cluster_unit, cluster_se, clustered_95_range, intercept_clustered_95_range | Event ID differs from event date. Correlation across events on a shared election date can make our ranges too narrow. Thin is a contract-count flag, not proof of adequate independent events. |
| Election observations after election day are excluded; price timing is tied to the event. | w35845 PDF p. 16, printed p. 15, Section V.A.1; w35845 PDF p. 21, printed p. 20, Table 8 discussion. | Use scheduled end, never actual close: the prior 15-35-cent diagnostic changes from 2.6 to 10.0 payoff-minus-price points when the clock is anchored to actual close. | clock = scheduled_end; clock_diagnostic | Actual close depends on the outcome and changes both samples and price times. Diagnostic samples are separate, not a causal or tradable edge. endDate is current catalogue metadata, not an archived pre-outcome schedule; no claim that it was immutable before resolution. |
| Political-bias Table 3 regresses returns on party orientation, controlling for election by horizon and clustering on election date. | w35846 PDF p. 12, printed p. 11; PDF p. 26, Table 3; party coding in PDF pp. 10-11, printed pp. 9-10. | Planned, absent from this run. Needs verified candidate-party links, left = -1, centre = 0, right = +1 by country and election date, general-election identifiers, election-date clusters, and observations at 1, 21 and 120 days. | political_bias.status = planned_not_in_first_run | No inferred party assignment from contract prices or names. US party mapping must handle independents and exceptions; non-US coding needs sourced party alliances or country-specific evidence. |
The first-snapshot universe falls from 1696 to 555 baskets after removing 1141 2026 US House, Senate, governor and related midterm propositions. The fresh universe falls from 1702 to 559, removing 1143. The exclusion manifest contains IDs, titles and reasons, with no excluded quotes. No book-recorder output was accessed.
The historical reference values are labelled PredictIt 2016 to 2022. Table 4's 110.9 and 114.3 are time means for two selected 2020 markets; the introductory 110 to 125 range is qualitative. Table 6's 1.501 and Table 8's one-week 1.369 are different historical samples and observation rules. None is a matched Polymarket statistic.
Added 16 October 2026: bootstrap ranges and a dollar on every longshot
Eric Zitzewitz's reply of 16 October raised two points: clustered standard errors need enough clusters of similar size, which short monthly samples do not always have, and a wild-cluster bootstrap is one answer. The page now carries that bootstrap. The clustered normal ranges above remain in the data and in the tooltips.
| What | Implementation | Field names | Caveat |
|---|---|---|---|
| Slope ranges on the month strip and in the hero | Restricted wild-cluster score bootstrap of the binary logit slope. For a candidate slope b0 the intercept is refitted with the slope held at b0, each cluster's summed score is multiplied by a random weight, one Newton step is taken from the restricted point, and the bootstrap t statistics are compared with the CR1 clustered t statistic of the unrestricted fit. The 95% range is the set of b0 with a bootstrap p value of at least 0.05, found by bisection with the same 4,999 weight draws for every candidate. Two cluster choices: Gamma event with Rademacher weights, which is the published clustering, and scheduled-end date with Webb six-point weights, which is closer to the paper's election-date clustering. Seed 20261016. | wcr_event_lo, wcr_event_hi, wcr_date_lo, wcr_date_hi, n_end_dates, cr1_date_lo, cr1_date_hi in bootstrap-2026-10.csv | The score form takes one Newton step rather than refitting at every draw. Months with fewer than 12 end dates are February 2025 with 4, August 2025 with 7, March 2025 with 10, and January, April and July 2025 with 11; with so few clusters the end-date test can be too narrow and those ranges should be read with care. The event version has at least 30 clusters in every month. |
| A dollar on every longshot | Every contract in the series sample priced at 20 cents or less a week before its scheduled end gets one dollar, and every contract at 80 cents or more gets one dollar. Payoff per dollar is y / p for a Yes resolution and zero otherwise, before fees and before any spread. The line is the running mean of payoff minus one over all contracts up to and including each month. The band is the unrestricted wild-cluster percentile bootstrap of that running mean: event-summed residuals multiplied by Rademacher weights, 4,999 draws, 2.5 and 97.5 percentiles. | dollar-2026-10.csv | This is payoff minus price on one public price reading, not a trading record: no fill, size, fee, spread or capital cost is modelled, and the cheapest contracts carry the largest payoffs. The framing follows his suggestion of cumulative returns with confidence bands; the party version waits for verified party coding. |
The references are Kline and Santos, A Score Based Approach to Wild Bootstrap Inference, Journal of Econometric Methods 2012; MacKinnon and Webb, The Wild Bootstrap for Few (Treated) Clusters, Econometrics Journal 2018; Cameron, Gelbach and Miller, Bootstrap-Based Improvements for Inference with Clustered Errors, Review of Economics and Statistics 2008; and Webb, Reworking Wild Bootstrap Based Inference for Clustered Errors, Queen's Economics Department Working Paper 1315, 2014. The script is scripts/bootstrap-series.mjs in the download; it refits the published logit first and stops if any published slope or clustered range is not reproduced to machine precision.
Vultax Research, 16 October 2026. The data behind every number is in vultax-efficiency-series-2026-10.zip, 2.9 MB, with a README, per-contract and per-basket CSVs, the series JSON, the bootstrap ranges, the dollar series and the scripts.