--- title: "Sensitivity" output: rmarkdown::html_vignette bibliography: references.bib csl: evolution.csl vignette: > %\VignetteIndexEntry{Sensitivity} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.align = "center", fig.height = 5, fig.width = 7 ) ``` ## Introduction In this vignette we provide a set of best practices for sensitivity analyses that should be taken into consideration when conducting data formatting and model fitting in the DAISIE and DAISIEprep framework. Sensitivty analyses is the testing of a model output to variations in the model input. A model is considered sensitive if the model output vastly changes due to relatively small perturbations in the data input into the model. These small perturbations may be due to uncertainty in the data (i.e. a posterior distribution of possible branching times in a phylogeny), measurement error, or other factors. In the case we are interested in, these perturbations are variation in island colonisation and branching times, endemicity status on the island and number of colonisations events. Each of these can change if using multiple phylogenies from the posterior distribution of inferred phylogenies, or using different extraction algorithms in DAISIEprep. Firstly we discuss thetype of variations in the data and how each of these can impact parameter estimation. Another aspect of sensitivity analysis, which we will not explore in this vignette, is the sensitivity of model selection to input data variation. By this we mean the best-fit model and the ranking of the model (by likelihood, AIC, BIC, or other metric) may change given differences in the data. This can be equally as important as sensitivity of parameter estimates and we recommend users check model selection as well as parameter estimates in their work. ## Sensitivity to extraction method ```{r setup} library(DAISIEprep) ``` The `DAISIEprep` R package provides the tools to extract phylogenetic community data from phylogenetic trees with the endemicity status of the species assigned to each tip in the phylogeny. However, there is not a single correct method for extracting the data and thus `DAISIEprep` implements several algorithms to account for variations in what would be considered an appropriate assumptions for the island system of interest. The two major divisions for extracting data are in the `extraction_method` argument in `extract_island_species()` (and by extension `extract_multi_island_species()`), which can be either `"min"` for the minimum time of colonisation algorithm, or `"asr"` for the geographical ancestral state reconstruction algorithm. The `"min"` algorithm conforms to the assumptions of the DAISIE inference model (implemented in the [`DAISIE` R package](https://cran.r-project.org/package=DAISIE/index.html)). These assumptions are: * Non-endemic species cannot be part of an island clade * There is no back-colonisation from the island away to the mainland or other island * There cannot be a species not present on the island nested in an endemic island clade The all points are linked, by not allowing back-colonisation, a species on the islands cannot be endemic to the island (i.e. part of an endemic island radiation) and then migrate or expand its range away from the island. These three points mean that if the island system of interest has experienced back-colonisation or a species in an endemic island radiation has expanded its range off the island and its island population has gone extinct (making it not present on the island but extant) the `"min"` algorithm will split clades into multiple colonisations. In the case that the island of interest is very remote and species colonisation and diversify and do not disperse off the island, this algorithm provides a simple model to extract the data. However, it is clear that this common assumptions of the DAISIE model and thus the `"min"` algorithm are violated in empirical data. Therefore the second algorithm, `"asr"`, is implemented to remedy this. The `"asr"` algorithm uses the reconstructed states at each node in the phylogeny inferring whether a species is not present on the island, non-endemic to the island, or endemic to the island. Using this information the algorithm can traverse the phylogeny back to the node where the island clade colonised the island. This algorithm overcomes the limitations of the `"min"` algorithm by allowing non-endemic species to be part of island clades (extracting them as endemic clades for the purposes of applying the DAISIE inference model), and additionally allowing species that are not present on the island to be included in data when embedded within an endemic island clade (this feature is turned on/off with the `include_not_present` argument in `extract_island_species()`). Therefore, the `"asr"` algorithm has benefits when the focal island system has experienced some species movement from the island to other regions. However, it is not without limitations, ancestral state reconstruction models should be interpreted with caution and uncertainty of a species geographic range deep in the past, near the root of the tree is often high leading to variability in interpretation of whether a species was present on the island at the time. The formulation of the ancestral state reconstruction model is also important, with the transition matrix between states crucial to plausible results. By default we use a symmetrical transition structure where species go from not present on the island, to non-endemic and then to endemic. Without jumps from not present to endemic and vice versa. This is in line with the reasoning in the DAISIE model that species that colonise the island do not migrate their entire mainland population, instead going through a widespread range, before becoming endemic via cladogenesis or anagenesis on the island, or extinction of the mainland population. In this vignette we demonstrate the sensitivity of the parameters estimated from the DAISIE maximum likelihood inference model to changes in the algorithm used to extract the data. We apply the `"min"` and `"asr"` algorithms, and within `"asr"` we apply two different models of ancestral state reconstruction: parsimony and continuous-time Markov model (Mk model). Traditionally, these have been two of the most common methods for reconstructing ancestral states, for other methods to reconstruct ancestral ranges see Extending_asr vignette in the `DAISIEprep` package. The data we use for this example is the macro-phylogeny of mammals[@upham_inferring_2019] and the island endemicity data of Madagascar [@michielsen_macroevolutionary_2023]. The mammal phylogeny is a global phylogeny containing most mammal species and the Madagascar checklist is the most up-to-date catelog of Madagascars mammal fauna. The phylogeny is constructed from genetic sequences to create the DNA-only phylogeny. Species that are known but for which genetic data is unavailable are inserted into the tree using a polytomy resolving technique which produces the complete phylogeny. We test the sensitivity of estimates for both the DNA-only and complete phylogenies. The results presented in this vignette are not computing each time the vignette is rendered due to the large computation time required. Instead, the analyses are run on a cluster computer and saved in the package. The analysis script run to produce the results can be found in the [DAISIEprepExtra](https://github.com/joshwlambert/DAISIEprepExtra) package [here](https://github.com/joshwlambert/DAISIEprepExtra/tree/main/inst/scripts). The sensitivity analysis uses the `sensitivity()` function in the `DAISIEprep` package. The `sensitivity()` function creates a table of all possible combination of data extraction settings, given the input arguments, and this forms our parameter space for the sensitivity analysis. The phylogenetic trees and island endemicity data is provided to carry out the extraction and formatting. `DAISIEprep` uses the `phylo4d` class from the `phylobase` R package. However, for the `sensitivity()` function a `phylo` object can be provided and all the house-keeping is taken care of inside the function. The `sensitivity()` function loops through each parameter setting and extracts and formats the data and fit the DAISIE maximum likelihood inference model (`DAISIE::DAISIE_ML_CS()`) to the data. The output produces results for the DNA-only phylogeny and the complete phylogeny. The raw data of parameter estimates for the different parameter settings is tidied into a tibble containing the data we need for both the DNA and complete phylogeny. ```{r} sensitivity_data <- DAISIEprep:::read_sensitivity() ``` We can plot the distribution of parameter estimates for the DNA and complete data sets. ```{r} DAISIEprep:::plot_sensitivity( sensitivity_data = sensitivity_data$sensitivity_dna ) ``` ```{r} DAISIEprep:::plot_sensitivity( sensitivity_data = sensitivity_data$sensitivity_complete ) ``` Most parameters are relatively unsensitivite to the different phylogenies across the posterior distribution of possible trees. The noticable outlier is colonisation rate, where the choice of extraction algorithm heavily influences the inferred rate of island colonisation. The `"min"` algorithm shows the highest rate of colonisation, likely due to breaking up island clades that may have undergone some back-colonisation. The smallest estimated colonisation rate comes from the `"asr"` algorithm using parsimony to reconstruct the geographical states in the phylogeny. This can be explained by parsimony favouring the fewest number of state changes (i.e. range shifts from mainland to island), which translates into fewer colonisation events and likely lumping clades together which may have independently colonised the island. An alternative plot is to look at the pairwise comparisons of each estimated rate from the DAISIE inference model across each posterior phylogeny. ```{r} DAISIEprep:::plot_sensitivity( sensitivity_data = sensitivity_data$sensitivity_dna, pairwise_diffs = TRUE ) ``` ```{r} DAISIEprep:::plot_sensitivity( sensitivity_data = sensitivity_data$sensitivity_complete, pairwise_diffs = TRUE ) ``` The general pattern is the same as the density plots shown above. The rates of cladogenesis, anagenesis and extinction are largely clusters with little clear separation of estimates by extraction method. The exception is again colonisation rate which shows visible clustering of rate estimates based on which extraction method is chosen. Here we have demonstrated the variability, or lack of, in parameter estimates from phylogenetic data on an island community when changing the data as well as the choice of extraction algorithm. ## References