Lesson 9

A

Locked — confirm your name above to begin.

Mendel was a monk who had studied physics and made a pea garden. He examined a number of traits that he thought “bred true”, and found consistent ratios in the offspring he made. He did back-cross experiments, where he bred children with their parents, and different lines with one another.

He figured out the underlying model of meiosis, essentially, in diploid species — to explain the ratios of phenotypes he observed in his pea plants. He figured out that for his traits, each plant started with two copies of a gene, though he didn't know the word, and randomly passed one copy on to each offspring. He figured out the phenotypes when driven by one of these copies. And he figured out that the copies did not have to be equally responsible for the phenotype.

Importantly, Mendel didn't know about the cell's nucleus. He didn't know about mitosis. He didn't know the mechanics of meiosis. He had never encountered the word chromosome, because it functionally didn't exist in the popular knowledge. He didn't know there was a molecule in each cell that drove inheritance. He didn't know that the particles he was looking at — what we would call genes — were connected to each other in a strand.

When you learn Mendel's rules of segregation and independent assortment now, you smuggle in everything you know about cells and chromosomes. Which would be fine, except there is a danger of over-extrapolating.

In the cell below I show you two made-up chromosomes, and we are going to highlight loci on them as little boxes. We are going to follow one locus for part A, and it is going to be labelled A. There is a big A allele and a little a allele. Neither is dominant, neither is recessive. They are just labelled big A and little a so we can keep track of them. They are two different alleles for the same locus, the same gene, within the cell.

  • One cell, two copies of the long chromosome and two copies of the short chromosome.
  • Four loci on each chromosome. One locus is labelled, with two alleles: big A and little a.
  • Replicate the cell, then divide the genome twice to make gametes.
  • One drag will take a whole side of the cell — a copy of each chromosome — to produce the next line.
  • Produce the gametes, then collect them, and answer the question.
  • Then draw gametes at random, and answer the question.
  • Then fuse gametes into an embryo, draw many embryos, and answer the question.

To open Stage B

  • Run one meiosis by hand, then answer the question under it. not yet
  • Draw 500 gametes and watch the share carrying big A. 0 of 500
  • Fuse two gametes by hand, then build 200 embryos. 0 of 200

R code

# one cell: two long chromosomes, two short. 1 = big letter, 0 = little.long  <- rbind(c(1,1,1,1), c(0,0,0,0))short <- rbind(c(1,1,1,1), c(0,0,0,0))# replication: every chromosome becomes two identical chromatidsdup <- function(m) m[c(1,1,2,2), ]# division I: the two homologs go to opposite poles, each# chromosome picking its own side. division II: the sisters split.divide <- function(m) {  d <- dup(m); p <- if (runif(1) < .5) 1:4 else c(3,4,1,2)  d[c(p[sample(2)], p[2 + sample(2)]), ]}meiosis <- function() {  L <- divide(long); S <- divide(short)  lapply(1:4, function(i) list(long = L[i, ], short = S[i, ]))}# one gamete at random, five hundred timesg <- replicate(500, meiosis()[[sample(4, 1)]]$long[1])cumsum(g) / seq_along(g)      # running share carrying big A# two gametes fuse. 2 = AA, 1 = Aa, 0 = aaembryo <- function() meiosis()[[sample(4,1)]]$long[1] + meiosis()[[sample(4,1)]]$long[1]table(replicate(200, embryo()))

B

Solve Stage A to unlock this section.

Your cells don't know what a gene is, because your cells don't know anything. We draw little boxes on the genome to represent loci, based on what we are interested in — and when there are multiple different sequences that can occur at a given locus, we call those different sequences alleles.

But knowing more than Mendel does, we are aware that genomes have a physical connectivity, and that the loci, the genes, we are studying are arranged on chromosomes.

We are going to essentially repeat part A, but now we are going to label every locus with two alleles.

  • Same setup, but now every locus is labelled.
  • One round of meiosis will produce four gametes.
  • Draw the gametes and look at the frequencies of different sets of loci.
  • Fuse the gametes into embryos and look at the frequency of chromosome versions — and still, of our original focal locus, the A locus.

To open Stage C

  • Run one meiosis by hand, then answer the question under it. not yet
  • Draw 500 gametes and log every version that turns up. 0 of 500
  • Fuse two gametes by hand, then build 200 embryos. 0 of 200

R code

# same cell, every spot read out now. 1 = big letter, 0 = little.long  <- rbind(c(1,1,1,1), c(0,0,0,0))   # ABCD / abcdshort <- rbind(c(1,1,1,1), c(0,0,0,0))   # EFGH / efghdup <- function(m) m[c(1,1,2,2), ]# division I: the two homologs go to opposite poles, each# chromosome picking its own side. division II: the sisters split.divide <- function(m) {  d <- dup(m); p <- if (runif(1) < .5) 1:4 else c(3,4,1,2)  d[c(p[sample(2)], p[2 + sample(2)]), ]}meiosis <- function() {  L <- divide(long); S <- divide(short)  lapply(1:4, function(i) list(long = L[i, ], short = S[i, ]))}# every long-chromosome version that turns up in 500 gametesv <- replicate(500, paste(meiosis()[[sample(4,1)]]$long, collapse = ""))table(v)gam <- function() meiosis()[[sample(4,1)]]$longe <- replicate(200, gam()[1] + gam()[1])table(e)                       # 2 = AA, 1 = Aa, 0 = aa

