Cultivated meat: how much of the meat market can it win — and how fast? build 2026-06-21 09:20

Cultivated meat — real animal protein grown from cells, with no animal raised or slaughtered — could one day share a shelf with ordinary meat. Whether it wins a meaningful slice of that shelf comes down to a very human chain: what it costs to grow, what shoppers will pay for it, and how long trust takes to build. This page models that chain in the open — every assumption is a labelled slider (defaults are the neutral or measured values, ordered most-decisive first), and nothing is hidden. Drag any slider and watch the price ratio, market shares, and adoption curve respond live.

The answer is built in three linked steps. (1) Cost → price. Add up what a kilogram costs to grow — mostly the liquid medium the cells feed on, plus the cost of running the reactor — add a retail markup, and divide by the price of the ordinary meat beside it to get cultivated's price ratio \(R_x\) (\(R_x=1\) is price parity; today's cost sits near 2.4×). (2) Price → share. Put cultivated on a shelf with three rivals — conventional meat, plant-based meat, and the option to skip meat and eat beans — and let shoppers in two segments (a mainstream majority and a small ethically-motivated minority) choose by weighing price, taste, animal welfare, and whether it is actually meat; a standard discrete-choice rule — a multinomial logit, from McFadden's random-utility theory — turns those attributes into market shares, with price entering in the Berry–Levinsohn–Pakes form (income sits inside the log, so a given price is a bigger bite the poorer the shopper). The central premise: because cultivated meat is real animal tissue, it competes head-to-head with beef and draws its buyers from conventional meat, not from the plant-based aisle. (3) Share → over time. That share is the long-run destination; because a brand-new food is met coldly — only ~5% would buy it at equal price today — the model starts cold and climbs along a Bass diffusion curve as familiarity grows.

So the big penetration numbers are the long-run equilibrium ceiling — where adoption lands once novelty has faded — not a forecast of today's share; the timing chart (§4) shows the path climbing to it from a cold, near-zero start. Headline figures are point estimates at the values you choose; toggle Monte Carlo to propagate the priors into an uncertainty band. Numbers that are measured (costs, prices, the plant-based facts the model is calibrated to) are pinned; numbers that are judgement are exposed as sliders and swept in the band, never hidden. Full equations, sources, and an honest accounting of what each number rests on are in the methods notes below.

propagate the priors (cost inputs + acceptance + elasticity) into an uncertainty band — N=2000 draws, triangular priors from the datasheet

1 · Penetration by type of meat — cultivated & plant-based

2 · Share of all meat consumed, and the cultivated slice

3 · Cultivated cost vs the two big inputs

cultivated biomass cost ($/kg) vs medium price; lines = reactor scale; marker = your choice

4 · Share vs price ratio

how the four shares move as cultivated's price ratio Rx varies — cultivated (bold) rises as it gets cheaper, mostly out of conventional; plant-based & whole-food barely move. Blue dot = cultivated at its chosen Rx; green dot = plant-based at its own price Rp (≈1.77×, its real operating point).

5 · Adoption over time (the timing rung)

cultivated (blue) starts cold and near-zero (the rollout is not yet underway) and rises as the rollout spreads and familiarity grows; plant-based (green) gets the same machinery, but its taste + price gap caps it even after novelty fades. Turn on Monte Carlo to band cultivated.

6 · Comparison products — cross-category checks

the same demand machinery applied to a chosen real-world product: its observed share vs the model's. The genuine out-of-sample tests reuse the SAME coefficients and swap only the product's positions — plant-based milk (the default) lands at ~15% this way, unfitted. Two options are not clean validations and are labelled so on the chart: plant-based meat is the calibration target (circular), and eggs exercise a different lever (welfare, not authenticity).

7 · Where cultivated can enter — share vs price (or the cost waterline)

Where can cultivated compete on price, and how much would it displace? Shown two ways — toggle below. Share vs price-ratio (the default view): the demand model's predicted share (the dependent variable) on y, price ratio R on x — share is driven by price + the acceptance dials, not a per-product knob; each bubble's size = the displaceable volume (break-even share × addressable, the conventional production it would take). The rent-stripping is what sinks the luxury traps (caviar, iberico) and surfaces cruelty-free foie gras + high-volume seafood. How the competition price is chosen (both views): luxury sticker prices are largely provenance rent (terroir, wild-caught, grade) that cultivated can't capture, so each product is judged at the accessible-tier price it actually competes at, never the rent-laden headline. Each product carries two sourced retail tiers — the accessible (everyday) tier where cultivated competes, and the headline (premium/luxury) tier, mostly brand/scarcity rent it can't capture (June 2026 retail/wholesale; the prestige-volume share is estimated — hover any bubble for its basis). So R = cost ÷ accessible price reads as: R<1 the cost already undercuts the everyday grade, R>1 it still sits that fraction above it (the gap the welfare/sustainability edge has to cover). This is price-skimming down a quality ladder under a learning curve (Wright 1936; Arrow 1962; Spence 1981) — the economics behind what's popularly called "disruptive innovation." The alternate "reachability waterline" view (toggle) draws the same thing geometrically: cultivated's retail cost is a waterline set mostly by the medium price (drag the §1 medium slider); each island sits at its accessible-tier price with a grey tick marking the rent-laden headline above it, and islands above the cost line are price-reachable (R<1), dot size = the displaceable volume. What this panel does and doesn't claim: cultivated is assumed to price at its own cost (0% margin), and we read off the demand it would win there (break-even share) and the conventional production it displaces (share × addressable). That is reachability and impact, not profitability — we deliberately do not model a margin, because cost, the price it could charge, and the volume it would sell are too coupled to pin a credible profit.

"Penetration" totals are rolled up by volume (weight → animal impact) and by value ($ → market). Point estimates only — not the Monte-Carlo bands.

Methodology & equations

The big picture, before the equations. The question this model answers is: if cultivated meat can be made at some cost, what share of the meat market does it win — and how fast? The answer is built in three steps, each a section below.

  1. Cost → price. Add up what a kilogram costs to grow — mostly the liquid the cells feed on, plus the cost of running the factory — add a retail markup, and divide by the price of the ordinary meat it sits next to. Call that ratio \(R_x\). \(R_x=1\) means "same price as the beef beside it"; \(R_x=2\) means "twice the price." (§1)
  2. Price → share. Put cultivated meat on a shelf with three rivals — ordinary meat, plant-based meat, and the option to skip meat and eat beans. Each shopper weighs price, taste, "no animal was killed," and "is it actually meat?", and picks one. More attractive ⇒ bigger share. The central bet: cultivated meat is real animal tissue, so — unlike a veggie burger — it competes head-to-head with beef and pulls its buyers from beef, not from the plant-based aisle. (§2–3)
  3. Share → over time. That share is the destination, reached once the product is familiar. Today a brand-new food is met coldly (~5% would buy it even at equal price), so the model starts cold and climbs as people grow used to it and it reaches more shelves. (§4)

Everything else is how each step is done and — the part worth arguing about — how much to trust each number. Numbers that are measured (costs, prices, the plant-based facts we calibrate to) are pinned; numbers that are judgement (how much a near-perfect substitute steepens price-sensitivity; how premium buyers resist) are exposed as sliders and swept in the uncertainty band, never hidden. Drag any slider to see its leverage.

Roadmap. Sections §1–§4 are those three steps (§1 cost→price; §2–§3 price→share; §4 share→over time). §5 is the supporting price/markup data, and §6 is a closer zoom — beyond the three core steps — on which single products cultivated can enter first.

Formally the model is a chainbiomass cost → price ratio Rx → market share → penetration — computed per type of meat (cultivated cost is ~constant across species; conventional price ranges ~5×, so the answer differs by animal). Everything below is the live JS in this page; it mirrors the Python model line-for-line, and the self-check under the charts reproduces the Python reference numbers.

How to read every number below. The display equations are numbered \((1)\!-\!(18)\); any paragraph that quotes a figure names the equation it comes from. There are only three kinds of number, and each has one source:
  • A dollar cost or price ratio (\$/kg, \(R_x\)) is built in §1 — Eq. \((1)\)–\((2)\).
  • A percentage share (e.g. "~49% at parity") is always computed the same way: take each product's row from the attribute table, form its utility \(V_j\) (Eq. \((3)\)), exponentiate-and-normalise into shares (the softmax, Eq. \((7)\)), then blend the two consumer segments (Eq. \((8)\)). The roll-up across meat types is Eq. \((10)\); the over-time version is Eq. \((11)\).
  • A parameter value (a slider's default, a weight) traces to the Parameters table or the weights table at the end of this section — which also says whether it is measured, solved, or a dial.
So to check any share: read its paragraph for the dials it sets, then follow Eq. \((3)\!\to\!(7)\!\to\!(8)\). One tell: a computed result names an equation; a measured input instead carries a [citation] — so "~16% reach taste parity [7]" is data, while "~49% at parity (Eq. (7))" is an output.

1. Cost → price ratio \(R_x\)

The one number that drives everything downstream is cultivated's price ratio \(R_x=p_x/p_c\) — cultivated's retail price \(p_x\) divided by the price \(p_c\) of the conventional meat it competes with. (Products are indexed by a single letter throughout — \(c\) conventional, \(x\) cultivated, \(p\) plant-based, \(w\) whole-food — so \(p_x,p_c\) are their prices and \(R_x,R_p\) the ratios to conventional; the demand model in §2 uses the same letters.) The denominator \(p_c\) is just an observed market price (times a policy multiplier \(t\) for a meat tax). So §1 is really about building the numerator \(p_x\), cultivated's retail price, one cost at a time — and we introduce each variable only at the step where it becomes unavoidable.

Start with medium, because it dominates. Cells grow in a liquid medium, so the first thing we need is its price, \(p_{\rm med}\) ($ per litre) — \$0.63/L measured by Pasitka [1], with sub-\$0.20/L claimed by some companies but not independently verified [3] (the slider spans the range). But a per-litre price isn't a cost per kg of meat until we know how many litres a kilogram consumes — the media intensity \(\iota\approx 22.4\) L/kg (measured by Pasitka [1]). Cells can be engineered leaner, so we attach an efficiency multiplier \(\eta\) (1 = today's cells; 0.25 = CHO-grade, 4× leaner). A first guess at the medium bill is therefore \(\iota\,\eta\,p_{\rm med}\).

