Forest Dynamic Model-Hubbell (2001)
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
According to Gauss competitive exclusion principle (Gauss, 1932) two species cannot exist in a same environment. However, thousands of species found coexists in tropical forests. This model discribes Hubbell's (2001) neutral model that used to explains the two macro-ecological patterns species abundance distribution (SAD) and species area relationship (SAR). Hubbell (2001) assumes individuals are ecologically equivalence. Their per capita birth rates, death rates and speciation rates, immigration rates are same (Hubbell, 1979, 1997, 2001). Individual differences are irrelavent to understand the macro-ecological patterns. The model consists of two parts.
Meta-community
Meta-community (size JM) is very large compared to local community (size JL). Meta-community is saturated. That is there is no vacant sites (space). This is one of the main assumptions of neutral theroy.Meta-community has demographic fluctuations (stochastic drift). Trees dies and rebirth every time step. It has also mechanisam called speciation. Speciation allows new species to appear. When a tree dies the vacant space is occupied by offsprings of a randomly selected individual or from a new species (speciation is a rare event. Probability of happening that event is very very small). Number of species in the meta community depends on the fundemental bio-diversity number (θ) and the meta-community size (JM). Species are generated at the beginning using the Hubbell's (2001) species generating flow chart (pg. 291). Each species has Ji number of individuals.
Local community
Local community has demographic fluctuations (death and birth of trees). Local community is saturated. That is there is no vacant sites (space). This is one of the main assumptions of neutral theroy. Original version of the Hubbell's neutral model assumes single death in each time steps. When a tree dies randomly the vacant space is occupied by a offspring of a randomly selected individual. This randomly selected individual is either from a local community or meta-community. If its from meta-community then offspring immigrates from meta-community to local community to occupy the vacant site. If there is no immigration local community undergoes mono-dominance (all the sites occupied by one species). Therefore to maintain the species diversity immigration is necessary. Local community has S number of species. Species are generated at the beginning using the Hubbell's (2001) species generating flow chart (pg. 291). Number of species in the local community depends on the fundemental bio-diversity number (θ2) and the local community size (JL). Each species has Ji number of individuals.
HOW IT WORKS
Each agent has a property called 'species'. Species have different colors. When an agent dies, an offspring of an randomly selected agent is occupied that empty space. Only one agent exists in a patch.
(1) Meta-community: When an agent dies, the vacant space is occupied by offsprings of a randomly selected agent or from a new type of agent (probailities are 1-v and v respectively).
(2) Local community: When an agent dies, randomly the vacant space is occupied by a offspring of a randomly selected agent. This randomly selected agent is either from a local community or meta-community (probabilites are 1-m and m respectively). If its from meta-community then offspring agent immigrates from meta-community to local community to occupy the vacant site.
HOW TO USE IT
Sliders
- w1: Used to change meta-community size. JM = (w1+1)2
- w2: Used to change the local community size. JL = (w2+1)2
- theta: Fundamental biodiversity numbers used for meta-community.
- theta2: Fundamental biodiversity numbers used for local-community.
- Immigration: Used to control the immigration rate (0-1).
- D: Used to defines the number of death per each time step in the local community. Hubbell's (2001) original model D = 1. Here it can takes any value from 1 to JL.
- speciation-initiation-rate: Defines the speciation rate in the Hubbell's (2001) model. Hubbell used Wright-Fisher equation to define the point mutation speciation. In this model it has additional three additional switches (off-on) that used to set the speciation rates according to either Hubbell (2001) or Moran or Etinne-Alonso-Hubbell.
- tau-protracted: Hubbell (2001) used only point mutation (instant specitation). However, this model has an slider called tau-protracted to shift from Hubbell's (2001) point mutation to Rosindell et al. protracted speciation. When tau-protracted is 0 it is Hubbell's instant point speciation, else it is protracted speciaiton (Rosindell et al. 2010).
- Equilibrium-run: use to decide the number of runs before stop the process.
Switches
- graphic?: switch is used to switch on-off graphics. Off graphics? speeds the process.
- Moran?: θ = J2M. v
- Etienne-Alonso-Hubbell?: θ = JM.(JM-1). v
- Hubbell-200-Wright-Fisher?: θ = 2.JM. v
- immigration-number?: If switch is 'on' then θ 2 = m.JL / (1 - m)
THINGS TO NOTICE
Monitor:
- Meta-community size: Shows the meta-community.
- Protracted Speciation events happened in the meta-community: Shows number of protrated species in the community.
- Point-mutations: Shows number of point mutations.
- Total number of deaths in the local community: Shows total number of deaths in the local community. Equals to number of ticks in netlogo.
- Meta-community species richness at time t = 0: Shows initial species richness in the meta-community.
- Meta-community species richness at time t = t: Shows the current species richness in the meta-community.
- Number of species appeared in the meta-community t = 0 to t = t: Total number of new species appeared in the meta-community.
- Effective-meta-community size: See Etienne and Alonso (2007).
- JL: Current local community size.
- JM: Current meta-community size.
- Number of temporal extinct species in the meta-community: Number of species temporally extinct from local community. Temporal extinction happens only if immigration rate is non-zero. Otherwise it is shows number permenant extinct species.
Plots:
- Total speciation events happen in the meta-community: Cumulative function of speciations over time.
- Meta-community species richness: Number of meta-community species presents over time.
- Local community species richness: Number of local community species presents over time.
- Incipient species in the meta-community: "During the transition period of a lineage undergoing protracted speciation, the individuals of this lineage are interpreted as an incipient species (Rosindell et al., 2010)"
- Generic-tree meta-community: Similar to meta-community pylogenetic tree that also includes extinct lineages.
- Generic-tree local community: Similar to local-community pylogenetic tree that also includes extinct lineages.
- Species Abundance Distribution meta-community: Meta-community species abundance fluctuations.
- Species Abundance Distribution local community: Local-community species abundance fluctuations.
- Number of extinct species from local-community: Cumulative distribution of temporaly extinct species from local-community.
- Relative Species Abundance Meta Community: Species abundance (J) / Meta-community size (JM).
- Species Abundance Distribution of Meta-Community: Number of individuals from each species in the meta-community sorted.
- Number of extinct species from meta-community: Cumulative distribution of permenantly extinct species from meta-community.
- Relative Species Abundance Local Community: Species abundance (J) / Local-community size (JL).
- Species Abundance Distribution of Local-Community: Number of individuals from each species in the local community sorted.
THINGS TO TRY
- Move sliders w1 and w2 to change the meta and local community size.
- Move sliders theta and theta2 to change the fundamental Biodiversity number for meta and local community.
- Move slider immigration-rate to change the immigration rate (0-1).
- speciation-initiation-rate is determine by one of the swithces (Moran, Hubbell-2001-Wright-Fisher, Etienne-Alonso-Hubbell) usually. Off three swiches to change the speciation-initiation-rate user defines values.
EXTENDING THE MODEL
NETLOGO FEATURES
RELATED MODELS
Gause, G.F. (1932). "Experimental studies on the struggle for existence: 1. Mixed population of two species of yeast". Journal of Experimental Biology, 9: 389–402.
Moran, P.A.P. (1958). Random processes in genetics. Proceedings of the Cambridge Philosophical Society, 54: 28 60-71.
Ewens, W.J. (1972). The sampling theory of selectively neutral alleles. Theoretical Population Biology, 3: 87-112.
Kimura, M. (1983). The Neutral Theory of Molecular Evolution. Cambridge, UK: Cambridge University Press.
Hubbell, S. P. (1979). Tree Dispersion, Abundance, and Diversity in a Tropical Dry Forest: That tropical trees are clumped, not spaced, alters conceptions of the organization and dynamics. Science, 203(4387), 1299–1309.
Hubbell, S. P. (1997). A unified theory of biogeography and relative species abundance and its application to tropical rain forests and coral reefs. Coral Reefs 16:S9–S21.
Hubbell, S. P. (2001). The Unified Neutral Theory of Biodiversity and Biogeography. Princeton, NJ: Princeton University Press.
Etienne, R. S., & Alonso, D. (2007). Neutral Community Theory: How Stochasticity and Dispersal-Limitation Can Explain Species Coexistence. Journal of Statistical Physics, 128(1–2), 485–510.
Rosindell, J., Cornell, S. J., Hubbell, S. P., & Etienne, R. S. (2010). Protracted speciation revitalizes the neutral theory of biodiversity. Ecology Letters, 13(6), 716-727.
CREDITS AND REFERENCES
For the model itself:
- Rajakaruna, W. & Punchi-Manage, R. (2023a). NetLogo Hubbell's Neutral Theory Model.
Please cite the NetLogo software as:
- Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
Comments and Questions
extensions [table csv] globals [index meta-sp meta-time meta-a0 meta-j2 meta-a meta-set2 extinct-species number-of-meta-trees a initial-meta-richness random-number2 number time num j x-cor y-cor N richness a0 n-speciation n-initiation-speciation local-set local-di-set local-off-set set-species-who-di set-species-who-off sp hist-frq rel-hist-frq s local-set0 remove-set richness-counts species-who-di di-locx di-locy species-who-off set1-species-who-off meta-set effective-meta-cmmunity-size number-of-local-trees item-x meta-set-new meta-sp-count sp-count j1 i1 k1 j2 i2 k2 meta-richness-counts meta-richness local-richness-counts local-richness hist-frq-meta rel-hist-frq-meta hist-frq-local rel-hist-frq-local mutant0 n-initiation-speciation-count extinct-species-meta] breed [meta-trees meta-tree] breed [trees tree] meta-trees-own [meta-species n-speciation-no n-initiation-speciation-no tau mutant] trees-own [species h tau] circles-own [] breed [circles a-circle] ;breed [local-trees local-tree] patches-own[elevation] ;trees-own[local-species] ;extensions [ r ] to setup2 clear-all set meta-richness-counts map count table:values table:group-agents meta-trees [ meta-species ] set meta-richness length meta-richness-counts set n-speciation 0 set n-initiation-speciation 0 set meta-set[] set meta-sp 0 set mutant0 0 set JM (w1 + 1) * (w1 + 1) resize-world 0 (w1 + w2 + 20) 0 (w1 + w2 + 20) if (Hubbell-2001-Wright-Fisher? = true) [ set speciation-initiation-rate theta / (2 * JM) set effective-meta-cmmunity-size JM] if (Moran? = true) [ set speciation-initiation-rate theta / JM set effective-meta-cmmunity-size JM ^ 2 / 2] if (Etinne-Alonso-Hubbell?) [ set speciation-initiation-rate theta / (theta + JM - 1) set effective-meta-cmmunity-size JM * (JM - 1) / 2] ;if (file-exists? "parent-species-speciation-species-time.csv") ;[ ;carefully ;[file-delete "parent-species-speciation-species-time.csv"] ;[print error-message] ;] ;file-open "parent-species-speciation-species-time.csv" ;file-close ;if (file-exists? "Meta-Community-extinction-species-time.csv") ;[ ;carefully ;[file-delete "Meta-Community-extinction-species-time.csv"] ;[print error-message] ;] ;file-open "Meta-Community-extinction-species-time.csv" ;file-close species-gen1 set hist-frq-meta sort-by > map count table:values table:group-agents meta-trees [ meta-species ] set rel-hist-frq-meta map [ i -> i / JM ] hist-frq-meta set meta-time 0 set meta-a0 1 set n-speciation 0 set n-initiation-speciation 0 set extinct-species 0 set meta-j2 2 set meta-a JM set a JL set sp 0 set JL (w2 + 1) * (w2 + 1) if (Immigration-number? = True) [ set theta2 immigration-rate * JL / (1 - immigration-rate) ] species-gen2 set extinct-species-meta 0 set hist-frq-local sort-by > map count table:values table:group-agents trees [ species ] set rel-hist-frq-local map [ i -> i / JL ] hist-frq-local ;if (file-exists? "Local-Extinction-Species-Extinction-Time.csv") ;[ ;carefully ;[file-delete "Local-Extinction-Species-Extinction-Time.csv"] ;[print error-message] ;] ;file-open "Local-Extinction-Species-Extinction-Time.csv" ;file-close create-channel reset-ticks end to species-gen1 set k1 -1 while [k1 < w1 ] [ set k1 k1 + 1 set i1 -1 while [i1 < w1 ] [ set i1 i1 + 1 create-meta-trees 1 [ setxy k1 i1 set shape "circle" set size 1 set num random-float 1 set j1 j1 + 1 if-else (num < (theta / (theta + j1 - 1 ))) [ set meta-species (meta-sp + 1) set meta-sp meta-sp + 1 set color 0.5 * meta-species ] [ set meta-species [meta-species] of one-of other meta-trees set meta-sp meta-sp set color 0.5 * meta-species ] ;file-open "Metacommunityset.csv" ;file-print (meta-species) ;file-close ] ] ] set initial-meta-richness meta-sp end to species-gen2 set k2 -1 while [k2 < w2 ] [ set k2 k2 + 1 set i2 max-pxcor + 1 while [i2 <= max-pxcor + 1 AND i2 >= max-pxcor - w2 + 1] [ set i2 i2 - 1 create-trees 1 [ set h s + 1 setxy k2 i2 set shape "circle" set size 1 set num random-float 1 set j2 j2 + 1 if-else (num < (theta2 / (theta2 + j2 - 1 ))) [ set sp sp + 1 set species sp set color 5 * species + 2 ] [ set species [species] of one-of other trees set sp sp set color 5 * species + 2 ] ] ] ] set local-richness sp end to go2 forest-die-regenerate2 count-down forest-die-regenerate3 protracted-speciation set hist-frq-meta sort-by > map count table:values table:group-agents meta-trees [ meta-species ] set rel-hist-frq-meta map [ i -> i / JM ] hist-frq-meta set hist-frq-local sort-by > map count table:values table:group-agents trees [ species ] set rel-hist-frq-local map [ i -> i / JL ] hist-frq-local if-else (graphic? = true) [ update-plot1 update-plots plot-genetic-tree-Meta-Community plot-incipient-species update-plot2 plot-genetic-tree-Local-Community update-plots ] [] tick end to forest-die-regenerate2 set N count meta-trees set meta-richness-counts map count table:values table:group-agents meta-trees [ meta-species ] set meta-richness length meta-richness-counts ask one-of meta-trees [ set x-cor xcor set y-cor ycor set meta-species meta-species let meta-species0 meta-species set number-of-meta-trees count meta-trees with [meta-species = meta-species0] if (number-of-meta-trees = 1)[ set extinct-species-meta extinct-species-meta + 1 ;file-open "Meta-Community-extinction-species-time.csv" ;file-write (meta-species) ;file-write (ticks) ;file-print "" ;file-close ] die ] set random-number2 random-float 1 if-else (random-number2 > speciation-initiation-rate)[ ask one-of meta-trees [ hatch 1 setxy x-cor y-cor ] ] [speciation-initiation] end to count-down set time time + 1 end to speciation-initiation set n-initiation-speciation n-initiation-speciation + 1 ;set meta-sp meta-sp + 1 set mutant0 mutant0 + 1 ask one-of meta-trees [ let parent-of-speciation meta-species hatch 1 [ set mutant mutant0 set n-initiation-speciation-no n-initiation-speciation ;set meta-j2 meta-j2 + 1 ;set meta-species meta-sp ;set color 0.5 * (a0 + 1 + meta-j2) setxy x-cor y-cor ] ] end to protracted-speciation ask meta-trees with [mutant != 0] [set tau tau + 1] ask meta-trees with [mutant != 0 AND tau = tau-protracted] [ speciation ] end to speciation set n-speciation n-speciation + 1 set meta-sp meta-sp + 1 ask meta-trees with [tau = tau-protracted] [ let parent-of-speciation meta-species set n-speciation-no n-speciation set meta-j2 meta-j2 + 1 set meta-species meta-sp ;set mutant 0 set color 0.5 * (a0 + 1 + meta-j2) setxy x-cor y-cor ;file-open "parent-species-speciation-species-time.csv" ;file-write (parent-of-speciation) ;file-write (meta-species) ;file-write (ticks) ;file-print "" ;file-close ] end to forest-die-regenerate3 set N count trees count-down set remove-set [] set local-richness-counts map count table:values table:group-agents trees [ species ] set local-richness length local-richness-counts repeat D [ask one-of trees [ set species species let species0 species set number-of-local-trees count trees with [species = species0] if (number-of-local-trees = 1) [ set extinct-species extinct-species + 1 ;file-open "Local-Extinction-Species-Extinction-Time.csv" ;file-write (species0) ;file-write (ticks) ;file-print "" ;file-close ;file-open "extinction-time.csv" ;file-write (time) ;file-close ] set di-locx xcor set di-locy ycor die ] let random-number3 random-float 1 if-else (immigration-rate < random-number3) [ ask one-of trees [ hatch 1 set h a setxy di-locx di-locy ] ] [ replace-previous-immigrant move-immigrant immigration-through-channel create-trees 1 [ set species one-of [meta-species] of meta-trees set h a set shape "circle" set size 1 setxy di-locx di-locy ] ] ] end to update-plot1 set-current-plot "Species Abundance Distribution Meta Community" set n 1 while [n <= meta-sp] [ create-temporary-plot-pen (word n) set-current-plot-pen (word n) set-plot-pen-color 5 * n + 4 plotxy ticks count meta-trees with [meta-species = n] set n n + 1 plot-pen-down ] end to update-plot2 set-current-plot "Species Abundance Distribution Local Community" set n 1 while [n <= sp] [ create-temporary-plot-pen (word n) set-current-plot-pen (word n) set-plot-pen-color 5 * n + 4 plotxy ticks count trees with [species = n] set n n + 1 plot-pen-down ] end to plot-genetic-tree-Meta-Community set meta-sp-count 0 set-current-plot "Generic-Tree Meta Community" while [meta-sp-count <= meta-sp] [ create-temporary-plot-pen (word meta-sp-count) set-current-plot-pen (word meta-sp-count) set-plot-pen-color 5 * meta-sp-count + 4 let N-sp count (meta-trees with [meta-species = meta-sp-count]) if (N-sp > 0) [ plotxy ticks meta-sp-count plot-pen-down ] set meta-sp-count meta-sp-count + 1 ] end to plot-genetic-tree-Local-Community set sp-count 0 set-current-plot "Generic-Tree Local Community" while [sp-count <= sp] [ create-temporary-plot-pen (word sp-count) set-current-plot-pen (word sp-count) set-plot-pen-color 5 * sp-count + 4 let N-sp count (trees with [species = sp-count]) if (N-sp > 0) [ plotxy ticks sp-count plot-pen-down] set sp-count sp-count + 1 ] end to create-channel ask patches [ if (pxcor > w2 / 2 AND pxcor < ((w2 / 2) + 2) AND pycor > w1 AND pycor < w1 + 20) [ set pcolor gray] ] end to immigration-through-channel create-circles 1 [ set color ticks set heading 0 set size 1 setxy ((w2 + 2) / 2) (w1 + 1) ] end to move-immigrant ask circles [fd 4] end to replace-previous-immigrant ask circles with [ycor > (w1 + 13)] [die] end to plot-incipient-species set n-initiation-speciation-count 0 set-current-plot "Incipient Species Meta Community" while [n-initiation-speciation-count <= n-initiation-speciation] [ create-temporary-plot-pen (word n-initiation-speciation-count) set-current-plot-pen (word n-initiation-speciation-count) set-plot-pen-color 5 * n-initiation-speciation-count + 4 let N-sp count (meta-trees with [n-initiation-speciation-no = n-initiation-speciation-count]) if (N-sp > 0) [ plotxy ticks n-initiation-speciation-count plot-pen-down ] set n-initiation-speciation-count n-initiation-speciation-count + 1 ] end ; Copyright 2023 Wimansa Rajakaruna & Ruwan Punchi-Manage*. ; * Corresponding Email: spunchi@sci.pdn.ac.lk ; See Info tab for full copyright and license.
There are 3 versions of this model.
Attached files
No files
This model does not have any ancestors.
This model does not have any descendants.