Forest Dynamic Model - Chisholm & Pacala 2010
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 is a simulation model for the Chisholm and Pacala (2010) analytical model. Chisholm and Pacala (2010) relaxed one of the fundamental neutral assumptions that all species in the community interact in the same zero-sum game and derive a high-diversity approximation for the metacommunity SAD under the new model.
This model used to explains the two macro-ecological patterns species abundance distribution (SAD) and species area relationship (SAR). 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.
Chisholm and Pacala (2010) divided the metacommunity into K niches and allowed each niche to operate according to its own neutral dynamics, independently of the other K − 1 niches. He assigned each patch in the metacommunity to a niche and assumed that a vacant location is always captured by an individual with a matching niche. He retained the other neutral assumptions: immigration rate (m), the speciation rate (ν), and the density of individuals per unit area (ρ) are constant across niches.
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.
Chisholm and Pacala (2010) assumed that the scale of observation is large enough that the relative sizes of niches in the local community are the same as in the metacommunity (Ji = βi.J). He assigned each patch in the local community to a niche and assumed that a vacant location is always captured by an individual with a matching niche. He retained the other neutral assumptions: immigration rate (m), the speciation rate (ν), and the density of individuals per unit area (ρ) are constant across niches.
HOW IT WORKS
Each agent has a property called 'species'. Each patch has a property called 'niche'. Species have different colors. Niches have different colors also. When an agent dies, an offspring with a matching niche is randomly selected 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 with a matching niche is randomly selected 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 with a matching niche is randomly selected. 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
- θ: Fundamental biodiversity numbers used for meta-community.
- θ2: 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.
- K: Number of niches in meta-community and local community.
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.
- Relative species abundance distribution of niche in local community: Relative abundance of species in each habitats in local community.
- Relative species abundance of niches in meta-community: Relative abundance of species in each habitats in meta-community. ## 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.
Chisholm, R. A., & Pacala, S. W. (2010). Niche and neutral models predict asymptotically equivalent species abundance distributions in high-diversity ecological communities. Proceedings of the National Academy of Sciences, 107(36), 15821–15825.
CREDITS AND REFERENCES
For the model itself:
- Punchi-Manage, R. (2023c). NetLogo Chisholm and Pacala (2010) Niche Based Neutral Model. http://netlogo/models/NetLogo-Chisholm-and-Pacala-(2010)-Niche-Based-Neutral-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 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 habitat hist-frq-meta0 rel-hist-frq-meta0 hist-frq-local0 rel-hist-frq-local0 extinct-species-meta] breed [meta-trees meta-tree] breed [trees tree] meta-trees-own [meta-species n-speciation-no] trees-own [species h] circles-own [] breed [circles a-circle] patches-own[elevation niche] 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 meta-set[] set meta-sp 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-rate theta / (2 * JM) set effective-meta-cmmunity-size JM] if (Moran? = true) [ set speciation-rate theta / JM set effective-meta-cmmunity-size JM ^ 2 / 2] if (Etinne-Alonso-Hubbell?) [ set speciation-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 ask patches with [count meta-trees-here > 0] [ set niche 1 + random K set pcolor 5 * niche ] 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-meta0 sort-by > map count table:values table:group-agents meta-trees-on patches with [niche = 1 AND count meta-trees-here > 0] [ meta-species ] set rel-hist-frq-meta0 map [ i -> i / count patches with [niche = 1 AND count meta-trees-here > 0] ] hist-frq-meta0 set meta-time 0 set meta-a0 1 set n-speciation 0 set extinct-species-meta 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 ask patches with [count trees-here > 0] [ set niche 1 + random K set pcolor 5 * niche ] set extinct-species 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 set hist-frq-local0 sort-by > map count table:values table:group-agents trees-on patches with [niche = 1 AND count trees-here > 0] [ species ] set rel-hist-frq-local0 map [ i -> i / count patches with [niche = 1 AND count trees-here > 0] ] hist-frq-local0 ;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-sp meta-sp + 1 set meta-species meta-sp 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 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-meta0 sort-by > map count table:values table:group-agents meta-trees-on patches with [niche = 1 AND count meta-trees-here > 0] [ meta-species ] set rel-hist-frq-meta0 map [ i -> i / count patches with [niche = 1 AND count meta-trees-here > 0] ] hist-frq-meta0 update-plots if (graphic? = true) [ plot-genetic-tree-Meta-Community update-plot1 update-plot4 ] forest-die-regenerate3 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 set hist-frq-local0 sort-by > map count table:values table:group-agents trees-on patches with [niche = 1 AND count trees-here > 0] [ species ] set rel-hist-frq-local0 map [ i -> i / count patches with [niche = 1 AND count trees-here > 0] ] hist-frq-local0 if (graphic? = true) [ plot-genetic-tree-Local-Community update-plot2 update-plot3 ] 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 habitat [niche] of patch x-cor y-cor 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 (random-number2 > speciation-rate)[ ask one-of meta-trees-on patches with [niche = habitat] [ hatch 1 setxy x-cor y-cor ] ] end to count-down set time time + 1 end to speciation if (random-number2 <= speciation-rate) [ set n-speciation n-speciation + 1 set meta-sp meta-sp + 1 ask one-of meta-trees [ let parent-of-speciation meta-species hatch 1 set n-speciation-no n-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 ;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 ] set di-locx xcor set di-locy ycor set habitat [niche] of patch x-cor y-cor die ] let random-number3 random-float 1 if-else (immigration-rate < random-number3) [ ask one-of trees-on patches with [niche = habitat] [ 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 update-plot3 set-current-plot "Relative species abundance of niches in local community" let n2 1 clear-plot while [n2 <= K] [ create-temporary-plot-pen (word "habitat " n2) set-current-plot-pen (word "habitat " n2) set-plot-pen-color 5 * n2 + 4 set-plot-pen-mode 0 set hist-frq-local0 sort-by > map count table:values table:group-agents trees-on patches with [niche = n2 AND count trees-here > 0] [ species ] set rel-hist-frq-local0 map [ i -> i / count patches with [niche = n2 AND count trees-here > 0] ] hist-frq-local0 foreach (reverse sort rel-hist-frq-local0) plot set n2 n2 + 1 plot-pen-down ] end to update-plot4 set-current-plot "Relative species abundance of niches in meta-community" let n3 1 clear-plot while [n3 <= K] [ create-temporary-plot-pen (word "habitat " n3) set-current-plot-pen (word "habitat " n3) set-plot-pen-color 5 * n3 + 4 set-plot-pen-mode 0 set hist-frq-meta0 sort-by > map count table:values table:group-agents trees-on patches with [niche = n3 AND count trees-here > 0] [ species ] set rel-hist-frq-meta0 map [ i -> i / count patches with [niche = n3 AND count trees-here > 0] ] hist-frq-meta0 foreach (reverse sort rel-hist-frq-meta0) plot set n3 n3 + 1 plot-pen-down ] end ; Copyright 2023 Ruwan Punchi-Manage. ; 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.