This is the medium cost per kg of biomass, \(c_{\rm med}\) — a $/kg quantity, not to be confused with the $/L price \(p_{\rm med}\) — with one floor: a litre of medium can't cost less than the feedstock dissolved in it. The cells must physically eat a fixed mass of amino acids and glucose to build tissue (cost \(f\approx\$1.5\)/kg, set by stoichiometry), so \(c_{\rm med}\) cannot fall below \(f\):

\[ c_{\rm med} = \iota\,\eta\,p_{\rm med}, \qquad\text{floored at } f \tag{1} \]

i.e. \(c_{\rm med}=\max\!\big(f,\ \iota\,\eta\,p_{\rm med}\big)\). Equivalently the floor is a hard lower bound on the medium price, \(p_{\rm med}\ge f/\iota\approx\$0.07\)/L. The floor only binds in the most optimistic corner (very cheap, very lean cells); everywhere else \(c_{\rm med}\) is just litres \(\times\) price.

Running the reactors, labour, utilities and capital adds a per-kg overhead \(h\) — the reactor-scale lever, and the model's main bottleneck — completing the biomass cost \(c_{\rm bio}=c_{\rm med}+h\). Turning biomass into a sold product adds a retail markup \(m\) (processing, cold chain, margin — added in $/kg; why additive is discussed in §5) and, for structured cuts only, a scaffold cost \(k\) (\$6/kg — our assumption; no published TEA covers structuring cost [6]). A per-type multiplier \(\mu\) (default 1) lets one species' biomass cost differ if data ever warrant it. Numerator over denominator:

\[ c_{\rm bio} = \max\!\big(\,c_{\rm med} + h \;(+\,\text{clean-room, if toggled}),\ \ c_{\rm floor}\big), \qquad R_x = \frac{c_{\rm bio}\,\mu + k + m}{p_c\,t} \tag{2} \]

In plain words: the price ratio is (what a kg of cultivated meat costs to grow + the cost of turning it into a sold product) ÷ (the price of the ordinary meat beside it). The numerator is the biomass cost \(c_{\rm bio}\) (capped below by the floor), times an optional per-species multiplier \(\mu\) (=1 at baseline, inert unless data ever warrant a species difference), plus the structured-cut scaffold \(k\) (0 for mince) and the retail markup \(m\); the denominator is the conventional price \(p_c\), optionally scaled by a meat tax \(t\). \(R_x=1\) is price parity. (That whole ratio is Eq. \((2)\); its biomass input \(c_{\rm bio}\) is Eq. \((1)\).)

Two floors, nested — the deeper one. The medium floor \(f\!\approx\!\$1.5\)/kg above is just the feedstock dissolved in the medium. The biomass cost carries a second, deeper floor that contains it: \(c_{\rm floor}=\underbrace{a_{\rm I}\,p_{\rm aa}}_{\text{amino acids}}+\underbrace{g}_{\text{glucose}}+ \underbrace{h_{\rm min}}_{\text{minimal plant}}\!\approx\$7.5\)/kg — the same irreducible feedstock the cells must physically eat (\(\approx\!f\)) plus the floor cost of running a plant at scale, assuming the reducible parts (recombinant proteins, single-use consumables, small-scale capital) are engineered toward zero. It does not assume away Humbird's scale-up ceilings (CO₂/O₂ transfer, sterility caps on vessel size), which if they bind make this floor unreachable at any media price [2]. It is the "where is the floor?" number.

In practice neither floor currently bites: across the whole slider range \(c_{\rm med}+h\) already sits at or above \$7.5, so the floors mark where cost can't go, not where it is today.

What this means for parity. Parity (\(R_x=1\)) needs \(c_{\rm bio}\le p_c-m\): the markup eats the headroom, which is why it is one of the most leveraged numbers in the model. Cell density / metabolic efficiency enters only through \(\eta\) — what matters for cost is medium consumed per kg, which density drives.

2. From the price ratio to a market share (a discrete-choice demand model)

This is a textbook random-utility / discrete-choice model (McFadden 1974 [12]) — the standard way economists turn product attributes into market shares. On an eating occasion a consumer picks one of four products; each option gets a utility score \(V\), and the option with the highest score (plus a random taste shock) wins.

Three words, defined once. Utility is just economists' name for an attractiveness score — one number that rolls up everything a shopper cares about (price, taste, ethics…) so two products can be compared; it has no real-world unit, and only the differences between products matter. Random-utility means we add a "mood of the day" taste shock to each score, so the model predicts probabilities, not one forced choice. And because we cannot see which kind of shopper any one person is — only the population mix — economists call a two-type model like this one a latent-class ("hidden type") model.

Averaging over those random shocks (the standard assumption, below) gives the share of each option as a softmax of its utility — a standard formula (economists call it a logit) that turns the attractiveness scores into percentages that add to 100%, handing the most attractive option the biggest slice. We compute it for two consumer types and average their choices by the population split.

The four options and their attributes (conventional meat is the reference everything is measured against):

productprice \(R_j\) (× conv.)taste \(a_j\) (1 = real meat)slaughter‑free \(g_j\)real tissue \(b_j\)health \(\zeta_j\)
conventional meat1 (anchor)1 (reference)01−0.1 (ref)
plant‑based meat\(R_p\) (~1.77, dial)\(a_p\) (~0.8, dial)10\(\zeta_p\) (0, dial)
cultivated meat\(R_x\) (from §1)\(a_x\) (~1, dial)11\(\zeta_x\) (0, dial)
whole‑food (beans/tofu)~0.25 (cheap)~0.3 (not meat)10+2 ("healthy choice")

