18 What adaptationism claims
(ns meme-constructor.adaptation.post-iii1-adaptationism
(:require [scicloj.kindly.v4.kind :as kind]
[meme-constructor.convergence :as cv]
[meme-constructor.design :as d]
[meme-constructor.adaptation.critiques :as cr]
[meme-constructor.figures :as fig]))Post III.1 of Part III, “A Constructor Theory of Adaptation”.
Adaptationism, as defended here, is the claim that adaptationism is the best theory of design (Conjecture I.5.12 of post I.5). Its classic critics do not offer a rival: spandrels, developmental constraint and self-organisation explain traits that fail the alternatives condition (D2), and exaptation, drift and hitchhiking explain no design at all.
To tell a design from a non-design in practice, rates of change are enough for traits that vary on their own. When two traits always vary together, no rate can say which of them carries the design. Only an intervention that changes one without the other can.
18.1 1. Design and evolution
Definition III.1.1 (Design) is Definition I.5.0 of post I.5. A constructor K for a task T is a design to the degree that it is resilient (the knowledge condition (D1)), has alternatives within one step (the alternatives condition (D2)), and most of those alternatives perform T much worse (the fine-tuning condition (D3)). For biology the step is one mutation.
Evolution by natural selection is an instance of the adaptive synthesis task (C5) of post I.5. This is design and adaptive process in biology (AD1):
| adaptive synthesis task | evolution by natural selection |
|---|---|
| task T | the tasks by which organisms of a lineage stay instantiated in their environment: survive and reproduce there |
| medium I | the genome |
| variation V | mutation, recombination, duplication |
| elimination E | differential death and reproduction |
| resource N | food, space, mates, and the finite number of births |
| step ⇝ | one mutation |
The task has two conditions, and mutation meets the first: unspecific variation (A1′). Its law depends on the sequence (hotspots, a bias towards transitions), not on what the organism would need. That is the precise content of “random mutation”. Differential reproduction meets the second, the selection condition (A3). A population of fixed size also has competition (A2), but post I.5 shows that finding a design does not need it.
- unspecific variation
- its law depends on the sequence, not on what the organism would need
- selection by the task
- adds competition
- finding a design does not need it (post I.5)
18.2 2. The critics say nothing positive about design
This section is about explanatory adaptationism and its critics (AD2). Godfrey-Smith (2001) separates three claims, and only the third is defended here:
Definition III.1.2 (Explanatory adaptationism). Every design in a living thing came from a process that meets the unspecific-variation and selection conditions (A1′, A3).
This is the design conjecture (Conjecture I.5.12) restricted to biology. It says nothing about how many traits are designs. A rival theory of design would have to say how fine-tuning arises some other way. Here is what each classic critique explains:
Each critique is true of many traits. Each one describes the space of alternatives or the null model. None says how a trait comes to be fine-tuned for a task. Dawkins (1986, p. 303, as quoted by Godfrey-Smith) put it this way: such alternatives matter “only in the boring parts of evolution”. That is why the design conjecture is the best theory of design, not merely a popular one. It would lose that place if one of these mechanisms were shown to produce fine-tuning for a task it does not read.
Drift does not even keep a design. Under drift every site changes at the rate it mutates (Kimura 1968). A design with \(L_c\) constrained sites, each mutating at rate \(\mu\), then survives a geometric waiting time of mean about \(1/(\mu L_c)\) generations: \(10^6\) generations for 100 sites at \(\mu = 10^{-8}\). A design conserved much longer is kept by selection.
On method we follow Williams (1966): adaptation “should be used only where it is really necessary”. Design has to be shown trait by trait. The rest of the post asks how.
18.3 3. The critiques experiment
The critiques experiment (Y6) builds the critiques into a toy world where the truth is known, and asks whether rates of change sort them correctly. The measure is Kimura’s constraint: with \(k\) the realised and \(\mu\) the raw number of changes at a site,
\[1 - \frac{k}{\mu}.\]
It says what share of the variation at a site selection removes. A constraint near 1 shows that selection acts at the site (A3), and it is the degree to which the site is fine-tuned (D3). A drifting site has constraint near 0.
The world. Post 4’s bit-string model with ten blocks of five tasks:
The step relation never reads \(F_\text{real}\) (A1′). Reproduction is Wright–Fisher with 60 hosts, each child one step from a parent drawn with weight \(e^{F_\text{real}}\) (A3). Copy noise \(p_\text{loss} = p_\text{gain} = 0.005\) per task, \(p_\text{jump} = 0.01\) per block. Seeds 1 to 40, 2000 generations, one line of descent per seed from generation 301 on. To get \(\mu\), each parent on the line is copied again 8 times by the step relation alone (replay seed 99), as a mutation-accumulation line would do.
Prediction. The spandrel fails the alternatives condition (D2), the drift, hitchhiker and pleiotropic blocks fail the selection condition (A3), and the small points pass. Refutation: the procedure calls the spandrel or a carried trait a design.
Before the run we fixed three readings:
(def world (cr/world))(def seeds (range 1 41))(def histories
(mapv #(cr/run-wf {:world world :generations 2000 :beta 1.0 :seed %}) seeds))(def lines (cr/lineages histories 301))(def rates (cr/block-rates world lines {:replays 8 :seed 99}))(def verdicts (cr/classify rates {:d3-threshold 0.8 :d2-min 1}))(defn r3 [x]
(cond (and (double? x) (Double/isNaN x)) "n/a"
(double? x) (/ (Math/round (* 1000 x)) 1000.0)
:else x))(kind/table
{:column-names ["block" "role" "k" "μ" "constraint" "isolated raw" "isolated constraint" "v0" "v1" "v2"]
:row-vectors (for [v verdicts]
[(:block v) (name (:role v)) (:k-all v) (r3 (:mu-all v)) (r3 (:constraint-all v))
(:iso-raw v) (r3 (:constraint-iso v)) (:v0 v) (:v1 v) (:v2 v)])})| block | role | k | μ | constraint | isolated raw | isolated constraint | v0 | v1 | v2 |
|---|---|---|---|---|---|---|---|---|---|
| 0 | design | 1 | 2304.0 | 1.0 | 0 | n/a | true | false | false |
| 1 | design | 3 | 4403.375 | 0.999 | 14293 | 1.0 | true | true | true |
| 2 | design | 3 | 2281.75 | 0.999 | 13844 | 0.999 | true | true | true |
| 3 | design | 2 | 2330.25 | 0.999 | 14086 | 0.999 | true | true | true |
| 4 | design | 2 | 2323.875 | 0.999 | 14179 | 1.0 | true | true | true |
| 5 | spandrel | 1 | 2304.0 | 1.0 | 0 | n/a | true | false | false |
| 6 | drift | 2363 | 2315.375 | -0.021 | 14044 | -0.017 | false | false | false |
| 7 | drift | 2346 | 2318.375 | -0.012 | 14042 | -0.015 | false | false | false |
| 8 | hitchhiker | 2351 | 2306.0 | -0.02 | 14039 | -0.011 | false | false | false |
| 9 | pleiotropic | 182 | 2314.625 | 0.921 | 1147 | 0.101 | true | true | false |
(into {} (for [k [:v0 :v1 :v2]]
[k {:correct (count (filter (keyword (str (name k) "-correct")) verdicts))
:wrong (mapv :block (remove (keyword (str (name k) "-correct")) verdicts))}])){:v0 {:correct 8, :wrong [5 9]},
:v1 {:correct 8, :wrong [0 9]},
:v2 {:correct 9, :wrong [0]}}Observation III.1.5. Seeds 1 to 40, table above. The found points were substituted 1 to 3 times against 2280 to 4400 raw changes (constraint 0.999 to 1.000). The drift blocks and the hitchhiker have constraint −0.02 to −0.01, so \(k = \mu\) within noise. The spandrel has constraint 0.9996, because it changes only with its conserved source. The pleiotropic trait has constraint 0.92, since 95 % of its mutations are purged for what they do to block 1; its isolated changes are fixed at about the neutral rate (isolated constraint 0.10). With seeds 1 to 20 that value was 0.21, so we raised the count to 40; the v2 verdict is the same either way.
18.3.1 Coupled variation needs an intervention
The failure on block 0 is not a flaw of one reading. Block 0 and its spandrel always change together in the replays, so for the variation they are one unit. The coupling is symmetric: whatever the rates say about block 0 they also say about block 5. The asymmetry lies only in the task, since \(F_\text{real}\) depends on block 0 alone. So no reading of rates, however clever, can tell which of the two carries the design.
- blocks 0 and 5 always change together
- the coupling is symmetric
- whatever rates say about one, they say about the other
- F_real depends on block 0 alone
- the asymmetry lies only here
The replays do find the unit. Two blocks share a unit if every change of either comes with a change of the other:
(def units (cr/covariation-units 10 (:raw (cr/raw-changes world lines 8 99))))units[#{0 5} #{1} #{2} #{3} #{4} #{6} #{7} #{8} #{9}]An intervention breaks the coupling. We change one task of a block and nothing else, a change the step relation cannot make, and ask whether \(F_\text{real}\) drops. In biology this is site-directed mutagenesis as opposed to comparative data. Below is, for the commonest final variant, the share of such single changes that lower \(F_\text{real}\), per block:
(def modal (cv/modal-variant (:landscape world)
(mapcat #(map :variant (peek (:generations %))) histories)))(kind/table
{:column-names ["block" "role" "share of single changes that lower F_real"]
:row-vectors (for [{:keys [index flip]} (d/fine-tuning (:landscape world) modal)]
[index (name (nth cr/roles index)) (r3 flip)])})| block | role | share of single changes that lower F_real |
|---|---|---|
| 0 | design | 1.0 |
| 1 | design | 1.0 |
| 2 | design | 1.0 |
| 3 | design | 1.0 |
| 4 | design | 1.0 |
| 5 | spandrel | 0.0 |
| 6 | drift | 0.0 |
| 7 | drift | 0.0 |
| 8 | hitchhiker | 0.0 |
| 9 | pleiotropic | 0.0 |
- counts changes the step relation makes
- finds the unit of variation
- cannot say which part of a unit carries the design
- changes one task of a block and nothing else
- a change the step relation cannot make
- asks whether F_real drops
Observation III.1.7. Same runs. The replays split the ten blocks into nine units, with block 0 and its spandrel as the one pair. The intervention gives share 1.0 for block 0 and the other small points, and 0.0 for block 5 and every other block.
A first idea was to turn Williams’ burden of proof into a procedure: rates for every unit of variation, plus an intervention inside units of several blocks. It classified all ten blocks, but we wrote it after seeing v1 and v2 fail, and in this toy the intervention alone sorts all ten blocks just as well. So the lesson is simpler. Comparative data can find the unit of variation. Which part of the unit carries the design only an experiment can show.
18.3.2 The sweep
The hitchhiker gets the right verdict, since after its sweep it drifts. What would mislead is its fast rise to fixation. Seed 4 has the latest sweep of the first five seeds:
(let [s (take 301 (cr/sweep-series world (nth histories 3)))]
(kind/plotly
{:data [{:type "scatter" :mode "lines" :name "block 4 found (share of hosts)"
:x (mapv :gen s) :y (mapv :sweep s) :line {:color "#d62728" :width 2}}
{:type "scatter" :mode "lines" :name "hitchhiker, top pattern frequency"
:x (mapv :gen s) :y (mapv :hitchhiker s) :line {:color "#ff7f0e" :width 2}}
{:type "scatter" :mode "lines" :name "drift block 6, top pattern frequency"
:x (mapv :gen s) :y (mapv :drift s) :line {:color "#7f7f7f" :width 2}}]
:layout {:title "A sweep carries the hitchhiker (seed 4, generations 0–300)"
:xaxis {:title "generation"} :yaxis {:title "frequency" :range [-0.02 1.02]}
:height 400}}))(def sweep-timing
(for [h histories
:let [s (cr/sweep-series world h)]]
{:sweep (cr/first-gen s :sweep 0.9) :hitchhiker (cr/first-gen s :hitchhiker 0.8)})){:seeds (count sweep-timing)
:hitchhiker-fixed-within-2-generations-of-sweep
(count (filter #(and (:hitchhiker %) (<= (Math/abs (- (long (:hitchhiker %)) (long (:sweep %)))) 2))
sweep-timing))
:latest-sweep (apply max (map :sweep sweep-timing))}{:seeds 40,
:hitchhiker-fixed-within-2-generations-of-sweep 39,
:latest-sweep 162}Observation III.1.8. Seeds 1 to 40. A sweep means block 4 found in 90 % of the hosts; the hitchhiker counts as fixed when its commonest pattern, at first in 5 of 60 hosts, reaches 80 %. In 39 of 40 seeds it was fixed within two generations of the sweep, in seed 10 some 90 generations later. All sweeps ended by generation 162, before the measured window. The rate tells the hitchhiker from the selected trait. The sweep does not.
- the hitchhiker fixes within two generations of the sweep in 39 of 40 seeds
- its fast rise looks like selection
- after its sweep the hitchhiker drifts: k = μ
- the selected points: constraint ≈ 1
18.4 Summary
- Evolution by natural selection is an instance of the adaptive synthesis task (C5): mutation is unspecific variation (A1′), differential reproduction is selection (A3).
- Explanatory adaptationism (Definition III.1.2) is the design conjecture for biology. Its critics offer no rival: spandrels, developmental constraint and self-organisation fail the alternatives condition (D2); exaptation, drift and hitchhiking explain no design.
- In the critiques experiment (Y6) the planned readings failed: v0 on the spandrel and the pleiotropic trait, v1 and v2 on the spandrel’s source.
- Variation that couples two traits is symmetric. Rates find the unit; only an intervention shows which part carries the design.
18.5 Open problems
- Rebuild the other critics. Exaptation, developmental constraint and self-organisation are sorted in the table, not rebuilt in the toy.
- A rival that works. The design conjecture stands because no rival explains fine-tuning. Is there a mechanism that produces fine-tuning for a task it does not read? See the open problems of post I.5.
- The hitchhiker after its sweep looks like drift. Telling linked from unlinked neutral sites needs recombination (post III.5).
- The threshold 0.8 was fixed before the run but not derived. Since fine-tuning is a degree, a procedure should report the constraint, not a verdict.
18.6 References
- Dawkins, R. (1986). The Blind Watchmaker. Longman. p. 303 as quoted in Godfrey-Smith (2001). (verified: publisher and year; the quotation was checked in Godfrey-Smith, not in the book)
- Godfrey-Smith, P. (2001). Three kinds of adaptationism. In S. H. Orzack & E. Sober (eds.), Adaptationism and Optimality, 335–357. Cambridge University Press. (verified; quotation from the author’s manuscript version)
- Gould, S. J. & Lewontin, R. C. (1979). The spandrels of San Marco and the Panglossian paradigm. Proc. R. Soc. B 205, 581–598. (verified in post 7)
- Gould, S. J. & Vrba, E. S. (1982). Exaptation—a missing term in the science of form. Paleobiology 8, 4–15. doi:10.1017/S0094837300004310 (verified)
- Kauffman, S. A. (1993). The Origins of Order: Self-Organization and Selection in Evolution. Oxford University Press. (verified)
- Kimura, M. (1968). Evolutionary rate at the molecular level. Nature 217, 624–626. (verified in post 7)
- Kimura, M. (1983). The Neutral Theory of Molecular Evolution. Cambridge University Press. (verified in post 7)
- Maynard Smith, J. & Haigh, J. (1974). The hitch-hiking effect of a favourable gene. Genetical Research 23, 23–35. (verified)
- Thompson, D’A. W. (1917). On Growth and Form. Cambridge University Press. (verified)
- Williams, G. C. (1966). Adaptation and Natural Selection. Princeton University Press. (verified: the quotation checked against an excerpt of the book)
source: book2/notebooks/meme_constructor/adaptation/post_iii1_adaptationism.clj