Draft of 6 July 2026 · early human–AI orchestrated draft by David Reinstein with Claude (currently Opus 4.8) · not yet carefully reviewed or shown to field experts.
Early draft — not reviewed, please treat with caution (click to expand)
This page was put together quickly with AI assistance. We have not checked it carefully ourselves, and we have not run it past Pablo or any field experts. Numbers, framings, and the little calculator below could all be wrong or misleading; treat everything here as a first pass meant to start a conversation, not a finding.
It discusses external work by Pablo Antonio Moreno Casares (Pablo AMC) and builds a deliberately simplified bridge from our cost model to his demand model. His interactive model is the authoritative source for the demand side — our bridge only approximates a slice of it. Corrections very welcome via Hypothesis — the annotation tool (the < tab at the right of this page) — or the discussion hub.
The two efforts focus on different aspects of the same problem — we look at production cost (from TEAs), he looks at the demand-side response — so they could be connected:
Our project (supply / cost)
A bottom-up Monte Carlo TEA — but also an interactive calculator you can re-run under your own assumptions, and a worked template for future modellers. Media, micronutrients, growth factors, capital and operating costs → a distribution of cost per kg for a target year (default 2036).
$/kg →
Pablo's model (demand / adoption)
Takes cost as exogenous (pinned from the TEAs). Cost → retail price ratio → a discrete-choice (logit) estimate of market share, split by species, product tier, and geography, for both a mainstream and an ethically-motivated consumer segment → a diffusion curve for how fast that share is approached over time.
Because he pins price from the same TEAs we build bottom-up (Humbird 2021, Pasitka 2024, Negulescu 2023, CE Delft, GFI), our cost distribution is a natural input to his demand model. Neither of us covers the other’s side: we do not model demand or adoption; he does not model supply, economies of scale, or how the market would clear.
Where the two agree, differ, and what’s new
The comparison in this section is our own AI-assisted reading (Claude, currently Opus 4.8), not Pablo’s characterization of either model — please check it against his post.
On agreements: both projects draw on the same source literature. Pablo emphasizes that Humbird’s 2021 pessimism was driven mostly by amino-acid/media cost — not a hard thermodynamic constraint — and that Pasitka’s 2024 empirical work (hydrolysate medium at $0.63/L) pushed that cost down sharply. Our model’s cost range is broadly consistent with that literature; where the central estimate should sit within the range is exactly the open question, and we take no position on it here.
Differences that matter:
Scope. We are supply-side and end at a cost distribution; he is demand-side and ends at market shares. His work fills a gap our analysis leaves open — the demand side being one of several things we don’t cover.
Cost level and spread. His headline biomass figure is $15–30/kg (point read ~$25/kg). Our default is higher and much wider — median ~$56/kg, 5–95% roughly $15–310/kg. It is tempting to attribute this to our adding capital and operating costs, but that is a small part of it: in our model capital + fixed operating cost is only ~12% of the median (~$7/kg). The real driver is media: our median media cost is ~$35/kg, versus the ~$14/kg biomass media Pasitka reports and Pablo adopts. So even stripping our capital and operating costs entirely, our variable-cost median (~$48/kg) sits well above his ~$25. The gap is mostly that our priors on media intensity (litres of medium per kg) and medium price are wider and centred higher than his single empirical point — plus a fat right tail that pulls our mean (~$97/kg) far above our median. He instead reads the optimistic end of the same literature.
Treatment of uncertainty. Ours is fundamentally a distribution (30k+ Monte Carlo draws over structural priors), as well as an interactive calculator that lets users tune the midpoints, spreads, and structural assumptions; his exposes uncertainty through user-tuned sliders and a lighter Monte Carlo band on the demand parameters.
What drives each output. For our cost figure, media cost dominates, followed by growth-factor cost and reactor capital; financing turns out to matter little to the spread. For his market share it is the price ratio R (cultivated cost ÷ conventional price) plus behavioural terms — loss aversion, a “real meat” credit, authenticity/provenance penalties, and food neophobia — none of which appear anywhere in a cost TEA.
Genuinely new in his work, relative to ours:
Species inversion. The cheap, feed-efficient meats (chicken, pork) are the hardest to displace because conventional price is already low; expensive meats (beef, seafood) and luxury goods are the most penetrable. This is a demand-side pattern — a conjecture his model generates — that our cost model cannot produce.
Beachhead logic. Foie gras as the standout entry product — luxury price, unstructured (little scaffolding), and already ethically stigmatized or banned in places. Also high-end fish, tuna, salmon.
Disruption framing (in his post’s discussion, not the formal model). An innovation-economics argument (Christensen’s disruptive-innovation theory) that improving on incumbents’ own dimensions usually fails; cultivated meat needs an underserved segment (vegan/vegetarian attrition, “vegan veto” restaurants, biosecurity-sensitive buyers) plus government or advocacy push, much as electric cars did.
Behavioural realism. A random-utility model with an explicit “real meat vs. from-an-animal” separation (GFI’s thesis), neophobia that decays with exposure, and income-elasticity effects (would AGI-driven abundance change adoption? — modestly).
Rough notes on strengths and limitations
These are tentative observations from our own AI-assisted reading, not verdicts — and self-assessing our own model is inherently limited, so weight our comments on Pablo’s work above our comments on our own. Neither project is authoritative; both are explicitly AI-assisted and in progress.
Our cost model — apparent strengths: a first-principles structure, wide and explicit uncertainty, a latent “maturity” factor tying technology adoption to financing, a documented external critique with responses (Limits/Critique), and — with 10+ already collected — a link (in progress) to explicitly stated expert and forecaster beliefs. Apparent limitations: an ad hoc dependence structure, supplemental proteins (albumin, transferrin, insulin) handled coarsely, sensitivity shown as a dollar-swing ranking rather than a variance decomposition, and a fat right tail that some readers find implausibly pessimistic.
Pablo’s demand model — apparent strengths: it addresses questions our cost model doesn’t; it is calibrated to real data moments (plant-based ~1.2% market share, and the finding that ~89% of plant-based buyers are mainstream flexitarians rather than ethically-motivated vegetarians, Gallup veg+vegan ~5%, measured meat price elasticities); Pablo reports it reproduces plant-based milk’s share out-of-sample (without being fitted to it, though we have not verified this); and his species-inversion and beachhead patterns are robust to the diffusion form (which only sets speed, not the ceiling). Limitations he flags himself: (a) price elasticities are measured on today’s marginal choices but applied to a not-yet-existing product at very different maturity; (b) the Bass diffusion S-curve is built for first-purchase durables, not repeat grocery buys; (c) several behavioural weights are solved to hit calibration targets rather than independently measured; and (d) the scaffold cost ($6/kg) is an unsourced assumption. He also notes a scope boundary — precision fermentation (egg, dairy) is left out for want of a good TEA — which reads less as a flaw than as a direction for new work.
Which is more credible? They are not rivals — they are not estimating the same quantity. On the shared cost question, Pablo reads the optimistic end of a range our distribution also covers; our median is higher mostly because of our wider, higher media-cost priors and fat tail, not (as one might assume) because of capital and operating costs. His demand work is the more novel and, within its stated caveats, the more decision-relevant contribution: even a cheap cultivated product may capture little chicken or pork share, which reframes what “success” looks like — though this species-by-species framing has an important caveat.
Interactive bridge: from a cost per kg to a market share
The calculator below takes a cultivated biomass cost (seed it with our model’s output, or with Pablo’s optimistic read) and runs a much-simplified version of his cost-to-share logic: delivered cost → retail price ratio R against each species’ conventional US price → a two-way conventional-vs-cultivated logit share.
This is NOT Pablo’s model — it is a rough stand-in. Read before trusting any number.
Pablo’s real model is a two-segment, four-product random-utility system with income effects, loss aversion, and diffusion timing. What runs below is none of that. It is a one-line approximation we wrote to build intuition: a single-attribute logit whose slope we simply reverse-engineered to pass through two numbers Pablo reports — at price parity (R = 1) about 49% share, and at R ≈ 2.4 about 9% share — and to which we then bolt the per-tier authenticity offsets he documents (mince +0.2, cut −0.4, premium −1.5; foie gras treated as unstructured and stigmatized, so a small penalty). It omits his two consumer segments, the outside “whole-food” option, income effects, loss aversion, and all diffusion timing. Because it is pinned to only two of his points, it can only reproduce the shape of his story (cheap species resist, expensive and luxury ones are penetrable), not his actual per-species shares. For any number you would cite, use his interactive model, not this one. We would happily replace this with a faithful port, or with his own code, if he is open to it.
gamma =2.64c0 =-0.04logistic = (x) =>1/ (1+Math.exp(-x))// Species: approximate 2025 US retail price ($/kg) + tier + authenticity offset tau.// Prices are rounded from US averages (per lb x 2.2046 = per kg):// Chicken breast boneless ~$4.17/lb -> ~$9/kg (BLS/FRED APU0000FF1101, late 2025)// Pork chops ~$4.1/lb -> ~$9/kg (BLS Average Price program)// Ground beef 100% ~$4.56/lb -> ~$10/kg (FRED APU0000703112, 2025)// Beef steak (avg of cuts) ~$10.2/lb -> ~$22/kg (BLS/USDA ERS, 2025)// Salmon fillet ~$11/lb -> ~$24/kg (typical US retail; no single BLS series)// Shrimp (whole/shell-on) ~$8/lb -> ~$18/kg; shrimp paste/processed cheaper ~$11/kg// (typical US retail; rough anchors, no single BLS series)// Foie gras ~$80/kg -> illustrative luxury anchor only, NOT an official price series// Tier "unstructured" => no scaffold cost; "cut" => scaffold applies.species = [ {name:"Chicken breast",pc:9,tier:"cut",tau:-0.4,structured:true}, {name:"Pork",pc:9,tier:"cut",tau:-0.4,structured:true}, {name:"Ground beef",pc:10,tier:"mince",tau:+0.2,structured:false}, {name:"Beef steak",pc:22,tier:"cut (premium)",tau:-0.4,structured:true}, {name:"Salmon",pc:24,tier:"cut",tau:-0.4,structured:true}, {name:"Shrimp (whole)",pc:18,tier:"cut",tau:-0.4,structured:true}, {name:"Shrimp paste",pc:11,tier:"mince",tau:+0.2,structured:false}, {name:"Foie gras",pc:80,tier:"luxury/unstructured",tau:+0.1,structured:false},]rows = species.map(s => {const delivered = cbio + (s.structured? scaffold_cut :0) + markupconst R = delivered / s.pcconst share =logistic(c0 - gamma *Math.log(R) + s.tau)return {name: s.name,tier: s.tier,pc: s.pc, delivered, R, share}})
Code
html`<div style="overflow-x:auto; max-width:100%;"><table style="width:100%; min-width:620px; border-collapse:collapse; font-size:13.5px; margin:8px 0;"><thead><tr> <th style="padding:8px; text-align:left; background:#2c3e50; color:#fff;" title="The conventional product cultivated meat would compete with, and its product form (mince = ground/paste, no scaffold needed; cut = whole muscle, needs a scaffold; luxury = premium/prestige)."><span class="th-hint">Product (form)</span></th> <th style="padding:8px; text-align:right; white-space:nowrap; background:#2c3e50; color:#fff;" title="Approximate 2025 US retail price of the conventional product, in dollars per kg."><span class="th-hint">Conventional<br>retail $/kg</span></th> <th style="padding:8px; text-align:right; white-space:nowrap; background:#2c3e50; color:#fff;" title="Modelled cultivated cost delivered to retail = your biomass cost slider + scaffold (for cuts) + markup."><span class="th-hint">Cultivated<br>cost $/kg</span></th> <th style="padding:8px; text-align:right; white-space:nowrap; background:#2c3e50; color:#fff;" title="Price ratio R = cultivated cost ÷ conventional price. Below 1 = cheaper than conventional; above 1 = more expensive."><span class="th-hint">Price<br>ratio R</span></th> <th style="padding:8px; text-align:left; background:#2c3e50; color:#fff;" title="Estimated share of THIS product's own market that cultivated would capture, from the simplified logit. Not a share of all meat. The bar width uses a compressed (square-root) scale so small shares stay visible; the % is exact."><span class="th-hint">Cultivated share of<br>this product's market</span></th></tr></thead><tbody>${rows.map(r =>html`<tr style="border-bottom:1px solid #dee2e6;"> <td style="padding:7px 8px;">${r.name} <span style="color:#888; font-size:11.5px;">(${r.tier})</span></td> <td style="padding:7px 8px; text-align:right;">$${r.pc.toFixed(0)}</td> <td style="padding:7px 8px; text-align:right;">$${r.delivered.toFixed(0)}</td> <td style="padding:7px 8px; text-align:right;">${r.R.toFixed(2)}×</td> <td style="padding:7px 8px;"> <div style="display:flex; align-items:center; gap:8px;"> <div style="flex:0 0 46px; text-align:right; font-variant-numeric:tabular-nums;">${(r.share*100).toFixed(1)}%</div> <div style="flex:1; background:#eef1ee; border-radius:4px; height:12px; overflow:hidden;"> <div style="width:${Math.min(100,Math.sqrt(r.share)*100)}%; height:100%; background:${r.share>0.3?'#2d7a2d':r.share>0.08?'#c8862b':'#b04a4a'};"></div> </div> </div> </td></tr>`)}</tbody></table></div><p style="font-size:12px; color:#666; margin-top:6px;">Hover any column header for what it means. Bar width uses a compressed (square-root) scaleso small shares stay visible next to foie gras — the <em>percentage is exact</em>; the baris only a rough visual. Colour: green > 30%, amber 8–30%, red < 8%.<br>Ordering is driven almost entirely by R (cost fixed, conventional price varies) plus theproduct-form offset — reproducing Pablo's inversion: cheap chicken and pork resist, whileexpensive beef, seafood, shrimp, and luxury foie gras are more penetrable. (Pablo alsonotes cultivated shrimp has a practical edge his model doesn't capture: no shells or headsto remove.)<br>Conventional prices are rounded 2025 US retail figures (per lb × 2.2 = per kg): chickenbreast ~$9/kg and pork ~$9/kg (US BLS Average Price / FRED series), ground beef ~$10/kg(FRED APU0000703112), steak ~$22/kg (BLS/USDA ERS). Salmon ~$24/kg and shrimp(~$18/kg whole, ~$11/kg paste) are typical retail figures without a single officialseries; foie gras ~$80/kg is an illustrative luxury anchor, not an official price. Changeany of these and the ordering can shift.</p>`
Try loading “Our model median ($56)” versus “Pablo optimistic (~$25)” and watch the shares move. Even at the optimistic cost, chicken and pork stay near-zero while foie gras clears easily — the demand-side pattern that a cheaper product does not by itself rescue the feed-efficient species. At our more pessimistic median the whole picture shifts down, which is why the cost side of the picture still matters.
Possible next steps for reconciliation
Feed the full distribution, not a point. Pipe our 30k-draw cost distribution into his cost-to-share step to produce a share distribution per species, rather than reading one cost point at a time.
Reconcile the media priors. The $25-vs-$56 gap is mostly media cost, not capital or operating cost. The productive comparison is our priors on medium price ($/L) and media intensity (L/kg) against Pasitka’s empirical point that Pablo adopts — where should the central estimate sit, and how wide should the tail be?
Joint parameters. His scaffold ($6/kg) and markup ($5/kg) assumptions are exactly the kind of parameter our elicitation and workshop process could put priors on.
Conversation. Pablo invited collaboration; the CM workshop crux-mapping between “skeptics and optimists” is a natural venue.
Provenance: this page was drafted quickly with AI assistance from Pablo’s public post and model plus our own repo, and has not yet had careful human review. See the pabloamc_bridge/README.md notes for the faithfulness caveats (the link resolves once this is pushed to GitHub).
Source Code
---title: "Cost → Demand: bridging to Pablo AMC's adoption model"toc: trueformat: html: css: styles.css include-in-header: text: | <link rel="stylesheet" href="https://unpkg.com/tippy.js@6/dist/tippy.css"/> <style> /* Mark tooltip anchors as hoverable (matches the rest of the dashboard) */ abbr[title], abbr[data-tip] { text-decoration: underline dotted; cursor: help; text-decoration-thickness: 1px; text-underline-offset: 2px; } /* Column-header hint stays styled after Tippy strips the title attribute */ th .th-hint { text-decoration: underline dotted; text-underline-offset: 2px; cursor: help; } </style> include-after-body: text: | <script src="https://hypothes.is/embed.js" async></script> <script src="https://unpkg.com/@popperjs/core@2"></script> <script src="https://unpkg.com/tippy.js@6"></script> <script> // Initialise Tippy.js tooltips on the static prose abbr[title] elements // (mirrors docs.qmd). We deliberately do NOT touch the OJS-generated table, // which re-renders reactively — its th[title] cells keep their native browser // tooltips, which is robust and needs no re-init loop. (function () { function initTooltips() { if (typeof tippy === 'undefined') return; document.querySelectorAll('abbr[title]').forEach(function (el) { if (el._tippy) return; var t = el.getAttribute('title'); if (!t) return; el.removeAttribute('title'); tippy(el, { content: t, placement: 'bottom', maxWidth: 380, allowHTML: false }); }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initTooltips); } else { initTooltips(); } setTimeout(initTooltips, 1500); })(); </script>---*Draft of 6 July 2026 · early human–AI orchestrated draft by David Reinstein with Claude(currently Opus 4.8) · not yet carefully reviewed or shown to field experts.*::: {.callout-warning collapse="true"}## Early draft — not reviewed, please treat with caution (click to expand)This page was put together quickly with AI assistance. We have *not* checked it carefullyourselves, and we have *not* run it past Pablo or any field experts. Numbers, framings,and the little calculator below could all be wrong or misleading; treat everything here asa first pass meant to start a conversation, not a finding.It discusses external work by Pablo Antonio Moreno Casares (Pablo AMC) and builds adeliberately simplified bridge from our cost model to his demand model. His[interactive model](https://pabloamc.github.io/Cultivated_meat/interactive.html) is theauthoritative source for the demand side — our bridge only approximates a slice of it.Corrections very welcome via [Hypothesis](https://hypothes.is/) — the annotation tool (the`<` tab at the right of this page) — or the[discussion hub](https://github.com/unjournal/cm_pq_modeling/discussions/3).:::**Return to:** [Interactive Cost Model](index.qmd) | [TEA Comparison](compare.qmd) | [Learn](learn.qmd) | [Limits/Critique](limits.qmd)## The two efforts focus on different aspectsIn July 2026 Pablo AMC published *["Cultivating hope: calibrating the expectations forcultivated meat to end factory farming"](https://forum.effectivealtruism.org/posts/ED2ag8hYTWf4kmL3x/cultivating-hope-calibrating-the-expectations-for-cultivated)*,with an accompanying [interactive economic model](https://pabloamc.github.io/Cultivated_meat/interactive.html).It has two parts: (1) a review of the same TEA literature we model, and (2) ademand-side model that takes a cost per kg as given and asks *what market sharewould consumers choose at that price?*The two efforts focus on different aspects of the same problem — we look at productioncost (from TEAs), he looks at the demand-side response — so they could be connected:```{=html}<div style="margin:14px 0; padding:12px 14px; border:1px solid #d4dfd4; border-radius:8px; background:#f8f9f5; font-size:14px;"><table style="width:100%; border-collapse:collapse;"><tr> <td style="vertical-align:top; width:42%; padding:5px 4px 5px 8px;"> <strong>Our project (supply / cost)</strong><br> A bottom-up Monte Carlo TEA — but also an interactive calculator you can re-run under your own assumptions, and a worked template for future modellers. Media, micronutrients, growth factors, capital and operating costs → a distribution of cost per kg for a target year (default 2036). </td> <td style="vertical-align:middle; width:1%; text-align:center; font-size:14px; color:#2d4a2d; white-space:nowrap; padding:0 4px;">$/kg →</td> <td style="vertical-align:top; width:57%; padding:5px 4px 5px 8px;"> <strong>Pablo's model (demand / adoption)</strong><br> Takes cost as <em>exogenous</em> (pinned from the TEAs). Cost → retail price ratio → a discrete-choice (logit) estimate of market share, split by species, product tier, and geography, for both a mainstream and an ethically-motivated consumer segment → a diffusion curve for how fast that share is approached over time. </td></tr></table></div>```Because he pins price from the same<abbr title="Techno-economic analysis: a bottom-up engineering cost study that estimates what it would cost to produce something at scale, from process steps, input prices, equipment, and facility assumptions.">TEAs</abbr>we build bottom-up (Humbird 2021, Pasitka 2024, Negulescu 2023, CE Delft, GFI), our costdistribution is a natural input to his demand model. Neither of us covers the other's side:we do not model demand or adoption; he does not model supply, economies of scale, or howthe market would clear.## Where the two agree, differ, and what's new*The comparison in this section is our own AI-assisted reading (Claude, currently Opus4.8), not Pablo's characterization of either model — please check it against[his post](https://forum.effectivealtruism.org/posts/ED2ag8hYTWf4kmL3x/cultivating-hope-calibrating-the-expectations-for-cultivated).*On agreements: both projects draw on the same source literature. Pablo emphasizes thatHumbird's 2021 pessimism was driven mostly by amino-acid/media cost — not a hardthermodynamic constraint — and that Pasitka's 2024 empirical work(<abbr title="Hydrolysate: enzymatically broken-down plant or yeast protein (e.g. soy or yeast extract) used as a cheap bulk source of amino acids in the growth medium, in place of purified pharma-grade amino acids.">hydrolysate</abbr>medium at \$0.63/L) pushed that cost down sharply. Our model's cost range is broadlyconsistent with that literature; where the central estimate should sit within the range isexactly the open question, and we take no position on it here.Differences that matter:- *Scope.* We are supply-side and end at a cost distribution; he is demand-side and ends at market shares. His work fills a gap our analysis leaves open — the demand side being one of several things we don't cover.- *Cost level and spread.* His headline biomass figure is \$15–30/kg (point read ~\$25/kg). Our default is higher and much wider — median ~\$56/kg, 5–95% roughly \$15–310/kg. It is tempting to attribute this to our adding capital and operating costs, but that is a small part of it: <abbr title="From 300k Monte Carlo draws of our default model: median CAPEX + fixed OPEX ≈ $6.7/kg, about 12% of the $56 median. Media alone is the median ~$35/kg; total variable cost median ~$48/kg.">in our model capital + fixed operating cost is only ~12% of the median (~\$7/kg)</abbr>. The real driver is media: our *median* media cost is ~\$35/kg, versus the ~\$14/kg biomass media Pasitka reports and Pablo adopts. So even stripping our capital and operating costs entirely, our variable-cost median (~\$48/kg) sits well above his ~\$25. The gap is mostly that our priors on media intensity (litres of medium per kg) and medium price are wider and centred higher than his single empirical point — plus a fat right tail that pulls our *mean* (~\$97/kg) far above our median. He instead reads the optimistic end of the same literature.- *Treatment of uncertainty.* Ours is fundamentally a distribution (30k+ <abbr title="Monte Carlo: instead of a single point estimate, we draw tens of thousands of random scenarios from ranges on each input and report the spread of results — so the output is a distribution of possible costs, not one number.">Monte Carlo</abbr> draws over structural priors), as well as an interactive calculator that lets users tune the midpoints, spreads, and structural assumptions; his exposes uncertainty through user-tuned sliders and a lighter Monte Carlo band on the demand parameters.- *What drives each output.* For our cost figure, media cost dominates, followed by growth-factor cost and reactor capital; financing turns out to matter little to the spread. For his market share it is the price ratio R (cultivated cost ÷ conventional price) plus behavioural terms — <abbr title="Loss aversion: people weigh a loss more heavily than an equal-sized gain. Here, paying more than the conventional price feels worse than an equal discount feels good, so a price premium is penalized extra.">loss aversion</abbr>, a "real meat" credit, authenticity/provenance penalties, and <abbr title="Food neophobia: reluctance to try unfamiliar foods. For 'lab-grown' meat this can be strong at first and, in Pablo's model, fades as the product becomes familiar through exposure.">food neophobia</abbr> — none of which appear anywhere in a cost TEA.Genuinely new in his work, relative to ours:- *Species inversion.* The cheap, feed-efficient meats (chicken, pork) are the hardest to displace because conventional price is already low; expensive meats (beef, seafood) and luxury goods are the most penetrable. This is a demand-side pattern — a conjecture his model generates — that our cost model cannot produce.- *Beachhead logic.* Foie gras as the standout entry product — luxury price, unstructured (little scaffolding), and already ethically stigmatized or banned in places. Also high-end fish, tuna, salmon.- *Disruption framing (in his post's discussion, not the formal model).* An innovation-economics argument (Christensen's <abbr title="From Clayton Christensen's 'The Innovator's Dilemma': new technologies rarely win by beating incumbents on the mainstream buyer's existing priorities. They take root in an underserved niche the incumbent ignores, improve, then move upmarket — the path Pablo argues cultivated meat must follow, as electric cars did.">disruptive-innovation theory</abbr>) that improving on incumbents' own dimensions usually fails; cultivated meat needs an underserved segment (vegan/vegetarian attrition, "vegan veto" restaurants, biosecurity-sensitive buyers) plus government or advocacy push, much as electric cars did.- *Behavioural realism.* A random-utility model with an explicit "real meat vs. from-an-animal" separation (GFI's thesis), neophobia that decays with exposure, and income-elasticity effects (would AGI-driven abundance change adoption? — modestly).## Rough notes on strengths and limitations*These are tentative observations from our own AI-assisted reading, not verdicts — andself-assessing our own model is inherently limited, so weight our comments on Pablo's workabove our comments on our own. Neither project is authoritative; both are explicitlyAI-assisted and in progress.*Our cost model — apparent strengths: a first-principles structure, wide and explicituncertainty, a latent "maturity" factor tying technology adoption to financing, adocumented external critique with responses ([Limits/Critique](limits.qmd)), and — with10+ already collected — a link (in progress) to explicitly stated expert and forecasterbeliefs. Apparent limitations: an<abbr title="'Ad hoc dependence structure' means the way we make parameters move together — e.g. tying cheaper financing to more mature technology — is imposed by hand through a single 'maturity' factor rather than estimated from data or derived from theory. It is a reasonable guess, not a measured correlation.">ad hoc dependence structure</abbr>,supplemental proteins (albumin, transferrin, insulin) handled coarsely, sensitivity shownas a dollar-swing ranking rather than a<abbr title="A variance decomposition attributes the total uncertainty in the output to each input — 'input X explains 40% of the variance in cost'. Our current chart instead ranks inputs by how many dollars the cost swings when each is moved across its range, which can rank a wide-but-flat input above a narrow-but-pivotal one.">variance decomposition</abbr>,and a fat right tail that some readers find implausibly pessimistic.Pablo's demand model — apparent strengths: it addresses questions our cost model doesn't;it is calibrated to real data moments (plant-based ~1.2% market share, and the finding that~89% of plant-based buyers are mainstream<abbr title="Flexitarians: mostly-omnivorous consumers who buy plant-based products occasionally, without being vegetarian or vegan. Pablo's point is that most plant-based sales come from this mainstream group, not from the small ethically-motivated vegetarian/vegan segment.">flexitarians</abbr>rather than ethically-motivated vegetarians, Gallup veg+vegan ~5%, measured meat priceelasticities); Pablo reports it reproduces plant-based *milk*'s share<abbr title="Out-of-sample: the model's coefficients were fit to other products, then applied to plant-based milk without further tuning, and still roughly matched milk's observed share. That is evidence the structure generalizes — though we are relaying Pablo's claim, not independently checking it.">out-of-sample</abbr>(without being fitted to it, though we have not verified this); and his species-inversionand beachhead patterns are robust to the diffusion form (which only sets speed, not theceiling). Limitations he flags himself: (a) price elasticities are measured on today'smarginal choices but applied to a not-yet-existing product at very different maturity;(b) the<abbr title="Bass diffusion model: a classic marketing S-curve for how a new product spreads, splitting adopters into 'innovators' who try it independently and 'imitators' pulled in by word-of-mouth. It was designed for one-time purchases of durable goods (TVs, cars), so applying it to repeat grocery buying is a stretch — Pablo uses it only to set how fast adoption approaches its ceiling, not the ceiling itself.">Bass diffusion S-curve</abbr>is built for first-purchase durables, not repeat grocery buys; (c) several behaviouralweights are solved to hit calibration targets rather than independently measured; and(d) the scaffold cost (\$6/kg) is an unsourced assumption. He also notes a scope boundary— precision fermentation (egg, dairy) is left out for want of a good TEA — which readsless as a flaw than as a direction for new work.Which is more credible? They are not rivals — they are not estimating the same quantity.On the shared cost question, Pablo reads the optimistic end of a range our distributionalso covers; our median is higher mostly because of our wider, higher media-cost priorsand fat tail, not (as one might assume) because of capital and operating costs. His demandwork is the more novel and, within its stated caveats, the more decision-relevantcontribution: even a cheap cultivated product may capture little chicken or pork share,which reframes what "success" looks like — though this<abbr title="My own intuition (David Reinstein), not part of Pablo's model: especially early on, a cultivated 'chicken' or 'shrimp' product may be received as its own distinct food rather than competing head-to-head only with the conventional product it imitates, so cross-category substitution could matter more than a per-species contest implies.">species-by-species framing has an important caveat</abbr>.## Interactive bridge: from a cost per kg to a market shareThe calculator below takes a cultivated biomass cost (seed it with our model's output, orwith Pablo's optimistic read) and runs a much-simplified version of his cost-to-sharelogic: delivered cost → retail<abbr title="Price ratio R = cultivated delivered cost ÷ conventional retail price. R = 1 means price parity; R = 2 means cultivated costs twice as much as the conventional product it competes with.">price ratio R</abbr>against each species' conventional US price → a two-way conventional-vs-cultivated<abbr title="Logit / discrete-choice share: a standard economics way to turn a 'how much better or worse is option A than option B' score into a probability that a consumer picks A. Larger score → larger share, following an S-shaped curve.">logit share</abbr>.::: {.callout-important collapse="false"}## This is NOT Pablo's model — it is a rough stand-in. Read before trusting any number.Pablo's real model is a two-segment, four-product<abbr title="Random-utility (discrete-choice) model: each option gives a consumer a 'utility' score built from price and product attributes plus a random taste term; the model predicts the probability each option is chosen. The logit share is the standard closed-form version.">random-utility</abbr>system with income effects, loss aversion, and diffusion timing. What runs below is *none of that*. It is aone-line approximation we wrote to build intuition: a single-attribute logit whose slopewe simply *reverse-engineered* to pass through two numbers Pablo reports — at price parity(R = 1) about 49% share, and at R ≈ 2.4 about 9% share — and to which we then bolt theper-tier authenticity offsets he documents (mince +0.2, cut −0.4, premium −1.5; foie grastreated as unstructured and stigmatized, so a small penalty). It *omits* his two consumersegments, the outside "whole-food" option, income effects, loss aversion, and alldiffusion timing. Because it is pinned to only two of his points, it can only reproduce the*shape* of his story (cheap species resist, expensive and luxury ones are penetrable), nothis actual per-species shares. For any number you would cite, use[his interactive model](https://pabloamc.github.io/Cultivated_meat/interactive.html), notthis one. We would happily replace this with a faithful port, or with his own code, if heis open to it.:::```{ojs}//| echo: falseviewof cbio = Inputs.range([5, 120], {value: 56, step: 1, label: "Cultivated biomass cost ($/kg)"})``````{ojs}//| echo: falseviewof markup = Inputs.range([0, 10], {value: 5, step: 0.5, label: "Retail markup m ($/kg)"})``````{ojs}//| echo: falseviewof scaffold_cut = Inputs.range([0, 12], {value: 6, step: 0.5, label: "Scaffold cost for structured cuts k ($/kg)"})``````{ojs}//| echo: false{ const setC = (v) => { viewof cbio.value = v; viewof cbio.dispatchEvent(new Event("input", {bubbles: true})); }; const btn = (label, v) => { const b = html`<button style="padding:5px 11px; font-size:12.5px; cursor:pointer; border:1px solid #2d4a2d; border-radius:6px; background:#2d4a2d; color:white;">${label}</button>`; b.onclick = () => setC(v); return b; }; return html`<div style="margin:2px 0 12px; display:flex; flex-wrap:wrap; gap:8px; align-items:center;"> <span style="font-size:12.5px; color:#555;">Reference cost points — click to load:</span> ${btn("Our model median ($56)", 56)} ${btn("Our model p5 (optimistic, $15)", 15)} ${btn("Pablo optimistic (~$25)", 25)} ${btn("Pasitka best future (~$22)", 22)} </div>`;}``````{ojs}//| echo: false// --- Simplified port of Pablo AMC's Stage 1-2 (cost -> price ratio -> share) ---// Calibration: logit slope gamma pinned to his two reported points:// share(R=1) ~ 0.49 -> logit ~ 0.00 (constant c0)// share(R=2.4) ~ 0.09 -> logit ~ -2.31 at ln(2.4)=0.875 -> gamma = 2.64gamma = 2.64c0 = -0.04logistic = (x) => 1 / (1 + Math.exp(-x))// Species: approximate 2025 US retail price ($/kg) + tier + authenticity offset tau.// Prices are rounded from US averages (per lb x 2.2046 = per kg):// Chicken breast boneless ~$4.17/lb -> ~$9/kg (BLS/FRED APU0000FF1101, late 2025)// Pork chops ~$4.1/lb -> ~$9/kg (BLS Average Price program)// Ground beef 100% ~$4.56/lb -> ~$10/kg (FRED APU0000703112, 2025)// Beef steak (avg of cuts) ~$10.2/lb -> ~$22/kg (BLS/USDA ERS, 2025)// Salmon fillet ~$11/lb -> ~$24/kg (typical US retail; no single BLS series)// Shrimp (whole/shell-on) ~$8/lb -> ~$18/kg; shrimp paste/processed cheaper ~$11/kg// (typical US retail; rough anchors, no single BLS series)// Foie gras ~$80/kg -> illustrative luxury anchor only, NOT an official price series// Tier "unstructured" => no scaffold cost; "cut" => scaffold applies.species = [ {name: "Chicken breast", pc: 9, tier: "cut", tau: -0.4, structured: true}, {name: "Pork", pc: 9, tier: "cut", tau: -0.4, structured: true}, {name: "Ground beef", pc: 10, tier: "mince", tau: +0.2, structured: false}, {name: "Beef steak", pc: 22, tier: "cut (premium)",tau: -0.4, structured: true}, {name: "Salmon", pc: 24, tier: "cut", tau: -0.4, structured: true}, {name: "Shrimp (whole)", pc: 18, tier: "cut", tau: -0.4, structured: true}, {name: "Shrimp paste", pc: 11, tier: "mince", tau: +0.2, structured: false}, {name: "Foie gras", pc: 80, tier: "luxury/unstructured", tau: +0.1, structured: false},]rows = species.map(s => { const delivered = cbio + (s.structured ? scaffold_cut : 0) + markup const R = delivered / s.pc const share = logistic(c0 - gamma * Math.log(R) + s.tau) return {name: s.name, tier: s.tier, pc: s.pc, delivered, R, share}})``````{ojs}//| echo: falsehtml`<div style="overflow-x:auto; max-width:100%;"><table style="width:100%; min-width:620px; border-collapse:collapse; font-size:13.5px; margin:8px 0;"><thead><tr> <th style="padding:8px; text-align:left; background:#2c3e50; color:#fff;" title="The conventional product cultivated meat would compete with, and its product form (mince = ground/paste, no scaffold needed; cut = whole muscle, needs a scaffold; luxury = premium/prestige)."><span class="th-hint">Product (form)</span></th> <th style="padding:8px; text-align:right; white-space:nowrap; background:#2c3e50; color:#fff;" title="Approximate 2025 US retail price of the conventional product, in dollars per kg."><span class="th-hint">Conventional<br>retail $/kg</span></th> <th style="padding:8px; text-align:right; white-space:nowrap; background:#2c3e50; color:#fff;" title="Modelled cultivated cost delivered to retail = your biomass cost slider + scaffold (for cuts) + markup."><span class="th-hint">Cultivated<br>cost $/kg</span></th> <th style="padding:8px; text-align:right; white-space:nowrap; background:#2c3e50; color:#fff;" title="Price ratio R = cultivated cost ÷ conventional price. Below 1 = cheaper than conventional; above 1 = more expensive."><span class="th-hint">Price<br>ratio R</span></th> <th style="padding:8px; text-align:left; background:#2c3e50; color:#fff;" title="Estimated share of THIS product's own market that cultivated would capture, from the simplified logit. Not a share of all meat. The bar width uses a compressed (square-root) scale so small shares stay visible; the % is exact."><span class="th-hint">Cultivated share of<br>this product's market</span></th></tr></thead><tbody>${rows.map(r => html`<tr style="border-bottom:1px solid #dee2e6;"> <td style="padding:7px 8px;">${r.name} <span style="color:#888; font-size:11.5px;">(${r.tier})</span></td> <td style="padding:7px 8px; text-align:right;">$${r.pc.toFixed(0)}</td> <td style="padding:7px 8px; text-align:right;">$${r.delivered.toFixed(0)}</td> <td style="padding:7px 8px; text-align:right;">${r.R.toFixed(2)}×</td> <td style="padding:7px 8px;"> <div style="display:flex; align-items:center; gap:8px;"> <div style="flex:0 0 46px; text-align:right; font-variant-numeric:tabular-nums;">${(r.share*100).toFixed(1)}%</div> <div style="flex:1; background:#eef1ee; border-radius:4px; height:12px; overflow:hidden;"> <div style="width:${Math.min(100, Math.sqrt(r.share)*100)}%; height:100%; background:${r.share>0.3?'#2d7a2d':r.share>0.08?'#c8862b':'#b04a4a'};"></div> </div> </div> </td></tr>`)}</tbody></table></div><p style="font-size:12px; color:#666; margin-top:6px;">Hover any column header for what it means. Bar width uses a compressed (square-root) scaleso small shares stay visible next to foie gras — the <em>percentage is exact</em>; the baris only a rough visual. Colour: green > 30%, amber 8–30%, red < 8%.<br>Ordering is driven almost entirely by R (cost fixed, conventional price varies) plus theproduct-form offset — reproducing Pablo's inversion: cheap chicken and pork resist, whileexpensive beef, seafood, shrimp, and luxury foie gras are more penetrable. (Pablo alsonotes cultivated shrimp has a practical edge his model doesn't capture: no shells or headsto remove.)<br>Conventional prices are rounded 2025 US retail figures (per lb × 2.2 = per kg): chickenbreast ~$9/kg and pork ~$9/kg (US BLS Average Price / FRED series), ground beef ~$10/kg(FRED APU0000703112), steak ~$22/kg (BLS/USDA ERS). Salmon ~$24/kg and shrimp(~$18/kg whole, ~$11/kg paste) are typical retail figures without a single officialseries; foie gras ~$80/kg is an illustrative luxury anchor, not an official price. Changeany of these and the ordering can shift.</p>````Try loading "Our model median (\$56)" versus "Pablo optimistic (~\$25)" and watch theshares move. Even at the optimistic cost, chicken and pork stay near-zero while foie grasclears easily — the demand-side pattern that a cheaper product does not by itself rescuethe feed-efficient species. At our more pessimistic median the whole picture shifts down,which is why the cost side of the picture still matters.## Possible next steps for reconciliation- *Feed the full distribution, not a point.* Pipe our 30k-draw cost distribution into his cost-to-share step to produce a share distribution per species, rather than reading one cost point at a time.- *Reconcile the media priors.* The \$25-vs-\$56 gap is mostly media cost, not capital or operating cost. The productive comparison is our priors on medium price (\$/L) and media intensity (L/kg) against Pasitka's empirical point that Pablo adopts — where should the central estimate sit, and how wide should the tail be?- *Joint parameters.* His scaffold (\$6/kg) and markup (\$5/kg) assumptions are exactly the kind of parameter our elicitation and workshop process could put priors on.- *Conversation.* Pablo invited collaboration; the [CM workshop](https://uj-cm-workshop.netlify.app/) crux-mapping between "skeptics and optimists" is a natural venue.*Provenance: this page was drafted quickly with AI assistance from Pablo's public post andmodel plus our own repo, and has not yet had careful human review. See the[`pabloamc_bridge/README.md`](https://github.com/unjournal/cm_pq_modeling/blob/main/dashboard/pabloamc_bridge/README.md)notes for the faithfulness caveats (the link resolves once this is pushed to GitHub).*