Read each row as a product's position on five named attributes: price, taste, slaughter-free, real-tissue, and health. There is no separate intercept — whole food's pull toward "skip the meat, eat beans" is carried by its health position (+2, "the healthy choice"), a labelled attribute, not a free constant; its weight is solved from data (see Calibration). The three meats carry no free constant at all — only their attributes. The only additive term any product gets is the optional novelty offset \(\nu\) on the two novel meats (0 by default). Three scenario dials (novelty \(\nu\), the health offsets \(\zeta_x/\zeta_p\), cultivated's per-tier authenticity \(\tau\)) are all 0 by default and explained in the glossary below; you switch them on only to explore.

For the skeptical reader: "so there's literally no fitted constant?" Almost — whole food's standing is a named health attribute at an assumed position \(\zeta_w=+2\) times a solved weight \(w^h\), pinned to two data moments (the meatless rate and the residual ethical PB rate). That is more honest than a black-box intercept — the standing is a labelled axis, "beans are the healthy choice" — but it is one assumed position plus one solved weight, not nothing. Only the product \(w^h\zeta_w\) is identified, so the position's level washes out; what the data fix is its size.

Whole food is the outside option — "skip meat tonight, eat beans" — and it matters: most ethically-motivated people get protein from whole foods, not a veggie burger, which is exactly why plant-based meat sits at only ~1%. Every product runs through the same utility rule (Eq. \((3)\)) — no option gets a special term; the rule just reads each product's row off the table above:

\[ V_j = \underbrace{\alpha\ln(y_{\rm eff}-R_j\,p_c)}_{\text{price (a bigger bite the poorer you are)}} \;\underbrace{-\,\lambda\,(d_j)^{+}+(d_j)^{-}}_{\lambda=1\,\Rightarrow\,\text{symmetric}} \;+\; q\,(a_j-1) \;+\; w^{s}\,g_j \;+\; w^{rt}\,b_j \;+\; w^{h}\,\zeta_j \;+\; \underbrace{\nu_j+\tau_j}_{\xi_j\ \text{(novelty + authenticity)}} \tag{3} \]

Reading the symbols. \(d_j=R_j-1\) is how much dearer product \(j\) is than conventional (its premium); the superscripts split that into the dearer part \((d_j)^{+}=\max(0,d_j)\) and the cheaper part \((d_j)^{-}=\max(0,-d_j)\), so the middle term penalises a premium and rewards a discount. Each remaining term is a weight × a column of the attribute table above; all are defined, with sources, in the glossary just below. (The first term is the Berry–Levinsohn–Pakes or "BLP" price term — explained next.)

How the price enters: one ratio, one dollar price. The BLP income log needs a price in dollars (to compare against income), so it multiplies each product's price ratio \(R_j\) by \(p_c\) — the conventional price of the very rival this comparison is against — to get its dollar price \(p_j=R_j\,p_c\). For cultivated that is \(p_x=R_x\,p_c\): the §1 ratio turned back into dollars. Crucially \(p_c\) is not one number — it is the conventional price of this meat in this place, so it depends on the cut and the region (US chicken ~\$5, steak ~\$20, wagyu ~\$45; chicken drops to ~\$3.5 in India). The §3 roll-up therefore uses each cut's own local price — so the same 2.4× premium is a bigger dollar bite on a \$20 steak than on \$5 chicken. The single \$12 in the datasheet is just the region-agnostic commodity anchor used for calibration and the at-parity headline. (The ratio-based loss term \(-\lambda(d_j)^{+}\!+(d_j)^{-}\) needs no dollars at all — it sees only the ratio; see its row in the table.)

In plain words: how attractive product \(j\) is = the value of the income you have left after paying for it (the Berry–Levinsohn–Pakes log — a price is a bigger bite the poorer you are), minus a penalty for being dearer than the familiar conventional price (or a reward for being cheaper), plus taste, plus slaughter-free, plus real-meat, plus health, plus a default-0 constant \(\xi_j=\nu_j+\tau_j\) — food novelty \(\nu_j\) (on the two novel meats) and, for cultivated only, a per-tier authenticity offset \(\tau_j\) that switches on in the §3 cut/premium roll-up. There is no free intercept — every term is a named attribute. Each piece is unpacked below.

A reminder on reading the table: each term is a weight × a column, and a 0 in a column just means "this product lacks that feature" — not a special case (\(a_j-1\) is the taste gap from real meat, \(g_j\) the slaughter-free flag, \(b_j\) the real-tissue flag, \(\zeta_j\) health, and \(\xi_j=\nu_j+\tau_j\) the per-product scenario constant). Every piece is defined, with its source, in the glossary table below — so the rest of §2 simply walks the terms one at a time, starting with price.

Where the \$12 commodity anchor still appears. In the §3 roll-up both price terms go fully local: the income log takes each cut's local dollar price (\(R_j\,p_c\) with local \(p_c\)), and the ratio loss term takes each cut's local premium (\(d_j=R_j-1\), unit-free — it needs no dollar price at all). The single \$12 commodity value is used in exactly three places, none of them the loss term: it sets the calibration, it is the at-parity headline, and it pins the global price coefficient \(\beta\) once at cultivated's own commodity operating point (\(p_x\!\approx\!\$29\), \(p_c=\$12\)), which is then reused for every cut. The \(\lambda/p_c\) you see in \(\beta\)'s formula (Eq. \((4)\)) is that one use — the loss term's slope re-expressed in dollars (\(1/\$12\)) so it can fold into \(\beta\), not a separate price.

The price piece, unpacked. The income term's coefficient \(\alpha\) is not guessed — and, unlike an earlier version, it rests on no hand-picked anchor. The behavioural target is cultivated's own-price elasticity \(\varepsilon_x=\kappa\varepsilon\) — elasticity being the standard measure of how sharply sales fall when price rises: \(\varepsilon=-1\) means a 1% price rise costs you 1% of buyers, \(\varepsilon=-3.6\) means it costs 3.6% (very price-sensitive). One subtlety: price enters utility through two channels — the income term (local slope \(\beta\)) and the loss-aversion term below (slope \(-\lambda/p_c\) on the loss side, which is where cultivated's premium sits) — so the own-price elasticity is \(\varepsilon_x=(\beta-\lambda/p_c)\,p_x(1-s_x)\). We solve \(\beta\) so that combined response hits the target at cultivated's own operating point — its own retail price \(p_x=c_{\rm bio}+m\) (the cost rung's output, so it tracks the model) and its own modeled share \(s_x\), a short fixed point (\(\beta\) depends on the share \(s_x\), which depends on \(\beta\), so the model solves the two together by iterating until they stop moving):

You don't need to read the algebra. Its only job is to set the price-sensitivity dial \(\beta\) so the model's realised response exactly equals the target elasticity \(\kappa\varepsilon\). The takeaway is the sentence right after it.

\[ \beta=\frac{\kappa\,\varepsilon}{p_x\,(1-s_x)}+\frac{\lambda}{p_c},\qquad \alpha=-\beta\,(y_{\rm ref}-p_x),\qquad V^{\rm price}_j=\alpha\ln(y_{\rm eff}-p_j),\quad y_{\rm eff}=y_{\rm ref}\!\left(\tfrac{y}{y_{\rm ref}}\right)^{\!\phi}. \tag{4} \]

Read left to right: the meat elasticity \(\varepsilon\) (slider) times the closeness \(\kappa\) (slider) is the target elasticity; the \(+\lambda/p_c\) hands back the slice of price-sensitivity the loss-aversion term already supplies, so \(\beta\) carries only the rest. This is the fix that makes the realised elasticity equal \(\kappa\varepsilon\) rather than ~2× it, and it cleanly separates \(\kappa\) (which sets the elasticity level) from \(\lambda\) (which now only shapes the kink at parity). There is no free "calibration price": move a cost input and \(p_x\) moves with it.

How income enters — genuine BLP. Income sits inside the log: \(V^{\rm price}_j=\alpha\ln(y_{\rm eff}-p_j)\) is the Berry–Levinsohn–Pakes form, where the diminishing marginal utility of income IS the mechanism — the same price is a larger, more painful bite the poorer you are, so richer consumers are less price-sensitive without any extra term. \(\alpha\) is a single constant (not a function of income), pinned so the term's local slope equals \(\beta\) at the US anchor: \(\alpha=-\beta(y_{\rm ref}-p_x)\).

Where the cross-region tilt comes from. Only from the damped effective income \(y_{\rm eff}=y_{\rm ref}(y/y_{\rm ref})^{\phi}\): \(\phi=1\) is raw BLP, which is too steep for food (~6× rich→poor elasticity ratio); \(\phi=0.5\) (default) damps it to the empirical ~2× gradient (region incomes from the World Bank; the gradient from Muhammad/ERS [15]), and \(\phi=0\) removes income. At the US reference \(y_{\rm eff}=y_{\rm ref}\), so the US and every at-parity number are invariant to \(\phi\).

The punchline. Income bites hardest where the premium is large and the buyer is poor (cheap local meat and high price-sensitivity) — low-income regions fall below ~1% at today's cost (Eq. \((7)\) with the income of Eq. \((4)\)), the genuinely hard case, while the at-parity headline (equal prices) is unaffected. And the channel saturates: wealth relaxes price-sensitivity but never erases the premium or the other attributes, so even an arbitrarily rich buyer does not "buy anything" at \(R_x\approx2.4\) — the share (softmax Eq. \((7)\)) tops out in the high teens (~18%), it does not run to 100%.

The three segment-specific weights (everything else is shared across the two consumer types). Only the slaughter-free, real-tissue and health weights differ by type — that difference is the heterogeneity:

\[ w^{s}=\begin{cases}\theta_{\rm free}&\text{mainstream (slider, }\sim0)\\ w_{\rm slaughter,E}&\text{ethical (large, fixed)}\end{cases} \quad w^{rt}=\begin{cases}w_{\rm rt}&\text{mainstream (calib.)}\\ \approx 0&\text{ethical}\end{cases} \quad w^{h}=\begin{cases}w_{h,M}&\text{mainstream (calib.)}\\ w_{h,E}&\text{ethical (calib., larger)}\end{cases} \tag{5} \]

In plain words: three preferences differ between the two shopper types — how much they care about no-slaughter (\(w^{s}\)), about real tissue (\(w^{rt}\)), and about health (\(w^{h}\)). Each row just reads "mainstream feels this much; the ethical type feels that much." Everything else (price, taste) is shared between the two types.

The health weight \(w^{h}\) is the larger for the ethical type, so the whole-food health position \(\zeta_w>0\) ("beans are the healthy choice") pulls the health- and ethically-minded toward whole foods over a processed veggie burger — which is why plant-based meat sits at ~1% despite a 5% ethical core. Both health weights (the \(w^{h}\) of Eq. \((5)\)) are solved in the calibration (below); this health premium is the named attribute that carries whole food's standing, so no product needs a free outside-option constant (see the aside under the attribute table).

So the slaughter-free term you tune is \(\theta_{\rm free}\,g_j\) for the mainstream (95% of buyers): at \(\theta_{\rm free}=0\) the mainstream is indifferent to "no animal killed"; raise it and every slaughter-free product gains, cultivated most (it also has real tissue).

The terms, each with a plain meaning and a source:

price & income \(\alpha\ln(y_{\rm eff}-p_j)\)genuine Berry–Levinsohn–Pakes (1995) — income inside the log, so a price is a bigger bite the poorer you are (richer = less price-sensitive), fully unpacked in "the price piece" above. \(\alpha\) is a single constant built from \(\varepsilon\) and \(\kappa\) via \(\beta\); the cross-region tilt comes only from the damped effective income \(y_{\rm eff}=y_{\rm ref}(y/y_{\rm ref})^\phi\) — \(\phi=1\) raw BLP (~6×, too steep for food), \(\phi=0.5\) default (empirical ~2×), \(\phi=0\) none; the US and every at-parity number are invariant to \(\phi\). (An earlier draft re-added income as a separate multiplier outside the log — not BLP; this restores it, verified against its linearisation to <0.01pp.)
loss aversion \(\lambda\) (off by default)an OPTIONAL reference-dependent asymmetry: people judge a price against the familiar conventional price, so a product priced above it can feel like a loss. A discount is rewarded at the unit rate, a premium penalised at \(-\lambda\), applied to every product by its own premium \(d_j\) (plant-based and cultivated alike). The default \(\lambda=1\) is symmetric — no kink, no loss aversion: the model ships with this term OFF (it is near-inert on the headline once \(\beta\) is calibrated, and not separately identifiable from cultivated data). Drag it up toward the Tversky–Kahneman median ~2.25 [13] to switch the asymmetry on. This is the riskless form (over a single sure attribute, price), not the gamble version — the aside "is loss aversion the right tool here?" below gives the full why-it's-off reasoning.
taste \(q\,(a_j-1)\)sensory quality on a 1 = real meat scale: each product's taste-acceptance \(a_j\) is 1 if it tastes as good as conventional, below 1 if worse, above 1 if better. It enters utility as the gap from real meat, \(a_j-1\) (so conventional, the reference, contributes 0), weighted by the shared taste weight \(q\). Two dials: \(a_x\) (cultivated, default 1 = parity) and \(a_p\) (plant-based, default ~0.8 — the category averages below parity; NECTAR 2025 [7] found only ~16% reach blind parity; whole-food sits near 0.3 — an assumption that trades off with its solved baseline appeal, so its exact value does not move the results). Only differences matter in a logit, so anchoring real meat at 1 (or at 0) is a free choice — we show 1 because it reads naturally as "full marks".
slaughter-free \(w^{s}\,g_j\)the 0/1 flag \(g_j\) ("no animal killed", 1 for all but conventional), times its weight. Small for the mainstream (the \(\theta_{\rm free}\) dial, default 0), large for the ethical type — this is what makes the two consumer types differ.
real tissue \(w^{rt}\,b_j\)the 0/1 flag \(b_j\) ("is it actual animal tissue?"): \(b_x\) (cultivated, default 1) and \(b_p\) (plant-based, default 0), weighted by the mainstream real-tissue weight. This is the edge cultivated shares with conventional, and the reason it draws from beef, not the veggie burger. It is the model's identifying premise — and now a dial, for equal footing. Plant-based gets the same machinery as cultivated (its own price, taste, novelty, timing curve); the only a-priori difference between the two novel meats is this one attribute. Set \(b_x=0\) (skeptic: "lab-grown won't be credited as real meat") and cultivated collapses toward the plant-based outcome; set \(b_p=1\) and plant-based rises sharply. The asymmetry is shown and testable, not hardwired.
constant \(\xi_j\)the one non-attribute term — added straight to utility, not multiplied by an attribute. It is the sum of the two default-0 scenario terms, \(\xi_j=\nu_j+\tau_j\) (novelty + authenticity), and is 0 for every product at baseline — including whole-food, whose standing is a real attribute (its health position), so there is no free fitted constant anywhere. Turn the scenario terms on only to explore; with both at default the meats carry no constant, so there is no hidden cultivated "standing" knob.
novelty \(\nu_j\)food neophobia — attitude to a novel food (Pliner–Hobden 1992) — one dial on the two non-conventional meats: \(\nu_x\) (cultivated) and \(\nu_p\) (plant-based). It enters the constant directly, \(\nu_j\in\{0,0,\nu_p,\nu_x\}\) for \(j=(w,c,p,x)\) — so conventional and whole-food (familiar) carry 0: \[ \nu_j=\begin{cases}\nu_x&j=x\ \text{(cultivated)}\\ \nu_p&j=p\ \text{(plant-based)}\\ 0&j\in\{w,c\}\ \text{(familiar)}\end{cases} \] Negative = neophobia (the new food is shunned), positive = neophilia (novelty draws), 0 = neutral. Default 0, so it does not move the central case. It is distinct from taste \(a_j\): exposure cures the novelty penalty, a taste deficit is permanent — and in the timing rung (§4) the time-varying \(\nu_x(t)\) starts at a cold value and fades onto this long-run \(\nu_x\) by mere-exposure, \(\nu_x(t)=\nu_x+(\nu_{x0}-\nu_x)e^{-rE(t)}\). The fade gives the two ends different meanings, which is why both are kept: the cold start \(\nu_{x0}\) is the first-contact "is it safe / is it weird?" reaction — a familiarity question that exposure answers; the long-run \(\nu_x\) is what survives familiarity — the residual "is it natural?" attitude (does the "lab-grown" discomfort fade to zero, or settle at a floor?). Same axis, two time-points. Symmetric across the two novel products — no cultivated-only special case.
health perception \(\zeta_j\)how healthy the product is perceived to be — one dial on each non-conventional meat: \(\zeta_x\) (cultivated) and \(\zeta_p\) (plant-based), entering utility additively just like \(\nu\). Positive = a health draw (cultivated's "clean, no antibiotics, no contamination, controlled fat"; plant-based's "good-for-you" halo), negative = a health aversion (cultivated's "lab-grown / unnatural / ultra-processed"; plant-based's "fake meat, long ingredient list" backlash), 0 = neutral (conventional is the reference). Default 0, and deliberately UNIDENTIFIED: unlike taste or price there is no clean calibration moment that isolates health, and the survey evidence is genuinely two-sided and cancels with wide spread — so this is an exploratory scenario dial (like \(\nu\) and \(\tau\)), not a measured effect. It does not move the calibrated headline at 0 and never re-pins the calibration (forced to 0 inside the calibration solve). It is distinct from taste \(a_j\) (sensory) and slaughter-free \(g_j\) (ethics): "is it good for me" is a third, separate axis. Swept \(\pm0.5\) in the Monte-Carlo band for both novel meats. This is also the term behind the comparison products: margarine carries a health penalty (butter read as the more natural/healthier choice, especially post trans-fat), and plant-based nuggets a small health draw — illustrative positions, not calibrated, that narrow (but, honestly, do not fully close) those out-of-sample gaps.
authenticity \(\tau_{\rm type}\)cultivated-only, per meat type (§3): the "I want the real thing" resistance, which depends on the product's role and so is a function of the tier (set by structure and within-species price), scaled by the premium-resistance dial \(\rho\): \[ \tau_{\rm type}=\rho\cdot\begin{cases}+0.2&\text{basic (mince / processed)}\\ -0.4&\text{cut (steak / fillet)}\\ -1.5&\text{premium (wagyu / sushi)}\end{cases} \] and it enters cultivated's constant only, \(\tau_j=\tau_{\rm type}\) for \(j=x\) and \(0\) otherwise. Mince's \(+0.2\) is the cleaner-meat / welfare pull with no authenticity hang-up; cuts and luxury are increasingly "want the real cut". It is 0 in the §2 headline parity case (\(\rho\) scales it, but it only switches on per-type) and gives §3 its "no easy entry point — the sweet spot is mid-priced cuts" result. A reduced-form scenario offset (no per-product authenticity data to estimate a weight), shown rather than buried.
Naturalness (\(\nu_x\)) vs authenticity (\(\tau\)) — why they are two different things. They sound alike ("real", "natural", "authentic") but ask different questions:
  • Naturalness \(\nu_x\) is about the process — how it was made: "is this real food, or a lab product?" It is the same for every cut (a cultivated nugget and a cultivated wagyu are equally grown in a bioreactor), and it can fade with familiarity.
  • Authenticity \(\tau\) is about the occasion — what you want it to be: "for this purpose, do I want the genuine heritage article?" It is tier-shaped and permanent: irrelevant for a nugget, decisive for wagyu (where the real breed/provenance/status is the product).
They are orthogonal — a cultivated nugget faces naturalness doubt but no authenticity demand; a cultivated wagyu faces both. That is exactly why one is uniform-and-fading and the other is tier-shaped-and-permanent.
whole-food health premium \(w^{h}\zeta_w\)what makes whole foods (beans/tofu) the default for the health- and ethically-minded — and the reason plant-based meat is stuck at ~1%. It is not a free constant: it is the health attribute (position \(\zeta_w>0\), "the healthy choice") times the solved segment health weight \(w^{h}\) (Calibration, below), pinned so the model reproduces two published facts [14] — plant-based's ~1.2% share and the 89%-flexitarian buyer split. The standing it encodes (ethical eaters prefer whole beans over a processed veggie burger, beyond price/taste/slaughter-free) is real and load-bearing — drop it and plant-based triples to ~4% with mostly-vegetarian buyers (both shares are Eq. \((7)\)), contradicting the data. (The position \(\zeta_w=+2\) is itself assumed, not measured — but its level washes out: the calibration solves \(w^{h}\) to hit the two moments at whatever \(\zeta_w\) is set, so only the product \(w^{h}\zeta_w\) is identified.) (In the code: w_health_M / w_health_E times health_w.)

How the closeness \(\kappa\) actually works (and where it enters — just once, in Eq. \((6)\)). \(\kappa\) is the one knob that needs spelling out, because it has no direct data. Start from the measured number: scanner studies give the own-price elasticity of meat as a category, \(\varepsilon\approx-0.9\) [4] — inelastic, because if all meat gets dearer there is no close substitute to flee to. But cultivated beef is not a category; it has a near-perfect substitute right next to it (conventional beef, same tissue), so a price cut on cultivated specifically wins buyers much faster — its own-price elasticity is larger. \(\kappa\) is exactly that multiplier, and it is applied once: it sets cultivated's target elasticity \(\varepsilon_x=\kappa\varepsilon\). The \(\kappa\varepsilon\) you then see inside \(\beta\) is not a second use — it is the same \(\varepsilon_x\) substituted in, because \(\beta\) is merely the logit coefficient that delivers it:

\[ \varepsilon_x \;=\; \kappa\,\varepsilon \;\approx\; 4\times(-0.9)\;=\;-3.6, \qquad\text{delivered by}\qquad \beta \;=\; \frac{\varepsilon_x}{p_x\,(1-s_x)}+\frac{\lambda}{p_c} \ \text{(at cultivated's own price and share)} . \tag{6} \]

So at \(\kappa=4\) a 1% rise in cultivated's price loses ~3.6% of its buyers, four times meat's ~0.9% — and, after the two-channel fix above, that ~3.6 is the realised elasticity, not merely a target. One caveat on reading "−3.6": it is the local elasticity at cultivated's own operating point (today, \(R_x\approx2.4\), far above parity). The elasticity is not constant — it is much smaller near parity (~−0.8 at \(R_x=1\), ~−1.7 at \(R_x=1.5\)) and largest far above it. That shape is intrinsic to the BLP-plus-kink utility (share falls slowly just above parity, then accelerates), so "the curve is gentle just above \(R_x=1\) yet −3.6 by \(R_x=2.4\)" is the model behaving correctly, not a contradiction. Mechanically \(\kappa\) scales the elasticity part of \(\beta\) (hence \(\alpha\) in \(V_j\)), making cultivated's share-vs-price curve steeper above parity. It barely moves the at-parity share itself (only ~1pp across the whole \(\kappa=3\!-\!6\) range — it touches it only weakly, through \(\alpha\) in the income term, because the four products differ in dollar price even at \(R_x=1\)); its real work is on the slope above parity. It is the flat-logit stand-in for what a nested logit would get from a "real-meat" nest (its dissimilarity parameter), or a random coefficient on the real-tissue attribute. Why \(\approx4\)? It is the softest demand lever, but it is bracketed by the one direct measurement. Van Loo, Caputo & Lusk (2020) priced lab-grown across six levels and identified its at-parity own-price elasticity; their two models bracket it at −0.84 (conditional logit, the average consumer) to −3.4 (random-parameter logit, steep because lab-grown's preference is highly heterogeneous — its random-coefficient spread exceeds its mean). \(\kappa\) is exactly the flat-logit stand-in for that heterogeneity, so the model's implied at-parity (cold) elasticity must sit inside \([-3.4,\,-0.84]\) — and at \(\kappa=4\) it does (-1.5; self-check [4b]). It is also consistent with the standard ~3–5× own-brand-vs-category gap (and cultivated is a closer substitute — same tissue), so we centre at \(4\) (realised \(\varepsilon_x=-3.6\) at the premium, vs -1.5 at parity — the same curve, steeper higher up) and treat \(3\!-\!6\) as the range. The one thing the data cannot do is pin the elasticity at the \(R_x\approx2.4\) premium where \(\kappa\) actually bites (no experiment has priced cultivated that far above parity), so the −3.6 there is a functional-form extrapolation from the at-parity measurement — the honest residual. It is the single most consequential demand number for above-parity share — at \(\kappa=3\) an identical product at 2.4× conventional's price still keeps ~14%, at \(\kappa=4\) ~9%, at \(\kappa=5\) ~6% (each the softmax Eq. \((7)\), with \(\kappa\) entering through \(\beta\), Eq. \((6)\)) — which is exactly why it is exposed, not buried. Drag the slider to see.

For the skeptical reader: is "loss aversion" the right tool here? It is most famous from risky gambles, but Tversky & Kahneman's 1991 paper extends it to riskless choice: comparing goods on an attribute (here, price), you read each option as a gain or loss relative to a reference point, and losses loom larger. Paying more than the familiar conventional price reads as a loss; paying less, a gain — exactly our \(d_j\) term, and it is the workhorse behind reference-price models in marketing/IO (Hardie–Johnson–Fader 1993 estimate it on real brand-choice scanner data). It is a deliberate choice, not forced: set \(\lambda=1\) and the model collapses to a plain symmetric price logit (the slider's default does exactly that). So why ship with it OFF (\(\lambda=1\)) rather than on? Three reasons: (i) it is near-inert on the headline — the \(\beta\) calibration already absorbs its slope, so \(\lambda\) only reshapes the kink at parity, not the overall price level; (ii) it is not identifiable from the cultivated data we have; and (iii) Bell & Lattin (2000) show estimated loss aversion is largely the price-response heterogeneity that \(\kappa\) already carries — so a separate kink risks double-counting. We expose it (up to the Tversky–Kahneman ~2.25) because the premium is the whole story for cultivated meat and a kink at the reference price fits how shoppers react to "more expensive than normal" — but we keep it off until you ask for it.

What we do with \(V_j\): turn utilities into shares. Each consumer adds up the score \(V_j\) for every product and picks the one they like best — but with a random "mood of the day" taste shock. Averaging over those shocks (the standard Gumbel assumption) gives a clean formula: the probability of choosing product \(j\) is its softmax (the logit), bigger \(V_j\) ⇒ bigger share, and the shares sum to 100%:

\[ P_j = \frac{e^{V_j}}{\sum_{k}\,e^{V_k}} \qquad\text{(sum over the products on offer)} \tag{7} \]

(\(\sum_{k}\) just means "add up over all the products"; dividing each product's \(e^{V_j}\) by that total is what forces the four shares to sum to 100%.)

We compute this twice — once for each consumer type, using that type's own attribute weights — and then blend the two by the population split (the ethical type is a fraction \(w_{\rm eth}\), the mainstream the rest). That blend is the market share the page reports:

\[ \text{share}_j \;=\; w_{\rm eth}\,P_j^{\,\text{ethical}} \;+\; (1-w_{\rm eth})\,P_j^{\,\text{mainstream}} \tag{8} \]

Everything downstream — the headline penetration, the per-meat-type bars, the share-vs-price curve — is this one number, computed for cultivated (and, on the curve, for all four products).

The two consumer types (heterogeneity, not a nest). The mainstream (~95%) chooses on taste, price and real-tissue; the ethical type (~5% = Gallup vegetarian+vegan, the \(w_{\rm eth}\) slider) weights slaughter-free heavily and mostly eats whole foods — the two are mixed by the population split \(w_{\rm eth}\) in Eq. \((8)\). A single logit would have a new option steal share proportionally from all others ("red-bus/blue-bus"); because the mainstream is dominated by real-tissue products, a cultivated entrant draws almost entirely from conventional — no nested logit needed, just the shared real-tissue attribute and two types.

Calibration — pinned to real data, not free. Plant-based's price premium (GFI/NIQ), its taste deficit (NECTAR), and the ethical share (Gallup) are fixed; then three numbers (the mainstream real-tissue and the two segment health weights of Eq. \((5)\)) are solved to hit three moments: (i) the fact that ~89% of plant-based buyers are mainstream flexitarians, not the 5% ethical core (GFI 2024), (ii) a realistic mainstream meatless-by-choice rate (~6%), and (iii) the residual ethical plant-based rate — which together reproduce plant-based's observed ~1.2% of meat. Dragging \(w_{\rm eth}\), \(\lambda\), \(\kappa\) or income re-solves this live, so plant-based stays anchored. An out-of-sample check: holding those same coefficients fixed and only moving the product positions to plant-based milk's (near price & taste parity in coffee/cereal; no cheap whole-food substitute for milk) reproduces PB-milk's observed ~15% share (the same Eq. \((7)\), different attribute rows) — so the one machinery explains both PB-meat's failure and PB-milk's success (it is printed in the self-check above). (We do not add a separate "habit" term: it isn't separable from preference in the data — Heckman — so habit lives in the rollout-over-time, not here.)

Reading the share at parity. At \(R_x=1\) with neutral dials (\(a_x=1,\ \theta_{\rm free}=0\)), cultivated matches conventional on price, taste and real-tissue, so the two real-meat options split that demand roughly evenly — cultivated takes about 49% (this share, like every share here, is the softmax Eq. \((7)\) of the four utilities \(V_j\) of Eq. \((3)\), blended by Eq. \((8)\)). They are not quite identical, though: cultivated is also slaughter-free and sits at health \(0\) against conventional's small \(-0.1\) contamination penalty (a cultured product carries no antibiotics and none of the fecal/bacterial contamination of slaughtered meat). So cultivated weakly dominates and lands a few points ahead of conventional — even in the mainstream, where slaughter-free carries no weight and the edge is purely that cleanliness margin. That near-even split is the logit's near-symmetry, not a habit or brand term (the model has none; habit lives in the timing rung, §4). Drop \(a_x\) for taste friction (0.8 → ~26%, 0.6 → ~12%), or push it above 1 if cultivated is judged to taste better than an average cut (1.1 → ~61%); raise \(\theta_{\rm free}\) for the cleaner-meat upside (0.5 → ~59%, 1.0 → ~68%). Nothing is baked in. The model predicts the ordering cultivated ≳ conventional > plant-based at parity — cultivated edges conventional on cleanliness (and slaughter-free), and beats plant-based decisively because it is real tissue.

3. Roll-up across meat types, and the price tiers

Each meat type is run at its own R (its own conventional price) with two tier-dependent adjustments: (1) the authenticity offset \(\tau_{\rm type}\) — the additive constant from §2's \(\xi_x=\nu_x+\tau_{\rm type}\), more negative the more the product is bought for "the real thing"; and (2) an elasticity multiplier \(m_{\rm type}\) on \(\varepsilon\) (premium buyers are less price-sensitive — meat demand is more inelastic at higher price, Lusk & Tonsor [5]). (\(m_{\rm type}\) here is a multiplier — unrelated to the retail markup \(m\) of §1; economists reuse letters.) Both run off the same tier and are scaled together by the premium-resistance dial \(\rho\):

\[ \tau_{\rm type}=\rho\,\tau^0_{\rm type},\qquad \varepsilon_{\rm type}=\big(1+\rho\,(m^0_{\rm type}-1)\big)\,\varepsilon,\qquad (\tau^0,m^0)=\begin{cases}(+0.2,\,1.0)&\text{basic}\\ (-0.4,\,0.8)&\text{cut}\\ (-1.5,\,0.3)&\text{premium}\end{cases} \tag{9} \]

Writing \(s_i\) for type \(i\)'s cultivated share (each its own Eq. \((7)\)), \(\omega_i\) for its share of consumption by mass and \(p_i\) for its conventional price, the two headline totals are the volume- and value-weighted sums (value normalised by the total \(\$\) of the market, \(\sum_k p_k\omega_k\)):

\[ \text{pen}_{\rm vol}=\sum_i \omega_i\,s_i \quad(\text{mass}\to\text{animal/climate impact}),\qquad \text{pen}_{\rm val}=\sum_i \frac{p_i\,\omega_i}{\sum_k p_k\,\omega_k}\,s_i \quad(\$\to\text{market}). \tag{10} \]

In plain words: add up cultivated's share across the meat types, but weight each type either by how much of it people eat (the volume total — what matters for animals and climate) or by how many dollars it represents (the value total — what matters for market size). The two answers differ because expensive meats are a bigger slice of spending than of tonnage.

Tiers are set by (is it structured?, and its price relative to its own species):

tier      definition                                      authenticity τ   elasticity ×
basic   = unstructured mince/processed                       +0.2          ×1.0
cut     = structured, price < 2.5× the species' base form     −0.4          ×0.8
premium = structured, price ≥ 2.5× the species' base form     −1.5          ×0.3

These tier numbers are the model's most judgement-to-target input — so they are a knob. Both columns encode one belief (premium meat is bought for the authentic experience, so it resists substitutes and barely responds to price), and neither has an external data source — they were chosen so premium stays demand-capped even at a deep discount, i.e. to produce the "sweet spot is mid-cuts" result. Rather than bury that, a single premium-resistance dial \(\rho\) scales the whole ladder together (both \(\tau_{\rm type}\) and the elasticity multiplier's deviation from 1): \(\rho=1\) is the central ladder, \(\rho=0\) removes the tier effect entirely (cultivated penetrates wagyu as easily as mince), \(\rho=2\) doubles the resistance. It is swept in the Monte Carlo (prior 0.5–1.5), so the band reflects this judgement's uncertainty instead of hiding it — drag the slider to see how much the headline leans on it.

For the skeptical reader: isn't premium resistance just neophobia again? No — three things separate them. (i) Scope: neophobia \(\nu_x\) is uniform across all meat types (it's about the product being new); authenticity \(\tau_{\rm type}\) is tier-specific (+0.2 mince vs −1.5 wagyu — about wanting the real thing for this occasion). (ii) Time: neophobia fades with exposure ("is it weird/safe?" cures with familiarity); authenticity is permanent (a wagyu buyer in 2050 still wants real wagyu). (iii) Channel: authenticity also flattens price-sensitivity (the elasticity multiplier — luxury buyers barely flinch at price), which neophobia does not. So they are distinct primitives: "fear of the new" (transient, uniform) vs "I want the authentic luxury" (permanent, tier-specific, price-insensitive).

"Premium" is per-species, not a single price line. A product is premium when it costs at least 2.5× its own species' everyday (cheapest) form — so every species can have one: wagyu / prime beef, sushi-grade seafood, organic chicken, heritage / ibérico pork. (Defining premium by a relative ratio, rather than one absolute $/kg line, avoids the artefact where the same product flipped tier between regions.) Each region's bar chart now shows a wine "premium" bar for several species. Data caveat: wagyu beef and sushi seafood are well-attested premiums; the organic-chicken and heritage-pork variants are real but smaller, so they are included at low volume and lower confidence. The tiers encode why there is no easy entry point: cultivated is cheapest exactly where demand resists most (premium, bought for authenticity, price-insensitive) and most accepted where it is hardest to beat on price (cheap staples). The reachable window is the mid-priced cuts — the structured-but-not-premium tier (beef steak, chicken/pork cuts).

Families vs species — and why cost stays family-flat. For display we group the species into families only where the members genuinely share structure: poultry (chicken, turkey, duck/goose — near-identical cell biology, ~37 °C culture, a cheap price band, and the same "no authenticity hang-up on a nugget" framing) and seafood / fish (the one biologically distinct family — lower ~24–28 °C culture, different cells, spanning canned to sushi). Beef, pork, sheep/goat and rabbit stand alone: forcing, say, ruminant beef and monogastric pork into a synthetic "red meat" family would assert a commonality the data don't support. Grouping is a display and framing layer — the tier math (premium judged vs a species' own base) and the calibration are unchanged. Crucially the cultivated biomass cost is held flat across families (one Pasitka-anchored number; differences enter only through each species' price, structure, and demand): a per-family cost would need a per-family TEA, which does not exist, so the model carries a documented per-type multiplier \(\mu\) (default 1) as the hook where a sourced family cost would go — rather than inventing one. Fish, with its different culture biology, is the most likely future exception, but only once measured.

4. Adoption over time (the timing rung)

This is step 3 of the big-picture three: the share above is the destination; here we ask how fast cultivated gets there.

The share above is an equilibrium — where adoption lands once a product is familiar. But cultivated meat is brand-new, and the data say today's consumer is cold: in a US choice experiment (Van Loo, Caputo & Lusk 2020 [8]), lab-grown took only ~5% at price parity with beef. That 5% is not the ceiling — it is the starting point of a diffusion curve, because acceptance rises with familiarity (GFI's consumer research: tasting and exposure steadily lift acceptance; only ~27% of Americans yet feel familiar with the category). The cultivated-specific price response itself is well-behaved — Lusk's coefficient implies an own-price elasticity bracketing −0.84 to −3.4 (cf. Jahn et al. 2024 [9], who find the plant-based analog at −1.4) — so what is uncertain is the at-parity standing, not the slope.

So the timing rung runs two coupled processes over 30 years, at cultivated's held price ratio \(R_x\) (Eq. \((11)\); the "ceiling" it multiplies is just the §2 share, Eq. \((7)\), recomputed as novelty fades):

\[ \text{share}(t) \;=\; \underbrace{F(t)}_{\text{Bass rollout}}\;\times\; \underbrace{\text{ceiling}\big(\nu_x(t)\big)}_{\S2\text{ share as novelty fades}},\qquad \nu_x(t)=\nu_x + (\nu_{x0}-\nu_x)\,e^{-\,r\,E(t)} \tag{11} \]

where \(\nu_{x0}\) is the initial (cold-start) neophobia — the dial whose range is pinned to the data — and \(\nu_x\) is the long-run level it fades toward. The fade is driven by cumulative availability \(E\) (mere-exposure: people grow familiar with what they keep seeing, even before they buy), at rate \(r\) (accept_rate). \(F(t)\) is standard Bass diffusion [11] \(\big(\dot F=(p+qF)(1-F)\big)\) — where \(p\) is the innovation rate (independent early adopters) and \(q\) the imitation rate (word-of-mouth contagion), the two standard Bass coefficients. (These Bass \(p,q\) are diffusion rates — not the plant-based product index \(p\) of §2; the reuse of the letter is unavoidable convention.) The chart above shows the realized median, the rising ceiling it climbs toward, and the year it stabilises (reaches 90% of its yr-30 value); turn on Monte Carlo to band it.

Why \(\nu_{x0}\)'s range is [-3.5, +1.5]: the question framing dominates the answer. The same product polls anywhere from ~5% to ~60% depending purely on how you ask (GFI [10]): a cold unbranded choice experiment gives ~5% (\(\nu_{x0}\approx-2.8\), the data-anchored default — "today's unfamiliar consumer"); a warm "cultivated chicken in a restaurant" framing (Perdue 2024) gives ~60% (\(\nu_{x0}\approx+1.5\)); neutral/equivalent sits at ~49% (Eq. \((7)\) at \(\nu_{x0}=0\)). Rather than pick one, the slider spans the whole framing band, and it is swept in the Monte Carlo, so this — the single widest genuine uncertainty in the demand side — is shown, not hidden. (Reassuringly, the cultivated-specific price response itself is not the issue: Lusk's data imply an own-price elasticity bracketing −0.84 to −3.4, and the model's curve sits inside that.)

5. Prices, the markup, and consumption shares

Conventional retail prices by region and form — the \(p_c\) the model divides by. Cultivated cost is ~global; it is the local price it competes against that differs, by region and by form:

Prices: GlobalProductPrices (globalproductprices.com, retail, Jan 2026) for the world/regional levels, cross-checked against USDA ERS & BLS (US). Consumption shares (the volume weights): USDA ERS per-capita availability (US); OECD-FAO Agricultural Outlook 2024 and FAO food-balance sheets (Europe, China, world). Species mix genuinely varies by region — China pork-dominant (~two-thirds of meat), the US poultry-heavy (~half), Europe pork-led but shifting to poultry, the world tilting to poultry — which is why the region selector moves the totals.

On the retail markup \(m\) (an assumption worth flagging). We add the biomass→retail wedge as a fixed $/kg amount (default $5/kg), not a percentage. We do not know it is additive: conventional meat's farm-to-retail spread (USDA ERS price-spread data, ~$3–6/kg for ground beef) motivates the magnitude, and much of the wedge — slaughter/processing, cold chain, retail handling — genuinely is per-kg rather than proportional. But a proportional (%) markup would change the parity arithmetic, so the additive form is a modelling choice, not a measurement. It is one of the most leveraged numbers in the model, which is why it is exposed as its own slider.

The share curve bends through parity. Premium reluctance is the reference-dependent loss-aversion term \(\lambda\) (§2), applied to every product by its premium over conventional. Because the term is two-sided, the share-vs-price curve is continuous through \(R_x=1\) (no cliff) but has a kink there — in the ratio \(R\), the loss side (dearer than conventional) has slope \(-\lambda\) and the gain side (cheaper) the unit slope \(+1\); at the default \(\lambda=1\) the two match and the kink vanishes (symmetric, no loss aversion), and \(\lambda>1\) makes the dearer side steeper. Plant-based (at 1.77×) is treated by the very same rule, on equal footing with cultivated.

6. The foothold rung — the accessible price, the rent partition, and the displaceable volume

A zoom-in beyond the three core steps: not the whole-market share, but which single products cultivated can realistically enter first.

Rungs 1–5 roll cultivated up across a region's whole meat basket. This rung asks the product-level question that panel 7 visualises: at which single products can cultivated compete on price, and how much conventional production would it displace there? — the foothold that, once scaled, drives the cost down (the experience- / learning-curve mechanism, Wright 1936 / Arrow 1962 [18]; Spence 1981 [19]). This is price-skimming down a quality ladder; it is popularly called "disruptive innovation", though the load-bearing results are those standard ones, not the management framing.

Cost — the waterline. Cultivated's retail cost is §1's biomass cost \(c_{\rm bio}\) plus the retail markup \(m\), with the scaffold \(k\) added only for structured (whole-cut) products:

\[ c_x \;=\; c_{\rm bio} \;+\; k\,[\text{structured cut}] \;+\; m, \tag{12} \]

and an irreducible-floor variant \(c_x^{\rm floor}\) that swaps \(c_{\rm bio}\) for the derived floor \(c_{\rm floor}\) (§1). Cost is ~global; what differs across products is the price it meets.

In plain words, before the terms. A wagyu steak's high price is mostly not the cost of producing it — it is a premium people pay for authenticity (the real breed, the heritage, the scarcity). Economists call that extra slice economic rent (an "above-cost" premium, unrelated to apartment rent). Cultivated meat can match the meat but not the authenticity, so it can only ever compete for the cheaper, quality-driven part of the price — never the rent. And some luxury buyers (a Veblen segment — people for whom the high price and exclusivity are the point) will not switch at any price. The next few lines just make that precise.

The rent partition — the one new primitive. A luxury price is not cost-plus; it is mostly economic rent on attributes cultivated structurally lacks — terroir, wild-caught, heritage, grade, scarcity. Hedonically (splitting a price into the value of its separate features, Rosen 1974 [16]) the conventional price splits into a base and a rent,

\[ p^{\rm auth} \;=\; p^{\rm base} \;+\; \underbrace{(p^{\rm auth}-p^{\rm base})}_{\text{authenticity rent}}, \tag{13} \]

and cultivated — not being the authentic thing — can earn only the base. So the ratio that decides reachability is taken against the accessible tier, never the headline:

\[ R \;=\; \frac{c_x}{p^{\rm base}}\qquad(\text{not } c_x/p^{\rm auth}). \tag{14} \]

Heterogeneity in the taste for authenticity then splits the category in two: a prestige core (fraction \(\chi\)) pays the rent and never switches — a Veblen / conspicuous-consumption segment (Bagwell & Bernheim 1996 [17]), which is precisely why a luxury incumbent holds price and cedes volume rather than discounting — and an aspirational base buys on quality and is contestable. Only the base is addressable:

\[ V^{\rm addr} \;=\; (1-\chi)\,V. \tag{15} \]

This counts authenticity once (as removed volume), avoiding the double penalty of also taxing it inside the utility.

How the three tiers are pinned. For a graded product they are read straight off the market's own grade structure, not assigned: \(p^{\rm auth}\) is the retail price of the top / prestige grade (bellota ibérico, A5 wagyu, wild beluga, ō-toro); \(p^{\rm base}\) is the mainstream grade bought for quality rather than provenance (serrano / cebo ham, crossbred "wagyu-style", farmed Atlantic salmon, akami). Both prices are observable from grade-level retail data (panel 7's hover gives the per-product source). The prestige-volume share \(\chi\) would in principle be the prestige grade's fraction of category volume — but unlike the prices, those splits are mostly not published, so \(\chi\) is handled as a single global value (next paragraph) rather than guessed per product. A commodity with a single grade has \(p^{\rm base}=p^{\rm auth}\) and no prestige core, so the partition does nothing there.

What's sourced, and the judgement left. The price tiers \(p^{\rm auth}\) and \(p^{\rm base}\) are sourced (June 2026 retail/wholesale, cited per product). The prestige volume share \(\chi\) is a single global value, not per-product: only two categories' grade splits are published — salmon (wild ~25% of supply) and iberico (bellota ~20% of production) — and both land at ~0.2–0.25, so one number is as defensible as guessing eleven (and far easier to explain). \(\chi\) is the knob (slider, default 0.25), applied to every product with a distinct, cheaper accessible tier; commodity (single grade) has none. Drag it — \(\chi=0\) makes the whole luxury market addressable, \(\chi\to1\) locks it all as rent — to see how much the picture leans on the one guess. (Shark fin is the one product whose price is also an estimate — an illegal, declining trade with no clean data.)

Reachability zones (panel 7's colours), with a ±$3 "at-parity" band so knife-edge products do not read as categorical:

\[ \text{zone}=\begin{cases} \text{at parity}&|p^{\rm base}-c_x|\le \$3\\ \text{reachable now}& p^{\rm base}\ge c_x\\ \text{needs the floor}& c_x^{\rm floor}\le p^{\rm base}<c_x\\ \text{never (on price)}& p^{\rm base}<c_x^{\rm floor}\end{cases} \tag{16} \]

Share of the addressable base. The contestable buyers choose by the same two-segment logit \(S(\cdot)\) of §2 — fully specified there (the BLP income–price term, taste, slaughter-free, real-tissue and health, summed over the four products and the two segments) — with no new demand parameter, and crucially with the same per-tier authenticity offset and elasticity (\(\tau_{\rm tier},\,\text{tMult}\)) that panel 1 applies. The trick is the tier mapping. §2 has three tiers — basic (+0.2 everyday pull), cut (−0.4 "want the real cut"), premium (−1.5). Here the premium tier is exactly the prestige core, already removed as volume via \(\chi\); so the accessible grade cultivated competes at is basic when it is unstructured/processed and cut when it is a whole muscle:

\[ \tau^{\rm acc}=\begin{cases}\tau_{\rm basic}=+0.2 & \text{unstructured / processed}\\ \tau_{\rm cut}=-0.4 & \text{structured (whole cut)}\end{cases},\qquad s \;=\; S\big(R=c_x/p^{\rm base};\,\tau^{\rm acc}\big). \tag{17} \]

This is what makes the two panels reconcile: a commodity product (no rent tier, \(\chi=0\), \(p^{\rm base}=p^{\rm conv}\)) collapses Eq. \((17)\) back to Eq. \((7)\), so it reproduces panel 1's same-tier share exactly — a commodity cut (chicken breast, pork loin, beef steak, shrimp) lands on panel 1's cut tier, a commodity processed product (pet food) on its basic tier. Authenticity is therefore counted once: the prestige grade as removed volume (\(\chi\)), the accessible grade through its calibrated basic/cut taste — never both for the same buyer.

Cultivated's capturable advantage (cruelty-free foie gras, contaminant-free seafood) is deliberately not a separate utility offset: that would be an un-calibratable free coefficient, and it would double-count. It enters instead through the price the product can command — an attribute that substitutes for the rent supports a higher \(p^{\rm base}\) (and a smaller prestige core \(\chi\)), which lowers \(R\) and so lifts \(s\) through \(S\) itself. So the only foothold-specific inputs are the observable price tiers \((p^{\rm base},\,p^{\rm auth},\,\chi)\); the demand side introduces nothing new to calibrate.

Displaceable volume — the rung's output. We deliberately do not model a margin or profit: cost \(c_x\), the price cultivated could charge, and the volume it would sell are too tightly coupled to pin a credible \(\$\)-figure (a negative per-kg "margin" at one fixed price is an artifact of that pinning, not a result). Instead we fix the cleanest defensible assumption — cultivated prices at its own cost \(c_x\) (zero margin) — and read off the demand curve the share it wins there and the conventional production that share displaces over the addressable base:

\[ D \;=\; s\big(R=c_x/p^{\rm base}\big)\cdot V^{\rm addr}\qquad(\text{kt/yr}). \tag{18} \]

Products are ranked and sized by \(D\) (Eq. \((18)\): the addressable volume of Eq. \((15)\) times the reachable-tier share \(s\) of Eq. \((17)\)). A pure-rent category (caviar, \(\chi\to1\)) has \(V^{\rm addr}\to0\Rightarrow D\to0\). \(D\) is largest where a genuine capturable advantage meets a large accessible base (cruelty-free foie gras; high-volume seafood), and it grows as cost falls (lower \(c_x\Rightarrow\) lower \(R\Rightarrow\) higher \(s\)) — the price-skimming / experience-curve descent [18][19] the rung motivates but does not itself model. This is a reachability + demand statement, explicitly not a profitability one.

What is sourced vs. judged here — read before trusting panel 7. The cost terms are sourced (§1; Pasitka/Humbird). The only foothold-specific inputs are the partition tiers — the price tiers \(p^{\rm base}\), \(p^{\rm auth}\) (now sourced from June 2026 retail/wholesale, cited per product — hover any bubble in panel 7) and the prestige share \(\chi\) (a single global value — the \(\chi\) slider, default 0.25, anchored to salmon & iberico's ~0.2–0.25). They are data (observable market tiers), not free coefficients. The demand side adds no new parameter — it reuses §2's calibrated logit and its existing (swept) acceptance dials. Relation to §3: this is the per-product refinement of §3's coarse three-tier authenticity. There the luxury penalty lives in a utility offset \(\tau_{\rm type}\); here it lives in an observable price partition \((p^{\rm base},\chi)\) — read off market tiers rather than assigned — with the addressable volume, not the share, carrying the rent.

What this rung is — and four limitations an economist would flag. It is a reduced-form reachability + impact map (where is cultivated price-competitive, and how much conventional volume it would displace), not an equilibrium model. (i) No supply side, no P&L: cultivated is assumed to price at its own cost (0% margin) and benchmarked against the accessible grade \(p^{\rm base}\) — there is no profit-maximising price and no incumbent best-response (the "hold price, cede volume" story is assumed, not derived). (ii) \(S(R)\) reuses §2's meat-calibrated logit (its choice set and elasticities), so for luxury / seafood it is indicative, not category-specific — and being downward-sloping it does not carry the Veblen effect used to justify \(\chi\) (so authenticity is split: the prestige grade as a deleted core, the accessible grade through §2's calibrated basic/cut offset — each buyer once). (iii) We report no profit at all — only reachability, break-even share, and displaced volume \(D\); margin, capex, fixed costs and discounting (the P&L that would fund the descent) are deliberately out of scope, because cost, price and volume are too coupled to pin credibly. (iv) Partial equilibrium — each product in isolation. So this rung answers "where can cultivated enter on price, and what does it displace", not "optimal entry, profit, or the descent dynamics".

Parameters & sources — every knob, its symbol, and where it enters

Each slider you can tweak, the symbol it carries in the equations above, its default and range, the exact term it enters (§1 = cost → R; §2 = the utility \(V_j\)), and its source — so every result traces back to a parameter and an equation (full datasheet in METHODS.md):

The attribute weights — and why most of them are not sliders. The table above is the positions you can drag (how good cultivated tastes, its price, whether it is credited as real meat…). This second table is the weights — the multipliers that say how much each attribute matters — and it answers a fair question: why can I move a product's position but not the weight on it? Because the weights split into four kinds, and only some are free:

  • SOLVED — pinned by a calibration moment (PB's ~1.2% share, the 89% buyer split, the meatless rate). You can't set these freely without breaking the fit; they re-solve when you move a target (e.g. \(w_{\rm eth}\)).
  • FIXED — a normalisation (the taste weight \(q\): only utility differences are identified, so its level is arbitrary) or a structural assumption (the ethical segment's large slaughter-free weight, which is what defines that segment).
  • SLIDER — genuinely yours, because they are not calibration-identified (the mainstream slaughter-free upside \(\theta_{\rm free}\), loss aversion \(\lambda\), the segment size \(w_{\rm eth}\)).
  • DERIVED — the price coefficient, built from the elasticity target (§2).

So you tweak a product's position freely (e.g. cultivated's real-meat credit \(b_x\), which is the cultivated-specific scaling of the shared real-tissue weight \(w^{rt}\) — moving \(b_x\) is how you move cultivated's effective weight); but the shared weight itself is pinned by the plant-based data, so it is solved, not dragged. Values are read live from the calibration (they can't go stale):

weightsymbolmainstreamethicalhow it is set
priceα, ββ = -0.053
α = 4,517
(shared, not per‑segment)
DERIVED from cultivated’s own-price elasticity target εx = κε = 4×(-0.9) = -3.6 (§2). Price enters utility through two channels — the BLP log (slope β) and loss aversion (slope −λ/pc) — so β absorbs the rest to hit the target: β = εx/[px(1−sx)] + λ/pc = -3.6/[29·0.91] + 1/12 = -0.053; then the BLP constant α = −β(yref−px) = −(-0.053)·(85,810−29) = 4,517 (large only because it multiplies ln of income, whose differences are tiny). Evaluated at cultivated’s own price px = $29/kg and share sx = 9% — a short fixed point. No free constant: move any cost input and px moves, so β follows.
tasteq5.005.00FIXED scale constant — only utility differences are identified, so the level is a normalisation
slaughter-freews0.004.0mainstream = SLIDERfree, upside dial, default 0); ethical = FIXED assumption (large, the ethical segment’s defining weight)
real-tissuewrt2.240.00mainstream = SOLVED to hit PB’s ~1.2% share + the 89% mainstream-buyer split; ethical = FIXED ≈0 (ethical buyers pick beans, don’t weight ‘real meat’)
healthwh0.851.81BOTH SOLVED — pin the mainstream meatless rate (~6%, so total whole-food ≈10%) and the ethical residual PB share
loss aversionλ1.001.00SLIDER, default 1 = off (symmetric, no kink)
segment mixweth5%SLIDER (Gallup veg+vegan ~5%); moving it re-solves the calibration so PB stays pinned

Is this the natural way to set it up? (an honest interrogation)

The framework is exactly what an economist would use — a random-utility discrete-choice model with consumer heterogeneity, BLP income, and reference-dependent loss aversion, all standard. The honest label, though, is a calibrated, partial-equilibrium model: parameters are pinned to a few observed facts, not structurally estimated, because no cultivated-meat choice data exists yet. So the demand side is a band/scenario, never a forecast. Which is forced, which is judgement:

  • Forced by physics / data. The cost split (medium vs overhead) is how Pasitka reports COGS; the feedstock floor is stoichiometry. The four-product logit and the BLP income term are textbook.
  • Cultivated draws from beef without a nested logit. The shared real-tissue attribute plus two consumer types does the job a nested logit would: a cultivated entrant takes share almost entirely from conventional (a self-check on the page confirms this), not the veggie burger — a milder, more transparent structure.
  • The premium penalty is on equal footing. Loss aversion \(\lambda\) applies to every product by its premium, so there is no cultivated-only special case and the share-vs-price curve is smooth through parity.
  • The calibration is pinned to data. Plant-based's ~1.2% share and the 89%-mainstream buyer split (GFI) pin the otherwise-unidentified outside-option baselines; the ethical share is Gallup. We solve three numbers to hit those; everything else is sourced.
  • The softest demand lever is \(\kappa\) (cultivated↔conventional closeness), but it is bracketed by data, not free: Lusk 2020 priced lab-grown across six levels, putting its at-parity own-price elasticity in −0.84…−3.4, and the model's implied at-parity (cold) elasticity at \(\kappa=4\) is -1.5, inside that bracket (self-check [4b]). The residual is that the data measure the elasticity at parity, while \(\kappa\) bites at the \(R_x\approx2.4\) premium where no one has priced cultivated — so the −3.6 there is a functional-form extrapolation. It is the single biggest demand lever for above-parity share (self-check [6]) — drag it to see; that is the point of exposing it.
  • Habit is not a separate fitted term (it is not separable from preference without panel data — Heckman); it lives in the rollout-over-time as food-neophobia fading, with long-run acceptance (\(a_x\), \(\theta_{\rm free}\)) as the dial.
  • The tier offsets (authenticity ±, elasticity ×) are reduced-form scenario knobs for a richer per-product model we have no data to fit.

What the model does NOT do (limitations)

  • Calibrated, not estimated. Standard theory, but parameters are fit to moments, not a full demand system — appropriate given no cultivated-meat data; reaching for an estimated random-coefficients model here would be false precision.
  • Two consumer types, one price coefficient. A 2-point heterogeneity, not a continuous random-coefficients (mixed-logit) distribution; one elasticity applied across products, not a full substitution matrix.
  • Partial equilibrium. Prices are exogenous (the cost rung sets them); no supply response, pass-through, or capacity. "What share at price X", not a market-clearing model.
  • Convenience (the third "price–taste–convenience" factor, Bryant/Peacock) is proxied by rollout-over-time, not modelled as its own attribute.
  • Species mix is fixed within a region — the meat-tax is a uniform multiplier, so it does not reshuffle chicken-vs-beef-vs-pork (the cross-price terms are small/noisy; Gallet 2010/2012).
  • Low-income region prices/mixes (India, Brazil, Nigeria) are rough, illustrative of the income channel rather than calibrated. Scaffold cost is a guess — no TEA covers it.
  • It is a substitution model on today's price ladder. Every share is a contest against the existing meat products at their existing prices. But classic disruptive entry often does not fight head-to-head on that ladder — it starts in non-consumption or a new-attribute niche (e.g. pet food, novel/unfarmable species, allergen- or contaminant-free, hyper-premium "no animal harmed" positioning, or an IP/ingredient play) and only later moves into the mainstream. The model would score those niches as small (low volume weight) and so understates a route that the disruption literature says is the likely one. Read the headline as "share if cultivated competes on the current ladder," not as the only path to scale.
  • Meat only — no eggs or dairy. The model is cell-cultured meat, anchored throughout to Pasitka's muscle-tissue chicken TEA. It deliberately excludes cultured egg and dairy proteins, which are made by a different process — precision fermentation (engineered microbes secreting a target protein), with a different cost structure (no scaffolding, no perfusion bioreactors, different feedstock-to-product yield). There is no equivalent peer-reviewed empirical TEA to anchor those costs, so modelling them here would mean inventing the numerator — exactly the false precision this model avoids. We flag it as a real gap because fermented egg/dairy is plausibly the easier cultivated- economics story (commodity ingredient, no structuring) and a likely new-attribute beachhead — but it belongs to a separate model, with its own sourced cost basis, not a bolt-on here.

References

  • [1] Medium $0.63/L, intensity, COGS, reactor configs: Pasitka, L. et al. Empirical economic analysis shows cost-effective continuous manufacturing of cultivated chicken using animal-free medium. Nature Food 5, 693–702 (2024). doi:10.1038/s43016-024-01022-w
  • [2] Feedstock floor, scale-up ceilings, clean-room cost: Humbird, D. Scale-up economics for cultured meat. Biotechnology and Bioengineering 118, 3239–3250 (2021). doi:10.1002/bit.27848
  • [3] $0.20/L company claims, media-cost breakdown: The Good Food Institute, State of the Industry (2025) & Specht, L., Analyzing cell-culture medium costs (GFI white paper, 2021).
  • [4] Elasticity −0.9 (beef −0.75, pork −0.72, poultry −0.68): Andreyeva, T., Long, M. W. & Brownell, K. D. The impact of food prices on consumption. Am. J. Public Health 100, 216–222 (2010). doi:10.2105/AJPH.2008.151415
  • [5] Premium less elastic at high price: Lusk, J. L. & Tonsor, G. T. How meat-demand elasticities vary with price, income and product category. Appl. Econ. Perspect. Policy 38, 673 (2016). doi:10.1093/aepp/ppv050. Cross-region species elasticities: Gallet, C. A. meta-analyses (2010/2012).
  • [6] Scaffold $6/kg is OUR assumption (no published cost figure): no techno-economic analysis covers scaffolding / structuring cost — Humbird 2021, CE Delft 2021 and Risner et al. 2021 all stop at unstructured cell slurry. Treat the $6/kg as a guess and slide it.
  • [7] Plant-based taste (only ~16% reach blind parity): NECTAR, Taste of the Industry (2025). 5% veg+vegan: Gallup (Brenan, 2023) — 4% vegetarian, 1% vegan.
  • [8] Cultivated cold at-parity share ~5%; the timing cold-start (νx0): Van Loo, E. J., Caputo, V. & Lusk, J. L. Consumer preferences for farm-raised meat, lab-grown meat, and plant-based meat alternatives. Food Policy 95, 101931 (2020), doi:10.1016/j.foodpol.2020.101931 — US choice experiment: at price parity, lab-grown ~5%, plant-based 16%/7%, beef 72%; even at 50% discounts beef keeps the majority. The price coefficient implies a lab-grown own-price elasticity bracketing −0.84 to −3.4 (so the model's share-vs-price curve sits inside the data).
  • [9] Plant-based analog elasticity (−1.4), the 20–25% at-parity ceiling: Jahn, Guhl & Erhard. Substitution patterns and price response for plant-based meat alternatives. PNAS 121, e2319016121 (2024), doi:10.1073/pnas.2319016121 — own-price elasticity of the meat-analog burger −1.39 [−2.31, −0.48]; meat itself −0.05 (ns); PBMA shares cap at ~20–25% even at parity.
  • [10] The 5–60% framing band, ~27% familiarity (the νx0 range): The Good Food Institute, Consumer outlook on cultivated meat, US (2024) (Morning Consult, n=2,214) & Consumer insights — willingness-to-try spans 28% (free sample, plain) to 60% ("cultivated chicken in a restaurant", Perdue 2024); acceptance rises with familiarity (only ~27% feel familiar) — i.e. the cold start is a transient that fades, the basis for the diffusion rung.
  • [11] Bass diffusion (p, q), and the p≈0.02 / q≈0.40 norms: Bass, F. M. A new product growth model for consumer durables. Management Science 15, 215 (1969), doi:10.1287/mnsc.15.5.215; meta-analytic ranges from Sultan, Farley & Lehmann, J. Marketing Research 27, 70 (1990), doi:10.1177/002224379002700107.
  • [12] Discrete-choice / random-utility demand: McFadden, D. Conditional logit analysis of qualitative choice behavior (1974); Train, K. Discrete Choice Methods with Simulation (2009). Income in price (BLP): Berry, Levinsohn & Pakes, Econometrica 63, 841 (1995), doi:10.2307/2171802.
  • [13] Reference-dependent loss aversion: Tversky & Kahneman, Q. J. Econ. 106, 1039 (1991), doi:10.2307/2937956 (the reference-dependent model) and J. Risk Uncertain. 5, 297 (1992), doi:10.1007/BF00122574 (the λ ≈ 2.25 loss/gain median this model anchors to); Hardie, Johnson & Fader, Marketing Science 12, 378 (1993), doi:10.1287/mksc.12.4.378. Habit ≠ heterogeneity: Heckman, J., Heterogeneity and state dependence, NBER (1981).
  • [14] Plant-based ~1.2% share, ~89% mainstream buyers, +77% price premium: GFI market research (GFI/SPINS, GFI–Morning Consult, GFI/NIQ, 2024). At-parity displacement (UCLA): Peacock, J., Price, taste & convenience (2023).
  • [15] Region income (GDP/cap PPP) & the income–elasticity gradient: World Bank (2023–24); Muhammad et al., International evidence on food consumption patterns, USDA ERS TB-1929 (2011). Whole-food bean price: BLS/FRED retail series (2025).
  • [16] Hedonic price = sum of implicit attribute prices (the rent decomposition, §6): Rosen, S. Hedonic prices and implicit markets. J. Polit. Econ. 82, 34–55 (1974). doi:10.1086/260169
  • [17] Conspicuous-consumption / Veblen pricing (why a luxury incumbent holds price, §6): Bagwell, L. S. & Bernheim, B. D. Veblen effects in a theory of conspicuous consumption. Am. Econ. Rev. 86, 349–373 (1996).
  • [18] Experience / learning curve — unit cost falls with cumulative output (§6): Wright, T. P. Factors affecting the cost of airplanes. J. Aeronaut. Sci. 3, 122–128 (1936); Arrow, K. J. The economic implications of learning by doing. Rev. Econ. Stud. 29, 155–173 (1962). doi:10.2307/2295952
  • [19] Price-skimming down a quality ladder under a learning curve (§6): Spence, A. M. The learning curve and competition. Bell J. Econ. 12, 49–70 (1981). doi:10.2307/3003508

Anchored to Pasitka et al. 2024 and Humbird 2021; full results in RESULTS.md.