class: center, middle, inverse, title-slide .title[ # The Net Present Value of the California Billionaire Tax Act ] .subtitle[ ## Teaching deck: JR’s fiscal estimate of California Proposition 40 (Jaros and Rauh, NBER, September 2026; first version by Rauh, Jaros, Kearney, Doran and Cosso) ] --- name: opa-frame class: center, middle, opa-slide # An Open Reproduction .opa-intro[ The estimate of California's Billionaire Tax Act by Jaros and Rauh (NBER, September 2026), revising the first version by Rauh, Jaros, Kearney, Doran and Cosso, rebuilt from the authors' own code and data and taught step by step, following the [Open Policy Analysis](https://doi.org/10.1093/scipol/scaa067) framework. ] <img src="../assets/opa/opa-details.png" class="opa-mark" alt=""> .opa-legend[ **Open Output**: [the explorer](../explorer/), the mean NPV for every combination of seven inputs<br> **Open Analysis**: [the report](../repro.html), and this deck<br> **Open Materials**: [the repository](https://github.com/fhoces/opa-prop40/tree/main/rjkdc-analysis), the pipeline, its tests and every exported CSV ] .credit[OPA done by [Fernando Hoces de la Guardia](https://fhoces.github.io), using [agentic coding tools](../index.html#how-ai-was-used)] --- <style type="text/css"> .remark-code, .remark-inline-code { font-size: 80%; } .remark-slide-content { padding: 1em 2em; } .small { font-size: 80%; } .tiny { font-size: 65%; } .small table { font-size: 70%; } .tiny table { font-size: 62%; width: 100%; } .highlight-box { background: #fff3e0; border-left: 4px solid #e65100; padding: 0.5em 1em; margin: 0.5em 0; } .blue-box { background: #e3f2fd; border-left: 4px solid #1565c0; padding: 0.5em 1em; margin: 0.5em 0; } a.reflink { color: #3b4a5a; text-decoration: none; border-bottom: 1px dotted #9aa6b2; } a.reflink:hover { color: #1a237e; border-bottom-color: #1a237e; } .site-nav { font-size: 11px; color: #5b6873; margin: 0 0 14px; } .site-nav a { color: #1a237e; text-decoration: none; } .site-nav a:hover { text-decoration: underline; } .remark-slide-content.opa-slide { position: relative; z-index: 0; overflow: hidden; } /* Author credit, pinned near the slide's lower-left corner, above the fixed "Overview" link that the header script places in that corner. */ .opa-slide .credit { position: absolute; left: 2em; bottom: 48px; font-size: 65%; color: #5b6873; } .opa-slide .credit a { color: #1a237e; } .opa-intro { font-size: 92%; max-width: 30em; margin: 0 auto 1.1em; } .opa-legend { font-size: 85%; line-height: 1.75; max-width: 34em; margin: 0 auto; text-align: left; } .opa-intro a, .opa-legend a { color: #1a237e; } .opa-mark { position: absolute; top: 26px; right: 34px; height: 190px; width: auto; opacity: 0.218; z-index: -1; pointer-events: none; } .two { display: flex; gap: 2em; } .two > div { flex: 1; } .big { font-size: 180%; font-weight: 600; margin: 0.1em 0; } table.dt { border-collapse: collapse; width: 100%; font-size: 80%; } table.dt td, table.dt th { padding: 4px 8px; border-bottom: 1px solid #e2e7ec; text-align: right; } table.dt td:first-child, table.dt th:first-child { text-align: left; } .og { font-size: 70%; padding: 1px 6px; border-radius: 2px; border: 1px solid #d98a5b; color: #b4541f; } .og.data { border-color: #6b9bd6; color: #1f5fae; } .footnote { font-size: 60%; color: #5b6873; bottom: 3.6em; left: 3.4em; padding-right: 6em; } </style> .site-nav[ Part of an Open Policy Analysis of the JR analysis (Jaros and Rauh, 2026) of California Proposition 40: [Open Output (the explorer)](../explorer/) · Open Analysis: [Report](../repro.html) and Slides (here) · [Open Materials](https://github.com/fhoces/opa-prop40/tree/main/rjkdc-analysis) · [Overview](../index.html) ] # Deck Map <table style="width:100%; font-size:85%; border-collapse:collapse;"> <tr style="background:#e8eaf6;"><th style="text-align:left; padding:6px;">Part</th><th style="text-align:left; padding:6px;">What it covers</th><th style="padding:6px;">Starts at</th></tr> <tr><td style="padding:6px;"><b>1. The claim</b></td><td style="padding:6px;">What is being estimated, the one equation, the headline number</td><td style="text-align:center;"><a href="#part-claim">go</a></td></tr> <tr><td style="padding:6px;"><b>2. The revenue</b></td><td style="padding:6px;">From $94B before anyone leaves to "about $30B" (Sec 4)</td><td style="text-align:center;"><a href="#part-revenue">go</a></td></tr> <tr><td style="padding:6px;"><b>3. The income tax</b></td><td style="padding:6px;">How much billionaires pay each year, and why it is a range (Sec 5.1)</td><td style="text-align:center;"><a href="#part-income">go</a></td></tr> <tr><td style="padding:6px;"><b>4. For ever</b></td><td style="padding:6px;">The perpetuity and the break-even share (Secs 5.2 and 5.3)</td><td style="text-align:center;"><a href="#part-forever">go</a></td></tr> <tr><td style="padding:6px;"><b>5. The headline</b></td><td style="padding:6px;">The Monte Carlo, and its exact expectation (Sec 5.4)</td><td style="text-align:center;"><a href="#part-mc">go</a></td></tr> <tr><td style="padding:6px;"><b>6. What to argue about</b></td><td style="padding:6px;">Inputs by origin, and the mismatches</td><td style="text-align:center;"><a href="#part-argue">go</a></td></tr> </table> .blue-box[ Every number in this deck comes from the project's `{targets}` pipeline, which reproduces the authors' own workbook, person-level file and R scripts (github.com/bjaros20/wealth_tax, commit `25e84dd`). The deck reads that pipeline's store; nothing here is retyped except the paper's printed values. ] --- name: part-claim class: center, middle, inverse # Part 1: The claim --- # What is being estimated **Proposition 40** taxes, once, 5% of the net worth of billionaires who lived in California on 1 January 2026 (payable over five years). The [BSZ report](../../../bsz-analysis/site/) estimates it at about $100 billion. The JR analysis asks a different question: **is the state better off, counting what it loses?** `$$NPV = WT - f \cdot \frac{C}{r}$$` .pull-left[ - `\(WT\)`: wealth tax collected, **once** - `\(C\)`: income tax the billionaires pay, **per year** - `\(f\)`: share of that income tax that leaves the state - `\(r\)`: discount rate; `\(C/r\)` is a stream of `\(C\)` **for ever**, valued today ] .pull-right[ .highlight-box[ The whole argument is a race between a one-time sum and a perpetuity. At `\(r\)` = 1.5%, losing one dollar a year for ever costs as much as losing 67 dollars today. ] ] --- name: headline # The headline **NBER chapter c15504** (Tax Policy and the Economy, vol. 41), 22 September 2026: Jaros and Rauh, litigation-weighted (the first version, March 2026, was by Rauh, Jaros, Kearney, Doran and Cosso) .big[−$38.9B] mean NPV; 85.2% of outcomes negative (PDF p.35, Figure 3 note; 85% in the text, p.1)<sup>1</sup><br> revenue "approximately 30 billion" ($28.4B to $35.6B) Reproduced: −38.89 (the authors' seeded run, replayed draw for draw) and −38.98 (the exact expectation of the same draws). .blue-box[ This is the **main estimate** of this Open Policy Analysis. The rest of the deck builds it: the revenue (Part 2), the income tax (Part 3), the perpetuity (Part 4) and the Monte Carlo that averages them (Part 5). ] .footnote[<sup>1</sup> The authors' first version (Rauh, Jaros, Kearney, Doran and Cosso, Hoover Institution, SSRN 6340778, March 2026) printed −$24.7B with 71% negative. The pipeline reproduces it too; see the appendix of [the report](../repro.html#appendix-first-version).] --- name: part-revenue class: center, middle, inverse # Part 2: The revenue --- name: revenue # From $94 billion to about $30 billion (Sec 4) <img src="data:image/png;base64,#slides_files/figure-html/revchain-1.png" style="display: block; margin: auto;" /> .small[ Each step sums 5% of each stayer's net worth, minus their home. The first four bars come out of the authors' workbook and person-level file. The last multiplies by `\(q\)` = 0.50, the chance the Act survives in court, borrowed from an accounting rule (ASC 740-10): a judgement, not an estimate. Printed: $29.6 billion, range $28.4 to $35.6 billion (PDF p.23). ] --- # The semi-elasticity: a 5-point tax, how much base leaves? `$$\varepsilon = \frac{\%\Delta\,\text{base}}{\Delta\,\text{rate (points)}}$$` .pull-left[ - **Observed, 7 departures:** the grown base falls 28.6%, so `\(\varepsilon\)` = 5.72 (printed 5.73, PDF p.22), a floor - **Swiss literature** (Brülhart et al. 2022): 0.24 × 43 = 10.32; in log form, 41.1% of the base leaves (PDF p.24) ] .pull-right[ .highlight-box[ Two things to argue with: the Swiss estimate comes from a **recurring** tax, applied here to a **one-time** one (the authors argue taxpayers treat it as the start of a recurring one); and this check does not enter the Monte Carlo, which draws revenue from 0 to 72. ] ] --- name: part-income class: center, middle, inverse # Part 3: The income tax --- name: income-tax-c # How much do billionaires pay each year? (Sec 5.1) .pull-left[ **Upper bound.** Fit a Pareto tail to the Franchise Tax Board's (FTB, the state tax agency) filer counts above 1M to 10M dollars of income: `\(\hat\alpha\)` = 1.44. If the 212 billionaires *are* the 212 highest earners, they pay **$5.76 billion** a year. **But** wealth is not income: many billionaires realise little in a given year. So place them at random among the top `\(K\)` filers (Table 9). ] .pull-right[ <img src="data:image/png;base64,#slides_files/figure-html/table8-1.png" style="display: block; margin: auto;" /> ] .highlight-box[ The authors call `\(K \approx 500\)` "a reasonable lower bound": $3.31B. So `\(C \in [3.3, 5.8]\)`: a range between a model's upper bound and a **judgement** about the floor. ] --- name: part-forever class: center, middle, inverse # Part 4: For ever --- name: perpetuity # The perpetuity multiplier (Sec 5.2) <img src="data:image/png;base64,#slides_files/figure-html/mult-1.png" style="display: block; margin: auto;" /> .small[ The paper's text says the lost stream grows, so the rate should be `\(r - g\)`, and anchors it at 1.5% (the S&P 500 dividend yield). The Monte Carlo draws that rate from 1.5% to 4.5%, calls it `\(r - g\)`, and then writes `\(C/r\)`. Same numbers, two meanings ([mismatch 3](../materials.html#mismatches)). Whether the loss lasts **for ever** or about five years is the main objection of the [BSZ report](../../../bsz-analysis/site/) (Boll, Saez and Zucman). ] --- name: break-even # The break-even departure share (Sec 5.3) `$$NPV = 0 \quad\Longleftrightarrow\quad x^* = \frac{WT \cdot (r - g)}{C}$$` If less than `\(x^*\)` of the income tax base leaves, the tax pays for itself. Table 10, at the paper's central revenue, $36 billion (= 0.5 × 72), and `\(C\)` = $4.55 billion: <table class="dt"><tr><th></th><th>1.5%</th><th>3.0%</th><th>4.5%</th></tr><tr><td>x*</td><td>11.9%</td><td>23.7%</td><td>35.6%</td></tr></table> .highlight-box[ The draw's central departure share is 0.45, above `\(x^*\)` at every rate. That is why the mean NPV comes out negative. Every cell matches the printed Table 10 (PDF p.34). ] --- name: part-mc class: center, middle, inverse # Part 5: The headline --- name: monte-carlo # The Monte Carlo behind −38.9 (Sec 5.4) .pull-left[ Draw 100,000 times, independently: - revenue `\(WT \sim U[0, 72]\)` - income tax `\(C \sim U[3.3, 5.8]\)` - rate `\((r - g) \sim U[0.015, 0.045]\)` - departure share `\(f \sim U[0.3, 0.6]\)` .small[ Revenue is drawn **from zero**: mean 36 = 0.5 × 72. The code never multiplies by `\(q\)`; this zero is its only trace ([mismatch 5](../materials.html#mismatches)). A uniform draw from 0 has the same **mean** as a coin flip on 72, not the same distribution. Lost income tax is **not** scaled by `\(q\)`: people who left do not come back if the Act is struck down. ] ] .pull-right[ <img src="data:image/png;base64,#slides_files/figure-html/hist-1.png" style="display: block; margin: auto;" /> ] .blue-box[ The draws are independent, so the mean has a closed form: −38.98. The printed −38.9 is the authors' seeded run (−38.89), not that expectation. The explorer shows the exact expectation for every setting. ] --- name: part-argue class: center, middle, inverse # Part 6: What to argue about --- name: seven-inputs # The seven inputs that move the answer <table class="dt"><tr><th>Input</th><th>Values in the explorer</th><th>Origin</th></tr><tr><td>Revenue, lowest value the model's random pick can take ($B)</td><td>0 (as coded); 35; 45.59</td><td><span class='og guesswork'>guesswork</span></td></tr><tr><td>Revenue, highest value the model's random pick can take ($B)</td><td>55.10; 67.51; 72 (as coded)</td><td><span class='og data'>data</span></td></tr><tr><td>Litigation survival, applied to revenue</td><td>1 (as coded); 0.75 (OPA reading); 0.50 (OPA reading)</td><td><span class='og guesswork'>guesswork</span></td></tr><tr><td>Annual billionaire income tax, C ($B)</td><td>3.3 to 5.8; 3.3 only; 5.8 only</td><td><span class='og guesswork'>guesswork</span></td></tr><tr><td>Discount rate, the range the model picks from, r</td><td>1.5% to 4.5%; 1.5% only; 4.5% only</td><td><span class='og guesswork'>guesswork</span></td></tr><tr><td>Share of the income tax base that leaves, f</td><td>1 - WT/94.2; 0.30 to 0.60 (as coded); 0.283 fixed</td><td><span class='og guesswork'>guesswork</span></td></tr><tr><td>Growth of lost income, g (r vs r - g reading)</td><td>0 (as coded); 0.5% (illustrative); 1.0% (illustrative)</td><td><span class='og guesswork'>guesswork</span></td></tr></table> .highlight-box[ 6 of the 7 are guesswork. The data (Forbes, FTB, the Pareto fit) set the scale; the sign is decided by the guesses. [Try them in the explorer](../explorer/). ] --- name: mismatches # Mismatches between text, README and code .small[ - **Mismatch 3.** One 1.5% to 4.5% interval for two discount concepts, `(r-g)` and plain `r` - **Mismatch 4.** NBER ceiling: hard-coded 72 vs. 72.05/72.06 derivable from `final.csv` - **Mismatch 5.** `q = 0.50` litigation-survival weight has no explicit multiplier in the code - **Mismatch 6.** Baseline revenue: the workbook's precise 94.30 vs. the printed 94.20 ] .blue-box[ We reproduce the code as shipped and record each discrepancy rather than fix it. Full text on the [materials page](../materials.html#mismatches); every one is pinned by a test.<sup>1</sup> ] .footnote[<sup>1</sup> Five more concern only the authors' first version (March 2026): mismatches 1, 2, 7, 8, 9.]