C

Solve Stage B to unlock this section.

When chromosomes are inherited completely together, it doesn't make sense to talk about them as separate loci evolutionarily. Different parts of a chromosome may make different proteins, but if all of those proteins are inherited as a set, then they can't be selected for independently. In asexually reproducing organisms, the entire genome functions as a set.

In sexually reproducing organisms we scramble our genomes. Between individuals, by having a partner with whom an embryo is produced, combining our genome with another. And within a genome, when we make the gametes, through a process called recombination.

The upside is that individual parts can be selected differently, such that our chromosomes can in fact be made of separate loci, to a certain extent. The downside is that offspring are not as closely related to their parents as they are in asexual reproduction. It is a trade-off between what is inherited and what is not from an individual. Sexual reproduction reduces the heritability from parent to offspring, which is a rather large cost.

For the exercises below you will place recombination locations along the long and short chromosomes, and you can control how many recombinations to place — though for this exercise, unlike in reality, the long and short chromosome will have the exact same number of recombination locations. You will then proceed as you did in parts A and B.

  • The same cell, the same labels.
  • You will do this three times: once placing a single recombination on each chromosome, once placing two, and once placing three.
  • Each time, the same question about what came out of it.
  • Everything past a mark swaps between the two chromatids it sits between.
  • Where the marks go decides which loci still travel together.
  • Then the same three steps again.

To open Stage D

  • Drop the marks into gaps, run one meiosis, then answer the question under it. not yet
  • Draw 500 gametes and log every version that turns up. 0 of 500
  • Fuse two gametes by hand, then build 200 embryos. 0 of 200

R code

long  <- rbind(c(1,1,1,1), c(0,0,0,0))short <- rbind(c(1,1,1,1), c(0,0,0,0))dup <- function(m) m[c(1,1,2,2), ]# the slider, and the gaps you dropped the marks inton  <- 1                # crossovers per chromosomekL <- c()kS <- c()# every crossing on a chromosome joins the same two chromatids -- the# pair facing each other across the copies, rows 2 and 3. So two of them# trade the stretch between the cuts back, and rows 1 and 4 stay whole.rip <- function(M, ks) {  for (k in ks) { s <- k:4; t <- M[2, s]; M[2, s] <- M[3, s]; M[3, s] <- t }  M}# division I: the two homologs go to opposite poles, each# chromosome picking its own side. division II: the sisters split.divide <- function(m, ks) {  d <- rip(dup(m), ks)  p <- if (runif(1) < .5) 1:4 else c(3,4,1,2)  d[c(p[sample(2)], p[2 + sample(2)]), ]}meiosis <- function() {  L <- divide(long, kL); S <- divide(short, kS)  lapply(1:4, function(i) list(long = L[i, ], short = S[i, ]))}v <- replicate(500, paste(meiosis()[[sample(4,1)]]$long, collapse = ""))table(v)gam <- function() meiosis()[[sample(4,1)]]$longe <- replicate(200, gam()[1] + gam()[1])table(e)

D

Solve Stage C to unlock this section.

For the prior stages we just knew that the different alleles were different variants at the same locus — the same gene, but with slightly different sequences. Now we are going to look at some phenotypes.

Below are diagrams representing two parents, with their genotypes shown beneath them. When you cross the parents you will get a range of offspring, and each offspring, unlike in Mendel's experiment, will simply tell you its genotype. So for every offspring you will have their parents' phenotype, their parents' genotype, their phenotype and their genotype.

Even with all of this information given, you are still going to have to take a moment to think about which of the three traits — outline shape, colour, and distortion — each of the loci is controlling.

  • Genotypes and phenotypes of two parents are shown.
  • When you cross the parents, the genotypes and phenotypes of their offspring are shown.
  • There are three phenotypes: outline, colour and distortion.
  • Try to determine which locus is controlling which of these three traits.

To open Stage E

  • Cross the parents, then say which gene drives which trait. not yet
  • Say which allele does what at each of the three genes. not yet
  • Answer the question under the three rules. not yet

R code

