The ethnobotanyR
package calculates common quantitative ethnobotany indices to assess the cultural significance of plant species based on informant consensus. The package closely follows two papers, one on cultural importance indices (Tardio and Pardo-de-Santayana 2008) and another on agrobiodiversity valuation (Whitney, Bahati, and Gebauer 2018). The goal is to provide an easy-to-use platform for ethnobotanists to calculate quantitative ethnobotany indices. Users are highly encouraged to familiarize themselves with ethnobotany theory (Gaoue et al. 2017; Albuquerque and Hurrell 2010) and social ecological theory (Albuquerque et al. 2019). An overview of this theoretical background will be helpful in understanding approaches in ethnobotany and formulating useful research questions.
An example data set called ethnobotanydata
is provided to show how standard ethnobotany data should be formatted to interface with the ethnobotanyR
package. This is an ethnobotany data set including one column of 20 knowledge holder identifiers informant
and one of 4 species names sp_name
. The rest of the columns are the identified ethnobotany use categories. The data in the use categories is populated with counts of uses per person (should be 0 or 1 values).1
Many of the functions in ethnobotanyR
make use of select()
and filter_all()
functions of the dplyr
package (Wickham et al. 2019) and pipe functions %>%
from the magrittr
package (Bache and Wickham 2014). These are easy to use and understand and allow users the chance to pull the code for these functions and change anything they see fit.
informant | sp_name | Use_1 | Use_2 | Use_3 | Use_4 | Use_5 | Use_6 | Use_7 | Use_8 | Use_9 | Use_10 |
---|---|---|---|---|---|---|---|---|---|---|---|
inform_a | sp_a | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
inform_a | sp_b | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
inform_a | sp_c | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
inform_a | sp_d | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
inform_b | sp_a | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
inform_b | sp_b | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
ethnobotanyR
package functionsThe use report URs()
is the most basic ethnobotany calculation. The function calculates the use report (UR) for each species in the data set.
\[\begin{equation} UR_{s} = \sum_{u=u_1}^{^uNC} \sum_{i=i_1}^{^iN} UR_{ui} \end{equation}\]
URs()
calculates the total uses for the species by all informants (from \(i_1\) to \(^iN\)) within each use-category for that species \((s)\). It is a count of the number of informants who mention each use-category \(NC\) for the species and the sum of all uses in each use-category (from \(u_1\) to \(^uNC\)) (see Prance et al. 1987).
::URs(ethnobotanydata)
ethnobotanyR#> sp_name URs
#> 1 sp_c 52
#> 2 sp_a 43
#> 3 sp_d 43
#> 4 sp_b 36
The URsum()
function calculates the sum of all ethnobotany use reports (UR) for all species in the data set (see Prance et al. 1987).
::URsum(ethnobotanydata)
ethnobotanyR#> [1] 174
The CIs()
function calculates the cultural importance index (CI) for each species in the data set.
\[\begin{equation} CI_{s} = \sum_{u=u_1}^{^uNC} \sum_{i=i_1}^{^iN} UR_{ui/N}. \end{equation}\]
CIs()
is essentially URs()
divided by the number of informants to account for the diversity of uses for the species (see Tardio and Pardo-de-Santayana 2008).
::CIs(ethnobotanydata)
ethnobotanyR#> sp_name CI
#> 1 sp_c 2.60
#> 2 sp_a 2.15
#> 3 sp_d 2.15
#> 4 sp_b 1.80
The FCs()
function calculates the frequency of citation (FC) for each species in the data set.
\[\begin{equation} FC_s = \sum_{i=i_1}^{^iN}{UR_i} \end{equation}\]
FCs()
is the sum of informants that cite a use for the species (see Prance et al. 1987).
::FCs(ethnobotanydata)
ethnobotanyR#> sp_name FCs
#> 1 sp_c 17
#> 2 sp_a 15
#> 3 sp_b 12
#> 4 sp_d 12
The NUs()
function calculates the number of uses (NU) for each species in the data set.
\[\begin{equation} NU_s = \sum_{u=u_1}^{^uNC} \end{equation}\]
\(NC\) are the number of use categories. NUs()
is the sum of all categories for which a species is considered useful (see Prance et al. 1987).
::NUs(ethnobotanydata)
ethnobotanyR#> sp_name NUs
#> 1 sp_c 8
#> 2 sp_d 8
#> 3 sp_a 7
#> 4 sp_b 7
The RFCs()
function calculates the relative frequency of citation (RFC) for each species in the data set.
\[\begin{equation} RFC_s = \frac{FC_s}{N} = \frac{\sum_{i=i_1}^{^iN} UR_i}{N} \end{equation}\]
\(FC_s\) is the frequency of citation for each species \(s\), \(UR_i\) are the use reports for all informants \(i\) and \(N\) is the total number of informants interviewed in the survey (see Tardio and Pardo-de-Santayana 2008).
::RFCs(ethnobotanydata)
ethnobotanyR#> sp_name RFCs
#> 1 sp_c 0.85
#> 2 sp_a 0.75
#> 3 sp_b 0.60
#> 4 sp_d 0.60
The RIs()
function calculates the relative importance index (RI) for each species in the data set.
\[\begin{equation} RI_s = \frac{RFC_{s(max)}+RNU_{s(max)}}{2} \end{equation}\]
\(RFC_{s(max)}\) is the relative frequency of citation for the species \(s\) over the maximum, \(RNU_{s(max)}\) is the relative number of uses for \(s\) over the maximum (see Tardio and Pardo-de-Santayana 2008).
::RIs(ethnobotanydata)
ethnobotanyR#> sp_name RIs
#> 1 sp_c 1.000
#> 2 sp_a 0.879
#> 3 sp_d 0.853
#> 4 sp_b 0.790
The UVs()
function calculates the use value (UV) index for each species in the data set.
\[\begin{equation} UV_{s} = \sum_{i=i_1}^{^iN} \sum_{u=u_1}^{^uNC} UR_{ui/N} \end{equation}\]
UVs()
is essentially the same as CIs()
except that it starts with the sum of UR groupings by informants. \(U_i\) is the number of different uses mentioned by each informant \(i\) and \(N\) is the total number of informants interviewed in the survey (see Tardio and Pardo-de-Santayana 2008).
::UVs(ethnobotanydata)
ethnobotanyR#> sp_name UV
#> 1 sp_c 2.60
#> 2 sp_a 2.15
#> 3 sp_d 2.15
#> 4 sp_b 1.80
The simple_UVs()
function calculates the simplified use value (UV) index for each species in the data set.
\[\begin{equation} UV_{s} = \sum U_i/N \end{equation}\]
\(U_i\) is the number of different uses mentioned by each informant \(i\) and \(N\) is the total number of informants interviewed in the survey (see Albuquerque et al. 2006).
The CVe()
function calculates the cultural value (CVe) for ethnospecies. The index is one of three proposed for assessing the cultural, practical and economic dimensions (ethno) species importance. Reyes-Garcia et al. (2006) suggest several more indices but \(CV_e\) is the most commonly used from that study (Reyes-Garcia et al. 2006).
\[\begin{equation} CV_{e} = {Uc_{e}} \cdot{IC_{e}} \cdot \sum {IUc_{e}} \end{equation}\]
Where \(UC_e\) is the number of uses reported for ethnospecies \(e\) divided by all potential uses of an ethnospecies considered in the study. \(Ic_e\) expresses the number of informants who listed the ethnospecies \(e\) as useful divided by the total number of informants. \(IUc_e\) expresses the number of informants who mentioned each use of the ethnospecies \(e\) divided by the total number of informants (see Reyes-Garcia et al. 2006).
::CVe(ethnobotanydata)
ethnobotanyR#> Joining, by = "sp_name"
#> Joining, by = "sp_name"
#> sp_name CVe
#> 1 sp_c 1.768
#> 2 sp_a 1.129
#> 3 sp_d 1.032
#> 4 sp_b 0.756
The FLs()
function calculates the fidelity level (FL) per species in the study. It is a way of calculating the percentage of informants who use a plant for the same purpose as compared to all uses of all plants.
\[\begin{equation} FL_{s} = \frac {N_{s}*100}{FC_{s}} \end{equation}\]
where \(N_s\) is the number of informants that use a particular plant for a specific purpose, and \(FC_s\) is the total number of uses for the species (see Friedman et al. 1986).
::FLs(ethnobotanydata)
ethnobotanyR#> sp_name Primary.use FLs
#> 1 sp_a Use_2 53.33
#> 2 sp_a Use_3 60.00
#> 3 sp_a Use_5 33.33
#> 4 sp_a Use_6 46.67
#> 5 sp_a Use_8 40.00
#> 6 sp_a Use_9 33.33
#> 7 sp_a Use_10 20.00
#> 8 sp_b Use_1 50.00
#> 9 sp_b Use_3 41.67
#> 10 sp_b Use_4 33.33
#> 11 sp_b Use_5 33.33
#> 12 sp_b Use_6 41.67
#> 13 sp_b Use_7 58.33
#> 14 sp_b Use_9 41.67
#> 15 sp_c Use_1 52.94
#> 16 sp_c Use_2 41.18
#> 17 sp_c Use_4 35.29
#> 18 sp_c Use_5 17.65
#> 19 sp_c Use_6 23.53
#> 20 sp_c Use_7 29.41
#> 21 sp_c Use_8 70.59
#> 22 sp_c Use_10 35.29
#> 23 sp_d Use_1 41.67
#> 24 sp_d Use_2 25.00
#> 25 sp_d Use_3 58.33
#> 26 sp_d Use_5 8.33
#> 27 sp_d Use_6 41.67
#> 28 sp_d Use_7 66.67
#> 29 sp_d Use_8 75.00
#> 30 sp_d Use_9 41.67
Divide FLs by 100 to get the percent FL, as it is reported in some studies.
ethnobotanyR
resultsFor quick assessments of differences between indices use the Radial_plot
function to show ethnobotanyR results as a radial bar plot using the ggplot2
library. The cowplot
package (Wilke 2019) can be useful for comparing several Radial_plot
results for easy comparison across indices.
ethnobotanyR::Radial_plot(ethnobotanydata, ethnobotanyR::URs)
URs_plot <-#> Scale for 'y' is already present. Adding another scale for 'y', which will
#> replace the existing scale.
ethnobotanyR::Radial_plot(ethnobotanydata, ethnobotanyR::NUs)
NUs_plot <-#> Scale for 'y' is already present. Adding another scale for 'y', which will
#> replace the existing scale.
ethnobotanyR::Radial_plot(ethnobotanydata, ethnobotanyR::FCs)
FCs_plot <-#> Scale for 'y' is already present. Adding another scale for 'y', which will
#> replace the existing scale.
ethnobotanyR::Radial_plot(ethnobotanydata, ethnobotanyR::CIs)
CIs_plot <-#> Scale for 'y' is already present. Adding another scale for 'y', which will
#> replace the existing scale.
::plot_grid(URs_plot, NUs_plot, FCs_plot, CIs_plot,
cowplotlabels = c('URs', 'NUs', 'FCs', 'CIs'),
nrow = 2,
align="hv",
label_size = 12)
circlize
The following chord plots are made using functions from the circlize
package (Gu et al. 2014). An example of the application of chord plots in ethnobotany is described in a study on agrobiodiversity in Uganda (Whitney, Bahati, and Gebauer 2018).
The ethnoChord()
function creates a chord diagram of ethnobotany uses and species.
ethnobotanyR::ethnoChord(ethnobotanydata, by = "sp_name") Chord_sp <-
The ethnoChord()
function can also be used to create a chord diagram of ethnobotany uses and informants.
ethnobotanyR::ethnoChord(ethnobotanydata, by = "informant") Chord_informant <-
ggalluvial
The ethno_alluvial()
function uses the ggplot2
extension ggalluvial
to make flow diagrams. This may be a useful way to visualize frequency distributions across uses, experts and use categories.
::ethno_alluvial(ethnobotanydata) ethnobotanyR
Generate the same plot with labels on the strata and without the legend.
# correct internal assignment for stat = "stratum"
ggalluvial::StatStratum
StatStratum <-
::ethno_alluvial(ethnobotanydata, alpha = 0.2) +
ethnobotanyR ggplot2::theme(legend.position = "none") +
ggplot2::geom_label(stat = "stratum",
::aes(label = ggplot2::after_stat(stratum))) ggplot2
The indices are probably too narrow a tool for a proper assessment but they can be a useful entry way into understanding some aspects human and nature interactions. These steps required to calculate these indices offer a way to quantify intangible factors of how human communities interact with the world. They can come in handy as additive pieces for more holistic assessments and analyses.
One such procedure is the non-parametric Bayesian bootstrap. The ethno_boot
function runs such a bootstrap and returns a sample of size ‘n1’ representing the posterior distribution of the chose statistic (i.e. ‘mean’).
The function uses the Dirichlet distribution as a way to model the randomness of a probability mass function (PMF) with unlimited options for finite sets (e.g. an unlimited amount of dice in a bag). It is the conjugate prior of the categorical distribution and multinomial distribution.
A probability mass function (PMF) is also called a frequency function, it gives probabilities for random variables that are discrete such as UR (there can be only 1 or 0 UR, this also works for discrete counts like plant uses where there can only be max ‘n’ people interviewed).
The Dirichlet distribution creates n positive numbers (a set of random vectors X1…Xn) that add up to 1. It is closely related to the multinomial distribution, which also requires n numbers that sum to 1.
Here we are interested in the differences in use (either ‘0’ no use, or ‘1’ use) between species ‘a’ and species ‘b’.
ethnobotanydata %>% filter(sp_name == "sp_a")
sp_a_data <-
ethno_boot(sp_a_data$Use_3, statistic = mean, n1 = 1000)
sp_a_use <-
ethnobotanydata %>% filter(sp_name == "sp_b")
sp_b_data <-
ethno_boot(sp_b_data$Use_3, statistic = mean, n1 = 1000) sp_b_use <-
We can calculate the 90% credible interval to determine the lower bound of 0.27 and upper bound of 0.64 for species ‘a’ and 0.11 and upper bound of 0.43 for species ‘b’.
quantile(sp_a_use, c(0.05, 0.95))
#> 5% 95%
#> 0.26600 0.63605
quantile(sp_b_use, c(0.05, 0.95))
#> 5% 95%
#> 0.1080 0.4281
Running ethno_boot
returns a posterior distribution of the result. Plotting these can give some visual probability estimation of differences between the species or informants according to the various indices.
Create a data frame and use the melt
function to reshape data for the ggplot2
plotting functions.
data.frame(sp_a_use, sp_b_use)
boot_data <-
reshape2::melt(boot_data)
ethno_boot_melt <-#> No id variables; using all as measure variables
Use the ggplot2
and ggridges
libraries to plot the data as smooth histograms.
::ggplot(ethno_boot_melt, aes(x = value,
ggplot2y = variable, fill = variable)) +
ggridges::geom_density_ridges() +
ggridges::theme_ridges() +
theme(legend.position = "none") +
labs(y= "", x = "Example Bayesian bootstraps of three use categories")
#> Picking joint bandwidth of 0.0235
The ethno_bayes_consensus
function is inspired by AnthroTools
package (Lane and Purzycki. 2016). It gives us a measure of the confidence we can have in the reported uses by creating a matrix of probability values. These represent the probability that informant citations for a given use are ‘correct’ (see Oravecz, Vandekerckhove, and Batchelder 2014; Romney, Weller, and Batchelder 1986).
The inputs to the function are informant responses to the use category for each plant, an estimate of informant’s with the plant, and the number of possible answers. This can be calculated with URsum
or given as a value.
Depending on the size of the data this function can return a rather large set of probabilities. There are several ways to perform simple visualizations of these probabilities. Here we use the base R function heatmap
(R Core Team 2019) and the the dplyr
functionfilter
(Wickham et al. 2019) to subset to a single species and create a ridge plot.
dplyr::filter(ethnobotanydata, sp_name == "sp_a") ethno_sp_a <-
Generate prior probabilities for all answers as a matrix. If this is not provided the function assumes a uniform distribution (prior = -1)
. The probability table should have the same number of columns as uses in the provided ethnobotany data and the same number of rows as there are possible answers for the consensus.
First we set the number of possible answers to ‘2’. This means informants can either agree it is ‘used’ or ‘not used’.
2 answers <-
It is also possible to build the probability table manually using prop.table
(R Core Team 2019). This can be easier if there are many answers or if there is not always a clear preference about where the higher probability should be for the various answers. This matrix must sum up to 100% chance for either ‘use’ or ‘no use’.
Here we use the dplyr
function recode
to reset the informant name factor variable as numeric (Wickham et al. 2019). This way we can set a prior for the informants skill for the prior_for_answers
input. Assuming that informants have a varying degree of skill that we can assign as a prior for the likelihood that the data we have are correct for sp_a
.
dplyr::recode(ethno_sp_a$informant,
ethno_compet_sp_a <-inform_a = 0.9,inform_b = 0.5,inform_c = 0.5,
inform_d = 0.9, inform_e = 0.9, inform_f = 0.5,
inform_g = 0.7,inform_h = 0.5,inform_i = 0.9,
inform_j= 0.9, inform_eight = 0.9,inform_five = 0.6,
inform_four = 0.5,inform_nine = 0.9,
inform_one = 0.5, inform_seven = 0.5,
inform_six= 0.9, inform_ten = 0.9,
inform_three = 0.9, inform_two = 0.5)
Run the ethno_bayes_consensus
function on the subset data of sp_a
.
ethnobotanyR::ethno_bayes_consensus(ethno_sp_a,
ethno_sp_a_bayes <-answers = 2,
#here we keep the default normal distribution with `prior = -1`
prior_for_answers = ethno_compet_sp_a)
Create a simple heatmap of the results. The heatmap
function in R (R Core Team 2019) provides a good initial assessment of the results and can be a nice first look at the probability matrix that comes out of the ethno_bayes_consensus
function. It includes the hclust
hierarchical cluster analysis using euclidean distance for relationships among both the answers and the uses. This may be useful for looking for similarities among a number of uses or possible answers when there are more than just ‘use’ and ‘non use’ (see below).
heatmap(ethno_sp_a_bayes)
Here the ‘1’ and ‘2’ represent ‘use’ and ‘no use’ (y-axis). The colors are the probabilities (darker is greater). The hclust
for these is not very informative since there are only 2. However, the hclust
for the various uses (x-axis) might be helpful in thinking about how the strength of the information about different use categories for sp_a
are grouped together.
Users often have a large number of counts in cells of the data set after categorization (i.e one user cites ten different ‘food’ uses but this is just one category). Let’s say that the theoretical maximum number of use reports in one category, for one species by one informant is 10. It may be useful to work with these richer datasets for the Bayes consensus analysis. The ggplot2
and ggridges
libraries can be used to plot the data as smooth histograms. Here we generate some ethnobotany data with up to 10 citations in a single use category for a species by one informant.
set.seed(123) #make random number reproducible
data.frame(replicate(3,sample(0:10,20,rep=TRUE)))
ethno_sp_a_rich <-names(ethno_sp_a_rich) <-
gsub(x = names(ethno_sp_a_rich),
pattern = "X", replacement = "Use_")
$informant <- sample(c('User_1', 'User_2'),
ethno_sp_a_rich20, replace=TRUE)
$sp_name <- sample(c('sp_a'),
ethno_sp_a_rich20, replace=TRUE)
Define the prior_for_answers
of the data from these new informants in the simulated ethnobotany data. With User_1
we have high confidence because perhaps we gather this information through ‘walk in the woods’ or another method we feel good about. With User_2
we assign less confidence. Maybe did our work in a rush or gathered in another way that gives us less confidence.
ethno_compet_sp_a_rich <- dplyr::recode(ethno_sp_a_rich$informant,
User_1 = 0.9, User_2 = 0.5)
We keep a normal prior for the data and the knowledge of the informants.
ethnobotanyR::ethno_bayes_consensus(ethno_sp_a_rich,
ethno_sp_a_bayes <-answers = 10,
prior_for_answers = ethno_compet_sp_a_rich,
prior=-1) #keep a normal prior in this example with -1
Create a data frame and melt for the ggplot2
plotting functions.
ethno_sp_a_bayes %>%
ethno_sp_a_bayes_melt <- as.data.frame() %>%
reshape2::melt()
#> No id variables; using all as measure variables
Use the ggplot2
and ggridges
libraries to plot the data as smooth histograms.
::ggplot(ethno_sp_a_bayes_melt, aes(x = value,
ggplot2y = variable, fill = variable)) +
ggridges::geom_density_ridges() +
ggridges::theme_ridges() +
theme(legend.position = "none")+
labs(y= "", x = "Example ethno_bayes_consensus of use categories for sp_a")
#> Picking joint bandwidth of 0.00853
Visualizing the variation in outcomes can be useful for assessing the amount of confidence we have in the cultural use of the plant across categories.
Albuquerque, Ulysses P., and J. A. Hurrell. 2010. “Ethnobotany: One Concept and Many Interpretations.” Recent Developments and Case Studies in Ethnobotany, 87–99.
Albuquerque, Ulysses P., Reinaldo FP Lucena, Julio M.Monteiro, Alissandra TN Florentino, and Cecilia de Fatima CBR Almeida. 2006. “Evaluating Two Quantitative Ethnobotanical Techniques.” Ethnobotany Research and Applications 4: 51–60. https://doi.org/10125/237.
Albuquerque, Ulysses P., Patricia Muniz de Medeiros, Washington Soares Ferreira Junior, Taline Cristina da Silva, Rafael Ricardo Vasconcelos da Silva, and Thiago Gonçalves-Souza. 2019. “Social-Ecological Theory of Maximization: Basic Concepts and Two Initial Models.” Biological Theory. https://doi.org/10.1007/s13752-019-00316-8.
Bache, Stefan Milton, and Hadley Wickham. 2014. Magrittr: A Forward-Pipe Operator for R. https://CRAN.R-project.org/package=magrittr.
Friedman, J., Z. Yaniv, A. Dafni, and D. Palewitch. 1986. “A Preliminary Classification of the Healing Potential of Medicinal Plants, Based on a Rational Analysis of an Ethnopharmacological Field Survey Among Bedouins in the Negev Desert, Israel.” Journal of Ethnopharmacology 16 (2-3): 275–87.
Gaoue, Orou G., Michael A. Coe, Matthew Bond, Georgia Hart, Barnabas C. Seyler, and Heather McMillen. 2017. “Theories and Major Hypotheses in Ethnobotany.” Economic Botany 71 (3): 269–87. https://doi.org/10.1007/s12231-017-9389-8.
Gu, Zuguang, Lei Gu, Roland Eils, Matthias Schlesner, and Benedikt Brors. 2014. “Circlize Implements and Enhances Circular Visualization in R.” Bioinformatics 30 (19): 2811–2.
Lane, Alastair Jamieson, and Benjamin Grant Purzycki. 2016. AnthroTools: Some Custom Tools for Anthropology.
Oravecz, Zita, Joachim Vandekerckhove, and William H. Batchelder. 2014. “Bayesian Cultural Consensus Theory.” Field Methods 26 (3): 207–22. https://doi.org/10.1177/1525822X13520280.
Prance, G. T., W. Balee, B. M. Boom, and R. L. Carneiro. 1987. “Quantitative Ethnobotany and the Case for Conservation in Amazonia.” Conservation Biology 1 (4): 296–310.
R Core Team. 2019. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Reyes-Garcia, V., T. Huanca, V. Vadez, and W. Leonard. 2006. “Cultural, Practical, and Economic Value of Wild Plants: A Quantitative Study in the Bolivian Amazon.” Economic Botany.
Romney, A. Kimball, Susan C. Weller, and William H. Batchelder. 1986. “Culture as Consensus: A Theory of Culture and Informant Accuracy.” American Anthropologist 88 (2): 313–38. https://www.jstor.org/stable/677564.
Tardio, Javier, and Manuel Pardo-de-Santayana. 2008. “Cultural Importance Indices: A Comparative Analysis Based on the Useful Wild Plants of Southern Cantabria (Northern Spain) 1.” Economic Botany 62 (1): 24–39.
Whitney, Cory W., Joseph Bahati, and J. Gebauer. 2018. “Ethnobotany and Agrobiodiversity; Valuation of Plants in the Homegardens of Southwestern Uganda.” Ethnobiology Letters 9 (2): 90–100. https://doi.org/10.14237/ebl.9.2.2018.503.
Wickham, Hadley, Romain François, Lionel Henry, and Kirill Müller. 2019. Dplyr: A Grammar of Data Manipulation. https://CRAN.R-project.org/package=dplyr.
Wilke, Claus O. 2019. Cowplot: Streamlined Plot Theme and Plot Annotations for ’Ggplot2’. https://CRAN.R-project.org/package=cowplot.
The example ethnobotanydata
is included with the ethnobotanyR
package but can also be downloaded from GitHub https://github.com/CWWhitney/ethnobotanyR/tree/master/data.↩︎