Walt writes:
>I understand that, but it is exactly what I meant, Glenn. I should have
>more clearly said the direct male descendants (Y-chromosome only). I
>have heard the argument that sooner or later all but one MUST die out. I
>can buy it only if there is some reason why that one is very much better
>than all the others. The argument that 99,999 out of 100,000 must
>automatically die out (the male chain only) and at the same time say
>that the 1 remaining produces a lineage of 1,000,000,00 men certainly
>has to look a bit fishy. I know zip about genetic details but I usually
>am fair at logic, math and probabilities.
Think about it from the 'other' side: What are the odds that any family
line will continuously produce an unbroken line of daughters or sons
through hundreds of generations? Pretty slim odds, in practice.
>One cannot argue with the data, so it must have happened. Why it
>happened, seems to require more that a simple example of how one
>randomly selected line can die out. I can generate examples where each
>line should increase without limit, unless some competition exists with
>limited resources ---- then it is easy.
Even without selection you will find that a single male (Y-chromosomal)
or single female (mitochondrial) line will eventually "win the lottery"
(assuming a finite population). An 'Eve'/'Adam' is simply that woman/
man whose descendents produced the last, unbroken string of daughters/
sons. I suppose one could say that the 'limited resource' in this
simluation is the maximum number of females permitted within the
population in a single generation.
Here's a simplistic model for the mitochondrial "Eve" lottery:
1) Start with a population that has exactly 100 females.
2) To each generation, exactly 100 daughters are born.
3) Assume that the sex of any child born is randomly choosen (1:1 M:F)
4) Randomly order the potential mothers from each generation and
allow each mother in the sequence one birth, until 100 daughters
are born (You might have to run through the list more than once
to achieve this).
5) Each daughter born is given the ID of her mother.
6) Run the simulation until each daughter born in a generation
carries the same ID.
In this simulation it takes about 350 generations on average
to produce an 'Eve'. This means that one of the females
in the original population of 100 gave birth to a _continuous_
line of daughters that spanned 350 generations (Note that ninety-
nine of other females didn't).
A BASIC program that runs this simulation...
Sub Generations_To_Eve()
Rem *** Written 25-Apr-2002 by T. Ikeda
Rem *** Warning: Not extensively tested for coding errors.
Rem ***
Rem *** Crude simulation of the reproductive 'lottery' that
Rem *** eventually generates an 'Eve'. An 'Eve' is the
Rem *** last common female ancestor for a population.
Rem ***
Rem *** This simulation starts with a population of 'MaxFemales'
Rem *** and permits them to reproduce in a randomly ordered
Rem *** fashion until 100 'MaxFemale' daughters are produced.
Rem *** (Conditions are set such that each female will have at
Rem *** least one child and, on average, should be able
Rem *** to have approximately two children. The ratio of M/F
Rem *** offspring is set to 1).
Rem *** Another round of reproduction is then run for the
Rem *** daughters in subsequent generations until a generation
Rem *** is reached in which all females have the same ancestral
Rem *** mother (an 'Eve').
Rem ***
Rem *** Smaller generations produce 'Eves' in fewer generations.
Rem *** Main program *************************
Rem *** Set number of females/generation in population
Const MaxFemales As Integer = 100
Rem *** Arrays to hold mother IDs of females in population
Dim MotherArray(1 To MaxFemales) As Integer
Dim DaughterArray(1 To MaxFemales) As Integer
Rem *** Counters
Dim NumGenerations As Long
Dim NumDaughters As Integer
Rem *** Indexes
Dim i As Integer 'a counter
Dim TempInteger As Integer
Dim RandomIndex As Integer 'another index counter
Rem *** Variable to hold loop exit condition
Dim All_Mothers_The_Same As Boolean
Rem *** Initialize MotherArray array
Rem *** Each position in the array corresponds to a single mother
Rem *** or daughter. Each number in a position represents the ID of
Rem *** an individual's "founding" mother (The mother of the first
Rem *** generation).
For i = 1 To MaxFemales
MotherArray(i) = i
Next i
Rem *** Initialize additional run variables
All_Mothers_The_Same = False
NumGenerations = 0
Do
NumGenerations = NumGenerations + 1
Rem *** Randomize the mothers in current generation...
For i = 1 To MaxFemales
RandomIndex = Int(MaxFemales * Rnd + 1)
TempInteger = MotherArray(i)
MotherArray(i) = MotherArray(RandomIndex)
MotherArray(RandomIndex) = TempInteger
Next i
Rem *** Reproduce until MaxFemales daughters are born
Rem *** Initialize index counters for 'reproduction' phase
i = 1
NumDaughters = 0
Do
Rem *** Each pass within the loop corresponds to
Rem *** a single birth to a mother. 50/50 chance
Rem *** of daughter in each birth.
If Rnd > 0.5 Then
NumDaughters = NumDaughters + 1
Rem *** Assign mother's ID to each daughter
DaughterArray(NumDaughters) = MotherArray(i)
End If
Rem *** Select next mother to reproduce...
If i = MaxFemales Then
i = 1
Else
i = i + 1
End If
Loop Until NumDaughters = MaxFemales
Rem *** Test to see if all daughters had the same _original_ mother.
All_Mothers_The_Same = True
For i = 1 To (MaxFemales - 1)
If DaughterArray(i) <> DaughterArray(i + 1) Then
All_Mothers_The_Same = False
End If
Next i
Rem *** All daughters become mothers in the next generation.
For i = 1 To MaxFemales
MotherArray(i) = DaughterArray(i)
Next i
Rem *** Run another generation unless all the daughters have the same
Rem *** progenitor...
Loop Until All_Mothers_The_Same = True
Rem *** Output the number of generations needed to make an 'Eve'
Debug.Print "Generations to 'Eve' = " & NumGenerations
End Sub
Walt
--------------------------------------------------------------------
mail2web - Check your email from the web at
http://mail2web.com/ .
This archive was generated by hypermail 2b29 : Thu Apr 25 2002 - 17:15:44 EDT