# A and B on the long chromosome, E on the short. 1 = big, 0 = little.long  <- rbind(c(1,1,1,1), c(0,0,0,0))   # spots 1,2 are A and Bshort <- rbind(c(1,1,1,1), c(0,0,0,0))   # spot 1 is Edup <- function(m) m[c(1,1,2,2), ]divide <- function(m) {  d <- dup(m); p <- if (runif(1) < .5) 1:4 else c(3,4,1,2)  d[c(p[sample(2)], p[2 + sample(2)]), ]}meiosis <- function() {  L <- divide(long); S <- divide(short)  lapply(1:4, function(i) list(long = L[i, ], short = S[i, ]))}gam <- function() meiosis()[[sample(4,1)]]# 200 flowers, and the dose at each of the three spotsf <- replicate(200, { a <- gam(); b <- gam()  c(A = a$long[1] + b$long[1],    B = a$long[2] + b$long[2],    E = a$short[1] + b$short[1]) })apply(f, 1, table)            # 1:2:1 three times over# the same three doses, read through three different rulesshape <- ifelse(f["A",] > 0, "frilled", "smooth")        # one masks the otherpetal <- c("white","striped","red")[f["B",] + 1]         # both showleaf  <- c("pale","mid","dark")[f["E",] + 1]            # they blendtable(shape); table(petal); table(leaf)

E

Solve Stage D to unlock this section.

Mendel got particularly lucky in his choice of genes. The inheritance of the phenotype between parent and offspring was mediated by just one locus for all of his chosen traits. Likewise, his chosen traits had a very simple mechanism of inheritance, where the phenotypes were driven by the presence of a single protein made by each locus, creating pairs that he called dominant and recessive.

Dominance and recessivity are not a binary, nor are they universal. That is an important thing to remember. Most traits are not controlled by a single locus, and most loci don't have simple, strict, binary dominant and recessive pairings.

Height, for instance, is controlled in humans by well over 1,700 individual loci, each of which has a very small effect on height. The largest locus we have ever found is associated with about a 0.07-centimetre difference in height between people. So genetically, height is thousands of little effects that are added up to produce the genetic expectation of height — the heritable component of height.

We are going to take something of a turn for this one. We again have two chromosomes, but now each locus is either going to have a positive (green) or negative (red) effect on the amount of protein in a corn kernel. You can control the recombination rate with a slider, and you can select which gametes are made for an embryo.

Your goal for part one is to make embryos with the most and least possible protein content. Once you have successfully made those, you are going to run some population simulations. You will first allow the population to simply breed over time, and then add in a component where an individual corn's protein content affects their birth and death rates.

This will let you visualise the reality of how most continuous traits you might think of evolve, given what is called additive genetic variation.

  • For part one you are choosing how many recombination points there are and where they go, using a slider and toggles. It is otherwise the same as what you were doing in part C, with the same diagrams.
  • The potential long and short chromosomes produced are shown below, and you make your gamete by selecting which ones to use yourself.
  • Your goal is to create gametes carrying the most protein genetically possible, and the least protein genetically possible.
  • For part two you will run a model where protein content is unrelated to births and deaths, to see what happens.
  • For part three you will establish the role protein content plays in controlling births and deaths, and see what happens.
  • The first activity may take some time. Feel free to scroll up and use the manipulable diagrams earlier in this lesson to plan out how you are going to set these sliders.

Tasks

  • Build the highest-protein kernel these chromosomes allow, and the lowest. not yet
  • Let a population run with nothing choosing. not yet
  • Point protein % at birth rate and death rate however you like, and run it. not yet

R code

# what each allele does to protein %. green is positive, red negative.eff <- rbind(  #        A     B     C     D          E     F     G     H  big    = c(2.0, -2.5, 1.0, 3.0,   1.5, -2.0, 0.5, 0.7),  little = c(-1.5, 2.5, -0.5, -0.2,  -2.0, 2.0, -1.0, -0.5))long  <- rbind(c(1,1,1,1), c(0,0,0,0))short <- rbind(c(1,1,1,1), c(0,0,0,0))dup <- function(m) m[c(1,1,2,2), ]n  <- 1                # marks per chromosomekL <- c()            # which gaps you usedkS <- c()rip <- function(M, ks) {  for (k in ks) { s <- k:4; t <- M[2, s]; M[2, s] <- M[3, s]; M[3, s] <- t }  M}divide <- function(m, ks) {  d <- rip(dup(m), ks)  p <- if (runif(1) < .5) 1:4 else c(3,4,1,2)  d[c(p[sample(2)], p[2 + sample(2)]), ]}meiosis <- function() {  L <- divide(long, kL); S <- divide(short, kS)  lapply(1:4, function(i) c(L[i, ], S[i, ]))}# a gamete is worth the sum of the eight alleles it carriesworth <- function(g) sum(ifelse(g == 1, eff["big", ], eff["little", ]))gam   <- function() meiosis()[[sample(4,1)]]mean(replicate(500, worth(gam())))     # settles on +1.5# the best any gamete can be: the better allele at every spotsum(pmax(eff["big", ], eff["little", ]))    # +13.2sum(pmin(eff["big", ], eff["little", ]))    # -10.2o <- replicate(500, worth(gam()) + worth(gam()))mean(o)                          # +3.0, wherever you cutsd(o)                            # this is the part the cuts movemax(o)                           # the biggest there is: +26.4