20 How coarse may the constructor be?
(ns meme-constructor.adaptation.post-iii3-coarse-constructor
(:require [scicloj.kindly.v4.kind :as kind]
[meme-constructor.adaptation.coarseness :as c]
[meme-constructor.figures :as fig]))Post III.3 of Part III, “A Constructor Theory of Adaptation”.
The environment that selects must not contain the design it explains, so it is a coarse constructor: in a finite population it sees a fitness difference \(s\) only against the noise of drift, and \(S = 4N_e s\) measures how well. The constraint on a site rises smoothly with \(S\), from noise at \(S \le 0.8\) to nearly 1 at \(S \ge 8\), centred near 2, and small populations lose weakly selected sites first. When the task moves, a lasting excess \(k > \mu\) appears only if it moves on a site faster than a neutral site mutates.
- the selecting environment must not contain the design it explains
- it sees a fitness difference s only against drift
- constraint rises smoothly with S, centred near 2
- noise at S ≤ 0.8, nearly 1 at S ≥ 8
- small populations lose weakly selected sites first
20.1 1. The constructor does not contain the design
This section is about the coarseness of the constructor (AD5). A constructor that contained the design of its product would move the design, not explain it (post 7, section 3). Marletto (2015, §3.3) makes the environment of natural selection a constructor that is “a crude approximation to a constructor: crude enough that it could have arisen by chance and requires no explanation”, under laws “that do not contain the design of biological adaptations” (§2).
Definition III.3.1 (Non-containment). Let an adaptive synthesis task (C5) produce an abstract constructor K for T.
It comes in two versions:
- the process explains K relative to its constructors
- neither the variation nor the elimination constructor is itself a constructor for T
- elimination may depend on how accurately T is performed (A3), not on which constructor performs it
- in addition, the constructors of the process need no explanation of their own as designs
- crude enough to arise from generic resources under no-design laws
The strong version is needed for the origin of life, where nothing may be presupposed. To explain a particular design, the relative version suffices. Explaining the eye may presuppose a genome and a developmental system. These are designs, but neither contains the design of the eye. Creativity is a genetic design, but it contains the design of no particular idea. Post III.6 takes that up.
Coarseness as a quantity. Elimination sees how accurately T is performed only with finite resolution. In a finite population, chance in who reproduces, drift, masks small differences in fitness. The resolution is the scaled selection coefficient
\[S = 4 N_e s,\]
where \(s\) is the fitness advantage of the better allele and \(N_e\) the effective size of a diploid population. It measures selection against drift. Selection is usually said to outweigh drift roughly from \(S > 1\) (Kimura 1962; Ohta 1973, 1992). This threshold belongs to the process, not to the definition of design: fine-tuning is a degree of the product (post I.5), and \(S\) says which fine-tuning a population can hold.
- fine-tuning is a degree (post I.5)
- no process, no population size
- selection against drift
- says which fine-tuning a population can hold
Proposition III.3.2 (Fixation probability; Kimura 1962). Consider genic selection, where allele A has a constant advantage \(s\), in a randomly mating population of \(N\) individuals, and the diffusion approximation. The probability that A becomes fixed from frequency \(p\) is (Kimura 1962, eq. 8 and eq. 11)
\[ \begin{aligned} u(p) &= \frac{1 - e^{-4Nsp}}{1 - e^{-4Ns}},\\ u\!\left(\tfrac{1}{2N}\right) &\approx \frac{2s}{1 - e^{-4Ns}}. \end{aligned} \]
Kimura notes that the second formula “is good even for negative s”. With an effective size, \(N\) becomes \(N_e\) in the variance of the change in frequency, which gives the usual form.
Relative to a neutral mutant, whose fixation probability is \(1/(2N)\), a new mutant is substituted faster by a factor \(r(S)\). For an advantageous and a deleterious mutant,
\[r(S) = \frac{S}{1 - e^{-S}}, \qquad r(-S) = \frac{S}{e^S - 1},\]
and \(r(0) = 1\).
Proposition III.3.3 (A single site; known). Take a site with two states, the design state and one alternative worse by the scaled coefficient \(S\). Mutation goes both ways at rate \(\mu\), and each substitution is completed before the next mutation arises (\(N\mu \ll 1\), weak mutation). Then the fixed state of the population is a two-state Markov chain that leaves the design state at rate \(\mu\, r(-S)\) and returns at rate \(\mu\, r(S)\). In the stationary state
\[ \begin{aligned} P(\text{design state}) &= \frac{1}{1 + e^{-S}},\\ \frac{k}{\mu} &= \frac{2\, r(S)\, r(-S)}{r(S) + r(-S)} = \frac{S}{\sinh S}, \end{aligned} \]
where \(k\) is the substitution rate at the site. This is the classical selection–mutation–drift balance at a two-allele site, as Bulmer (1991) used it for preferred codons; Sella & Hirsh (2005) develop the factor \(e^S\) for whole genotypes as an analogy with statistical physics. It follows from Proposition III.3.2, since \(r(S)/r(-S) = e^S\). c/window-k-over-mu gives the expectation over a finite window that starts in the design state.
Corollary III.3.4 (Where selection holds a site). The constraint of a site under Proposition III.3.3 is
\[ \begin{aligned} 1 - \frac{k}{\mu} &= 1 - \frac{S}{\sinh S},\\ &\approx \frac{S^2}{6} \quad (S \text{ small}), \qquad \approx 1 - 2S e^{-S} \quad (S \text{ large}). \end{aligned} \]
It is 0.15 at \(S = 1\), one half at \(S \approx 2.18\), and 0.85 at \(S = 4\). So \(S = 1\) marks where selection begins to show in the rate, not where a design is held.
(c/half-point)2.1773189849653063(kind/table
{:column-names ["S = 4 N_e s" "P(design state)" "stationary 1 - k/μ"]
:row-vectors (vec (for [s [0.25 0.5 1.0 2.0 2.18 4.0 8.0]]
(let [{:keys [p-design k-over-mu]} (c/stationary s)]
[s (format "%.3f" p-design) (format "%.3f" (- 1.0 k-over-mu))])))})| S = 4 N_e s | P(design state) | stationary 1 - k/μ |
|---|---|---|
| 0.25 | 0.562 | 0.010 |
| 0.5 | 0.622 | 0.040 |
| 1.0 | 0.731 | 0.149 |
| 2.0 | 0.881 | 0.449 |
| 2.18 | 0.898 | 0.501 |
| 4.0 | 0.982 | 0.853 |
| 8.0 | 1.000 | 0.995 |
The assumptions, each of which the experiment below can break: small \(s\), weak mutation, independent sites, constant \(N_e\), two states per site. So how much design a lineage can carry depends on \(N_e\): shrink the population and the weakly selected sites go first. This is the nearly neutral theory (Ohta 1973), read as a statement about which fine-tuning survives.
20.2 2. The population-size threshold experiment
Conjecture III.3.5 (Population-size threshold experiment (Y4)). In a toy with explicit \(N_e\) and a selection coefficient per site, the constraint \(1 - k/\mu\) of a site rises from about 0 to about 1 near \(4N_e s \approx 1\). Plotted against \(4N_e s\), the curves for different \(N\) fall on one another. Plotted against \(s\) alone, they do not. Refutation: the constraint shows no relation to \(N_e\).
The toy. A variant is a bitmask of 60 sites. Site \(i\) adds \(\sigma_i\) to the log-fitness when it is in its design state, so fitness is multiplicative. The step relation flips each site independently with probability \(u\). It never reads fitness, so the unspecific-variation condition (A1′) holds. Reproduction is Wright-Fisher: a fixed number \(N\) of hosts, each child from a parent drawn with weight \(e^{F}\). We reuse run-wf of post III.1 for this, and lineage and site-counts of post 7 for Kimura’s measure along the line of descent.
The population is haploid with \(N\) copies. The mean and variance of the change in frequency are \(\sigma x(1-x)\) and \(x(1-x)/N\), so the exponent of Kimura’s formula is \(2N\sigma\). That is his \(4Ns\) for \(N/2\) diploid individuals. So in the toy
\[S = 4 N_e s = 2 N \sigma, \qquad N_e = N/2.\]
Ten levels of \(\sigma\) from 0 to 0.32 with six sites each, and \(N \in \{10, 30, 100\}\), cover \(S\) from 0.025 to 64. The line of descent of host 0 is cut \(10N\) generations before the end. Before the cut it is ancestral to the whole final population, so its changes are substitutions. Results are cached in results/postIII3/.
(def main-opts
{:ns [10 30 100] :seeds [1 2 3 4]
:sigmas-levels [0.0 0.00125 0.0025 0.005 0.01 0.02 0.04 0.08 0.16 0.32]
:sites-per-level 6 :u 5.0e-4 :generations 30000 :tail-factor 10})(def y4 (c/cached "results/postIII3/y4-main.edn" main-opts c/y4-sweep))(def colours {10 "#1b9e77" 30 "#d95f02" 100 "#7570b3"})(defn curve [s-min s-max]
(let [xs (map #(Math/pow 10 %) (range (Math/log10 s-min) (Math/log10 s-max) 0.02))]
{:type "scatter" :mode "lines" :name "prediction 1 − S/sinh S"
:line {:color "#444" :dash "dash"}
:x (vec xs) :y (mapv #(- 1.0 (:k-over-mu (c/stationary %))) xs)}))(defn constraint-plot [rows x-key x-title title pred?]
(kind/plotly
{:data (cond-> (vec (for [[n rs] (group-by :n (filter #(pos? (:sigma %)) rows))]
{:type "scatter" :mode "markers" :name (str "N = " n)
:marker {:color (colours n "#000") :size 9}
:error_y {:type "data" :array (mapv :se rs) :visible true}
:x (mapv x-key rs) :y (mapv :constraint rs)}))
pred? (conj (curve 0.02 70)))
:layout {:title title :height 420
:xaxis {:title x-title :type "log"}
:yaxis {:title "1 − k/μ" :range [-0.2 1.1]}
:shapes [{:type "line" :x0 1 :x1 1 :y0 0 :y1 1 :yref "paper"
:line {:dash "dot" :color "#999"}}]}}))(constraint-plot (:pooled y4) :S "S = 4 N_e s = 2 N σ"
"Constraint against the scaled selection coefficient" true)(constraint-plot (:pooled y4) :sigma "σ (selection coefficient per site)"
"The same data against σ alone" false)(kind/table
{:column-names ["N" "σ" "S" "k" "μ-expected" "1 − k/μ" "s.e. (seeds)"
"predicted" "time in design state" "predicted"]
:row-vectors (vec (for [r (:pooled y4)]
[(:n r) (:sigma r) (format "%.3f" (:S r)) (:k r) (format "%.1f" (:mu r))
(format "%.2f" (:constraint r)) (format "%.2f" (:se r))
(format "%.2f" (:pred-constraint r))
(format "%.2f" (:in-design r)) (format "%.2f" (:pred-in-design r))]))})| N | σ | S | k | μ-expected | 1 − k/μ | s.e. (seeds) | predicted | time in design state | predicted |
|---|---|---|---|---|---|---|---|---|---|
| 10 | 0.0 | 0.000 | 340 | 358.8 | 0.05 | 0.05 | 0.00 | 0.49 | 0.52 |
| 10 | 0.00125 | 0.025 | 327 | 358.8 | 0.09 | 0.03 | 0.00 | 0.49 | 0.52 |
| 10 | 0.0025 | 0.050 | 320 | 358.8 | 0.11 | 0.03 | 0.00 | 0.54 | 0.53 |
| 10 | 0.005 | 0.100 | 346 | 358.8 | 0.04 | 0.02 | 0.00 | 0.60 | 0.54 |
| 10 | 0.01 | 0.200 | 395 | 358.8 | -0.10 | 0.06 | 0.01 | 0.59 | 0.56 |
| 10 | 0.02 | 0.400 | 328 | 358.8 | 0.09 | 0.06 | 0.03 | 0.58 | 0.61 |
| 10 | 0.04 | 0.800 | 328 | 358.8 | 0.09 | 0.07 | 0.11 | 0.66 | 0.70 |
| 10 | 0.08 | 1.600 | 242 | 358.8 | 0.33 | 0.04 | 0.33 | 0.84 | 0.84 |
| 10 | 0.16 | 3.200 | 118 | 358.8 | 0.67 | 0.02 | 0.74 | 0.95 | 0.96 |
| 10 | 0.32 | 6.400 | 14 | 358.8 | 0.96 | 0.01 | 0.98 | 1.00 | 1.00 |
| 30 | 0.0 | 0.000 | 325 | 356.4 | 0.09 | 0.04 | 0.00 | 0.48 | 0.52 |
| 30 | 0.00125 | 0.075 | 353 | 356.4 | 0.01 | 0.01 | 0.00 | 0.55 | 0.53 |
| 30 | 0.0025 | 0.150 | 364 | 356.4 | -0.02 | 0.06 | 0.01 | 0.55 | 0.55 |
| 30 | 0.005 | 0.300 | 369 | 356.4 | -0.04 | 0.05 | 0.02 | 0.56 | 0.59 |
| 30 | 0.01 | 0.600 | 385 | 356.4 | -0.08 | 0.10 | 0.06 | 0.61 | 0.66 |
| 30 | 0.02 | 1.200 | 309 | 356.4 | 0.13 | 0.03 | 0.21 | 0.75 | 0.78 |
| 30 | 0.04 | 2.400 | 190 | 356.4 | 0.47 | 0.01 | 0.57 | 0.88 | 0.92 |
| 30 | 0.08 | 4.800 | 42 | 356.4 | 0.88 | 0.03 | 0.92 | 0.99 | 0.99 |
| 30 | 0.16 | 9.600 | 0 | 356.4 | 1.00 | 0.00 | 1.00 | 1.00 | 1.00 |
| 30 | 0.32 | 19.200 | 0 | 356.4 | 1.00 | 0.00 | 1.00 | 1.00 | 1.00 |
| 100 | 0.0 | 0.000 | 382 | 348.0 | -0.10 | 0.06 | 0.00 | 0.54 | 0.52 |
| 100 | 0.00125 | 0.250 | 339 | 348.0 | 0.03 | 0.04 | 0.01 | 0.57 | 0.58 |
| 100 | 0.0025 | 0.500 | 323 | 348.0 | 0.07 | 0.01 | 0.05 | 0.61 | 0.64 |
| 100 | 0.005 | 1.000 | 308 | 348.0 | 0.11 | 0.04 | 0.16 | 0.67 | 0.74 |
| 100 | 0.01 | 2.000 | 256 | 348.0 | 0.26 | 0.06 | 0.45 | 0.78 | 0.88 |
| 100 | 0.02 | 4.000 | 135 | 348.0 | 0.61 | 0.02 | 0.85 | 0.94 | 0.98 |
| 100 | 0.04 | 8.000 | 23 | 348.0 | 0.93 | 0.02 | 0.99 | 1.00 | 1.00 |
| 100 | 0.08 | 16.000 | 8 | 348.0 | 0.98 | 0.00 | 1.00 | 1.00 | 1.00 |
| 100 | 0.16 | 32.000 | 2 | 348.0 | 0.99 | 0.01 | 1.00 | 1.00 | 1.00 |
| 100 | 0.32 | 64.000 | 0 | 348.0 | 1.00 | 0.00 | 1.00 | 1.00 | 1.00 |
“Predicted” is the window expectation of Proposition III.3.3. The standard error is over the four seeds.
Observation III.3.6. Seeds 1 to 4, \(u = 5 \cdot 10^{-4}\), 30 000 generations, first plot and table.
- For \(S \le 0.8\) the constraint lies between −0.10 and 0.11 at every \(N\). The neutral sites (\(\sigma = 0\)) give −0.10 to 0.09, so this is the noise level.
- For \(S \ge 8\) it is at least 0.93, and 1.00 for \(S \ge 9.6\) at \(N = 30\).
- In between it rises smoothly. At \(N\) = 10 and 30 it stays within about 0.1 of the prediction, for example 0.67 at \(S = 3.2\) and 0.88 at \(S = 4.8\).
- At \(N = 100\) the constraint lags the prediction: 0.26 against 0.45 at \(S = 2\), and 0.61 against 0.85 at \(S = 4\). The time in the design state lags as well, 0.94 against 0.98.
Observation III.3.7 (No collapse against σ). Same runs, second plot. At \(\sigma = 0.04\) the constraint is 0.09, 0.47 and 0.93 for \(N\) = 10, 30 and 100. At \(\sigma = 0.02\) it is 0.09, 0.13 and 0.61. So the same fine-tuning is held by a large population and lost by a small one. The refutation condition of the population-size threshold experiment (Y4) did not occur. The small population loses the weakly selected sites first: at \(N = 10\) everything below \(\sigma = 0.08\) is noise, at \(N = 100\) the constraint is 0.26 already at \(\sigma = 0.01\).
The rise is not a jump near \(S = 1\), as the conjecture said, but a smooth rise over a factor of 10 in \(S\), centred near 2, as Proposition III.3.3 predicts. The fault lay in how we first worded the conjecture.
20.2.1 The gap at N = 100
At \(N = 100\) the constraint lags. Two causes were plausible: linkage, since all 60 sites sit on one asexual genome and selection at other sites lowers the effective size seen by each (background selection; Charlesworth, Morgan & Charlesworth 1993), or the weak-mutation assumption, since at \(N = 100\) each site receives \(N u = 0.05\) new mutants per generation. We added two checks after seeing the gap.
Check 1: \(N_e\) from neutral sites. In a haploid population with symmetric mutation, the law of a neutral site’s frequency is Beta(\(a\), \(a\)), where \(a = 2 N_e u\). Its expected heterozygosity is
\[H = \frac{a}{1 + 2a}.\]
We solve this for \(N_e\) and measure \(H\) on the six neutral sites. Here \(N_e\) is on the haploid scale, the scale of \(N\).
(kind/table
{:column-names ["N" "neutral H" "N_e observed / N"]
:row-vectors (mapv (fn [{:keys [n h] :as r}] [n (format "%.4f" h) (format "%.2f" (:ne-obs/n r))]) (:ne y4))})| N | neutral H | N_e observed / N |
|---|---|---|
| 10 | 0.0092 | 0.94 |
| 30 | 0.0251 | 0.88 |
| 100 | 0.0755 | 0.89 |
Observation III.3.8. Same runs. The neutral sites give an effective size of 0.88 to 0.94 times \(N\) at all three sizes. That fits background selection, but it is similar at every \(N\) and far too small for the gap at \(N = 100\), which would need about half of \(N\).
Check 2: a lower mutation rate. The same experiment at \(N = 100\) with \(u = 10^{-4}\), so \(N u = 0.01\), over 100 000 generations and seeds 1 to 3:
(def low-u-opts
{:ns [100] :seeds [1 2 3]
:sigmas-levels [0.0 0.0025 0.005 0.01 0.02 0.04]
:sites-per-level 6 :u 1.0e-4 :generations 100000 :tail-factor 10})(def y4-low-u (c/cached "results/postIII3/y4-low-u.edn" low-u-opts c/y4-sweep))(kind/plotly
{:data [(curve 0.2 20)
{:type "scatter" :mode "markers" :name "N = 100, u = 5·10⁻⁴"
:marker {:color (colours 100) :size 9}
:x (mapv :S (filter #(and (= 100 (:n %)) (pos? (:sigma %)) (<= (:S %) 16)) (:pooled y4)))
:y (mapv :constraint (filter #(and (= 100 (:n %)) (pos? (:sigma %)) (<= (:S %) 16)) (:pooled y4)))}
{:type "scatter" :mode "markers" :name "N = 100, u = 10⁻⁴"
:marker {:color "#e7298a" :size 9 :symbol "diamond"}
:error_y {:type "data" :array (mapv :se (filter #(pos? (:sigma %)) (:pooled y4-low-u))) :visible true}
:x (mapv :S (filter #(pos? (:sigma %)) (:pooled y4-low-u)))
:y (mapv :constraint (filter #(pos? (:sigma %)) (:pooled y4-low-u)))}]
:layout {:title "N = 100 at two mutation rates" :height 400
:xaxis {:title "S = 2 N σ" :type "log"}
:yaxis {:title "1 − k/μ" :range [-0.2 1.1]}}})(kind/table
{:column-names ["σ" "S" "k" "1 − k/μ" "s.e." "predicted" "1 − k/μ by fixations"]
:row-vectors (vec (for [r (:pooled y4-low-u)]
[(:sigma r) (:S r) (:k r) (format "%.2f" (:constraint r)) (format "%.2f" (:se r))
(format "%.2f" (:pred-constraint r)) (format "%.2f" (:constraint-fix r))]))})| σ | S | k | 1 − k/μ | s.e. | predicted | 1 − k/μ by fixations |
|---|---|---|---|---|---|---|
| 0.0 | 0.0 | 179 | -0.00 | 0.09 | 0.00 | 0.03 |
| 0.0025 | 0.5 | 176 | 0.01 | 0.03 | 0.05 | 0.07 |
| 0.005 | 1.0 | 156 | 0.12 | 0.09 | 0.16 | 0.20 |
| 0.01 | 2.0 | 126 | 0.29 | 0.12 | 0.46 | 0.29 |
| 0.02 | 4.0 | 30 | 0.83 | 0.03 | 0.86 | 0.84 |
| 0.04 | 8.0 | 4 | 0.98 | 0.01 | 0.99 | 0.99 |
(:ne y4-low-u)[{:n 100,
:h 0.019565155935786584,
:ne-obs 101.80962193684876,
:ne-obs/n 1.0180962193684875}]Observation III.3.9. Seeds 1 to 3, \(u = 10^{-4}\). The constraint at \(N = 100\) is 0.13, 0.29, 0.83 and 0.98 at \(S\) = 1, 2, 4 and 8, against a prediction of 0.16, 0.46, 0.86 and 0.99. The value at \(S = 2\) is still low, but the seeds scatter widely there (standard error 0.12). The neutral sites now give \(N_e\) equal to \(N\). So the gap in Observation III.3.6 comes mainly from \(N u\) not being small, not from linkage. The last column counts changes of the population’s monomorphic state instead of changes along the line of descent. It agrees within 0.1.
- all 60 sites on one asexual genome
- check 1: N_e from neutral sites is 0.88–0.94 of N
- fits background selection, but far too small: the gap would need about half
- N·u = 0.05 new mutants per site and generation
- check 2: u = 10⁻⁴, N·u = 0.01
- constraint near the prediction, S = 2 still low; N_e = N
A possible mechanism, unproved: with more mutation, a deleterious clone that has drifted up more often receives a back mutation before it is lost, so the population passes through the deleterious state without being monomorphic for it, a path the two-state chain lacks.
20.3 3. Moving tasks
This section is about moving tasks (AD6). In coevolution and niche construction the population changes its own environment (Odling-Smee, Laland & Feldman 2003). With it, it changes the T by which the selection condition (A3) ranks variants. The environment still counts as a constructor in Marletto’s sense. What it must retain is its ability to vary and to select, not its state.
Definition III.3.10 (Design relative to T(t)). Let the task be a function \(T(t)\) of time. K is a design at time t if it meets the knowledge, alternatives and fine-tuning conditions (D1–D3) for \(T(t)\). K is a persistent design over an interval if it is a design at every time in it.
A design at time t can stop being one without changing at all, because T moved away from it.
Conjecture III.3.11 (Persistent designs are anchored in physics). Designs that persist over many shifts of T are tied to a part of T that does not shift: to physics rather than to other lineages. The haem pocket must bind oxygen whatever the predators do. This is the external anchor of post 4 on the side of biology, and it is why a small point fixed by physics is found again by independent lineages (post 5). Test: compare the constraint at sites that interact with physics (ligand pockets, such as the haem contacts of post III.2) with sites that interact with another evolving lineage (antigen-binding sites of MHC, where Hughes & Nei (1988) found an excess). Refutation: interface sites as conserved as physically anchored ones over long spans. Not run.
Proposition III.3.12 (Arms race as a steady state; a sketch). Let a site’s design state flip every \(P\) generations, and let each shift be followed, with probability \(f\), by a substitution to the new design state before the next shift. Assume strong selection, so that apart from these substitutions the site stays put. Over many periods,
\[\frac{k}{\mu} \approx \frac{f}{\mu P}.\]
So \(k > \mu\) holds as a steady state only if \(\mu P < f \le 1\), that is, only if T moves on the site faster than a neutral site mutates.
Sketch. A site that adapted after a shift contributes one substitution per period. A site that did not adapt is back in its design state after the next flip, at no cost in substitutions. All other substitutions are rare under strong selection. Divide by \(\mu P\).
The toy. Twenty sites with \(\sigma = 0.1\) and \(N = 50\), so \(S = 10\), and \(u = 5 \cdot 10^{-4}\). Ten sites keep their task. On the other ten the design state flips every \(P\) generations. The epochs are chained with run-wf, and the line of descent runs across all shifts. Seeds 1 to 3, pooled. Two periods, the same total time of 12 000 generations: \(P = 500\) (\(\mu P = 0.25\)) and \(P = 4000\) (\(\mu P = 2\)).
(def moving-base {:n 50 :u 5e-4 :sigma 0.1 :n-fixed 10 :n-moving 10 :window 50})(def fast (c/moving-pooled (assoc moving-base :period 500 :epochs 24) [1 2 3]))(def slow (c/moving-pooled (assoc moving-base :period 4000 :epochs 3) [1 2 3]))(kind/plotly
{:data [{:type "scatter" :mode "lines+markers" :name "shifting sites"
:line {:color "#d95f02"}
:x (mapv :since-shift (:phase fast)) :y (mapv :moving (:phase fast))}
{:type "scatter" :mode "lines+markers" :name "fixed sites"
:line {:color "#1b9e77"}
:x (mapv :since-shift (:phase fast)) :y (mapv :fixed (:phase fast))}]
:layout {:title "P = 500: k/μ after a shift, pooled over 22 shifts and 3 seeds" :height 400
:xaxis {:title "generations since the last shift (window start)"}
:yaxis {:title "k / μ"}
:shapes [{:type "line" :x0 0 :x1 1 :xref "paper" :y0 1 :y1 1
:line {:dash "dash" :color "#aaa"}}]}})(kind/table
{:column-names ["period P" "μ P" "k/μ shifting sites" "k/μ fixed sites" "bound 1/(μP)"]
:row-vectors (vec (for [[p r] [[500 fast] [4000 slow]]]
[p (:mu-period r) (format "%.2f" (:moving (:totals r)))
(format "%.2f" (:fixed (:totals r))) (format "%.2f" (/ 1.0 (:mu-period r)))]))})| period P | μ P | k/μ shifting sites | k/μ fixed sites | bound 1/(μP) |
|---|---|---|---|---|
| 500 | 0.25 | 2.81 | 0.07 | 4.00 |
| 4000 | 2.0 | 0.37 | 0.02 | 0.50 |
Observation III.3.13. Seeds 1 to 3. With \(P = 500\) the shifting sites have \(k/\mu = 2.8\) over the run (seeds 2.7 to 3.0), the fixed sites 0.07. After a shift the rate is about 5 for 100 generations and falls to about 1 by the end of the period, so about 70 % of shifts are followed by adaptation. With \(P = 4000\) each shift gives a burst of the same size, yet over the run the shifting sites stay below \(\mu\) (\(k/\mu = 0.37\)). Both fit Proposition III.3.12.
- T moves faster than a neutral site mutates
- a lasting excess; about 70 % of shifts followed by adaptation
- each shift gives a burst of the same size
- but the mean stays below μ
This bears on the positive-selection experiment (Y5) of post III.2. There a single change of T produced no \(k > \mu\), and a moving T was left untested. Here mutations are rare (\(N u = 0.025\)), so every adaptive step is a new substitution and a burst appears. Hughes & Nei (1988) read their excess as overdominant selection, a different mechanism from our periodic flip. The toy is an analogue, not a model of MHC.
20.4 4. Selection against drift
In a Wright–Fisher population one finite \(N\) does two things. It gives the process competition (A2), since a birth that goes to one host does not go to another, and it makes the sampling of parents noisy, which is drift. What decides whether a design is held is neither of them alone but how strongly selection reads the task against that noise: \(S\).
- A small population has competition and meets the selection condition (A3), yet holds a site with \(S\) below about 2 only weakly.
- As \(N\) grows, drift vanishes and every fine-tuning is held. That fits Observation 7.12 of post 7, where a pool without removal still held the small points.
- In one asexual genome the selected sites lowered each other’s effective size by about a tenth (Observation III.3.8), as background selection would. The unit on which selection acts is the whole genome. Post III.5 asks what sex, which changes that unit, does.
20.5 Summary
- The constructor of an adaptive process must not contain the design. The relative version suffices for a particular design; Marletto’s strong version is needed for the origin of life.
- Coarseness is the scaled selection coefficient \(S = 4N_e s\), which measures selection against drift. For one site the classical balance (Proposition III.3.3) gives the constraint \(1 - S/\sinh S\): 0.15 at \(S = 1\), one half at \(S \approx 2.18\).
- In the toy the constraint rises from noise to about 1 between \(S\) of 0.8 and 8, and small populations lose weakly selected sites first (Y4). At \(N u = 0.05\) it lags the prediction; at \(N u = 0.01\) it fits.
- With a moving task, \(k > \mu\) lasts only when \(\mu P < 1\). Slower shifts give bursts but a mean below \(\mu\) (Proposition III.3.12).
20.6 Open problems
- The gap at N = 100. The proposed mechanism is not proved, and at \(N u = 0.01\) the value at \(S = 2\) is still 0.17 low (1.4 standard errors).
- Background selection was measured, not compared with the formula of Charlesworth et al. (1993).
- Anchored designs. Conjecture III.3.11 needs sites classified by what they interact with, on real proteins.
- Ever new states. Proposition III.3.12 is a sketch for a task that flips between two states, with \(f\) taken as given.
20.7 References
- Bulmer, M. (1991). The selection-mutation-drift theory of synonymous codon usage. Genetics 129, 897–907. (verified: bibliographic data and the subject of the paper)
- Charlesworth, B., Morgan, M. T. & Charlesworth, D. (1993). The effect of deleterious mutations on neutral molecular variation. Genetics 134, 1289–1303. (verified)
- Hughes, A. L. & Nei, M. (1988). Pattern of nucleotide substitution at major histocompatibility complex class I loci reveals overdominant selection. Nature 335, 167–170. (verified)
- Kimura, M. (1962). On the probability of fixation of mutant genes in a population. Genetics 47, 713–719. doi:10.1093/genetics/47.6.713 (verified; eq. 8, 10 and 11 and the remark on negative s checked against the paper)
- Marletto, C. (2015). Constructor theory of life. J. R. Soc. Interface 12: 20141226. arXiv:1407.0681. §2 (no-design laws), §3.3 (the environment as a crude constructor). (verified; both quotations checked against the arXiv text)
- Odling-Smee, F. J., Laland, K. N. & Feldman, M. W. (2003). Niche Construction: The Neglected Process in Evolution. Monographs in Population Biology 37. Princeton University Press. (verified)
- Ohta, T. (1973). Slightly deleterious mutant substitutions in evolution. Nature 246, 96–98. (verified)
- Ohta, T. (1992). The nearly neutral theory of molecular evolution. Annual Review of Ecology and Systematics 23, 263–286. (verified in post 7)
- Sella, G. & Hirsh, A. E. (2005). The application of statistical physics to evolutionary biology. PNAS 102, 9541–9546. doi:10.1073/pnas.0501865102 (verified)
source: book2/notebooks/meme_constructor/adaptation/post_iii3_coarse_constructor.clj