joshwlambert / DAISIEprep

Extracts phylogenetic island community data from phylogenetic trees
https://joshwlambert.github.io/DAISIEprep
GNU General Public License v3.0
6 stars 3 forks source link

Nonendemic lineage gets converted to endemic #36

Open pepijnhelleman opened 2 months ago

pepijnhelleman commented 2 months ago

I used the DAISIEprep package in RStudio to extract data from a mammal DNA-based phylogeny (by Upham et al., 2019) for DAISIE island biogeography analysis. For this I have compiled a species checklist of all native mammals on Zanzibar island. I successfully loaded the species cheklist into R as a dataframe and added endemicity statuses for all species sampled by the phylogeny using the _create_endemicitystatus() function (all 35 species present in the tree were nonendemic). I then added this data to the phylogeny (a phylo4d object).

In my species checklist for Zanzibar island, there are four bat species belonging to the same genus (Nycteris macrotis, Nycteris thebaica, Nycteris hispida, and Nycteris grandis; see phylogeny below). They are all nonendemic as they also live on the mainland (all 4 have large ranges in Africa), and most species have branching times much older than the island age of Zanzibar (45.725, 16.135, 9.590, and 0.689 Myr; Zanzibar Island age = 4 Myr). However, when applying the _extract_island_species(phylod = phylod, extractionmethod = "asr") function on the phylod object, these four species get joined into a single colonizing lineage which is then marked as endemic in the island_tbl. This is incorrect based on biological knowledge. When I use the "min" algorithm instead, this problem does not occur. This is the code I used for the asr:

island_tbl <- island_tbl() # empty island_table
# performing the asr on the phylogeny with endemicity data
phylod <- add_asr_node_states(phylod = phylod, asr_method = "mk", tie_preference = "mainland")
island_tbl_asr <- extract_island_species(
  phylod = phylod,
  extraction_method = "asr"
)
# save extracted data in the island_tbl
island_tbl<-island_tbl_asr
View(island_tbl)

Later on in my script, when using the _create_daisiedata() function on this dataset, the four species are separated again into 4 separate lineages. All four of these species are then named differently (_Nycteris_macrotis1, _Nycteris_macrotis2, _Nycteris_macrotis3, and _Nycteris_macrotis4) and are saved as endemic species in the DAISIE data list (stac value 5).

I suspect that the problem is based in the asr method that I am using, but I am not sure. It would be great if this can be solved by users in the future through DAISIEprep.

Below a snippet from the phylogeny that I am using, showing all Nycteris species included in the tree (species in my checklist are indicated by the green boxes). Nycteris_tree_DAISIEprep_issue

Maybe helpful: the output plots (from _DAISIE_plotisland function). When setting island_age = 4 Myr, we get: Rplot_Nycteris_issue_age4 When setting island_age = 50 Myr (hypothetical, to get idea of the issue here), we get: Rplot_Nycteris_issue_age50