
BiodiversityR versions

	This ChangeLog provides information on new functions integrated in the package and some 
	required updates. Updates related to error messages for new versions of the base and 
	loaded packages are typically not included here (as these were addressed).

	BiodiversityR details on installation are available from:
	http://www.worldagroforestry.org/output/tree-diversity-analysis

	The manual accompanying the original version of BiodiversityR is available from:
	http://www.worldagroforestry.org/downloads/Publications/PDFS/B13695.pdf

	An article that documents the ensemble suitability modelling options of BiodiversityR
	is available from https://doi.org/10.1016/j.envsoft.2017.11.009
	(You could also be interested in https://www.cifor-icraf.org/knowledge/publication/8977/).

	Various scripts for creating publication-ready graphs with ggplot2 are available from:
	https://rpubs.com/Roeland-KINDT


Version 2.17-3 (August 2025)

  * Addressed errors caused by the archiving of package blockCV on 2025-07-30
  * Removed function spatialsample() as submission to CRAN reported that package splancs
  did not exist (as reported by noSuggests testing). Function spatialsample was used for
  some examples in the Tree Diversity Analysis manual.


Version 2.17-2 (April 2025)

  * Modified nested.npmanova() based on suggestions by Jari Oksanen about the adonis2()
  function (see also: https://github.com/vegandevs/vegan/issues/677).
  
  * Modified nested.anova.dbrda() based on suggestions by Jari Oksanen about suppressing
  messages (see also: https://github.com/vegandevs/vegan/issues/682).
  
  * Modified documentation for caprescale() to use scores() instead of summary(), as also
  done internally in the function (see version 2.17-1).


Version 2.17-1.1 (January 2025 correction)

  * Inclusion of the modified caprescale() function created for version 2.17-1, something that
  was not achieved during the previous submission (see also vegan announcement #644)


Version 2.17-1 (January 2025; King Gizzard & the Lizard Wizard US Tour 2024 live captures 
by Chris Dempsey version)

  * New function treegoer.position() that calculates the position of the planting site in
  respect to the median of the species range
  
  * New function treegoer.map() that creates a suitability map with the same methods as
  used by treegoer.score().
  
  * Updated treegoer.widen() to be compatible with treegoer.position().
  
  * Expanded functions treegoer.score() and treegoer.filter() to accommodate a climate score
  of 0.5 for one-sided checks whether the planting site is outside the species' ranges.
  
  * Modified functions caprescale(), to use the vegan::scores() function instead of 
  vegan:::summary.cca() (see also vegan announcement #644)
  
  * Compatible with Rcmdr version 2.9-5



version 2.16-1 (March 2024; King Gizzard & the Lizard Wizard at the PALP Rocklette 
Festival in August 2023 version)

  * New functions treegoer.score(), treegoer.filter() and treegoer.widen() that calculate
  a climate score similar to the algorithms that are used internally in the
  GlobalUsefulNativeTrees database with environmental ranges documented by the Tree
  Globally Observed Environmental Ranges database.


version 2.15-4 (October 2023)

  * Removed references to rgeos in the documentation for function ensemble.chull.create()
  that caused messages of 'unknown package'.
  
  * Include pvclust among the suggested packages (See also documentation for function 
  pvclust.long()).
  
  * Made changes to be compatible with Rcmdr 2.9-1.


version 2.15-3 (September 2023)

  * Modified function ensemble.envirem.run to use envirem::generateEnvirem()
  
  * Included reference to TreeGOER: A database with globally observed environmental ranges 
  for 48,129 tree species. Global Change Biology https://doi.org/10.1111/gcb.16914


version 2.15-2 (May 2023)

  * New function ensemble.Tjur() to calculate Tjur's Coefficient of Discrimination for
  logistic regression models.
  
  * Modified function ensemble.evaluate() to include results from ensemble.Tjur().
  
  * Corrected function ensemble.envirem.run() to work with newer versions of terra.
  
  * Updated citation of van Zonneveld et al. 2023 in the documentation of function
  ensemble.concave.hull().


version 2.15-1 (January 2023; King Gizzard & the Lizard Wizard Omnium Gatherum version)

  * Removed dependencies on rgdal, rgeos and maptools (requested by Roger Bivand on 19-DEC)
  
  * New function ensemble.outliers() to identify outliers in multivariate space based on
  user-defined number of variables and multiples of interquartile range distance.
  
  * Modified function ensemble.chull.create() to remove use of rgeos::gBuffer.
  
  * Modified function ensemble.plot() to remove use of maptools 'wrld_simpl' data set.
  
  * Modified function ensemble.chull.apply() to save the masked suitability rasters in the
  'chull' subdirectory rather than overwriting the input files.
  
  * The default output format for ensemble suitability methods that use the raster package
  was modified to GTiff for functions ensemble.analogue(), ensemble.batch(), 
  ensemble.bioclim(), ensemble.chull.create(), ensemble.chull.apply(), 
  ensemble.ecocrop(), ensemble.habitat.change(), ensemble.mean(), ensemble.novel(), 
  ensemble.raster() and ensemble.zones().
  
  * Function ensemble.batch() now uses the 'GTiff' output format.
  
  * KML output is no longer supported, modified for functions ensemble.analogue(), 
  ensemble.batch(), ensemble.bioclim(), ensemble.habitat.change(), ensemble.mean(), 
  ensemble.novel(), ensemble.raster() and ensemble.zones().
  
  * New option of 'hellinger' for argument 'dist' in function dist.eval().
  
  * New option of by="onedf" for anova.cca() implemented in the Constrained Ordination
  Graphical User Interface.


Version 2.14-4 (September 2002)

	* Made compatible with Rcmdr version 2.8-0 as the Graphical User Interface could not be
	launched otherwise with function BiodiversityRGUI()


Version 2.14-3 (August 2022)

	* Removed suggested package akima (email from Prof. Ripley 4-JUN-2022). Function 
	residualssurface() was removed.

	* New argument of 'aitchison_pseudocount' in function CAPdiscrim() to allow the new
	methods of 'aitchison' and 'robust.aitchison' from vegan::vegdist().

	* Added options of 'aitchison' and 'robust.aitchison' to documentation options of 
	distdisplayed().

	* Function nested.npmanova() now uses vegan::adonis2().

	* Functions diversityresult(), diversitycomp() and diversityvariables() now include
        options for the unbiased Simpson calculated via function vegan::simpson.unb()

	* GUI now includes 'aitchison' and 'robust.aitchison' among options for calculations of
	distances matrices. Note, however, that such methods may only work when calculating the
	distance matrix first before using other methods such as ordination methods.

	* Diversity calculation GUI now includes the options of 'simpson.unb' and 
	'simpson.unb.inverse'.

	* BiodiversityR now depends on vegan version 2.6-2.


Version 2.14-2 (April 2022)

	* New functions ensemble.concave.hull(), ensemble.concave.venn() and 
	ensemble.concave.union() that enable analysis of niche overlaps in environmental space
	for different combinations of climates and geographical origins of accessions via 	
	concave or convex hulls, building on methods used by Pironon et al. 2019.
	https://doi.org/10.1038/s41558-019-0585-7.

	* New functions ensemble.envirem.masterstack(), ensemble.envirem.solradstack() and 
	ensemble.envirem.run() that allow to calculate an expanded set of bioclimatic variables
	via teh envirem package with data.frames as input.

	* Function ensemble.environmentalThin() was modified to result in exactly the 
	target number of environmentally-thinned locations.
  
	* The speed of function ensemble.ecocrop() was increased. The function now also works
	with the SpatRaster objects of the terra package. Note that the setting of argument
	temp.multiply was changed from 10 to 1 to work with later versions of WorldClim.


Version 2.14-1 (January 2022; Ty Segall's Harmonizer version)

 	* New function ensemble.terra() that creates raster files via the terra package with 
	similar functionality as ensemble.raster.
  
	* ensemble.calibrate.models() and ensemble.calibrate.weights() functions now work with
	package terra's SpatRaster objects (and still with package raster's rasterStack 
	objects).

 	* ensemble.PET.season(), ensemble.PET.seasons(), ensemble.prec.season(), 
	ensemble.tmean.season() and ensemble.season.suitability() functions now work with 
	package terra's SpatRaster objects (and still with package raster's rasterStack and
	rasterLayerobjects).

	* Removed dependency on the orphaned 'maptree' package. Used previously for an option
	of 'kgs' in the clustering GUI.

	* Compatible with Rcmdr version 2.7-2 (January 2022)


Version 2.13-1 (April 2021)

	* New functions ensemble.spatialBlock and ensemble.envBlock that allow for 
	stratification methods available via the blockCV package. These functions were modified
 	from functions available previously from the ensemble.blockCV package.

	* New function pvclust.long that allows plotting of results from pvclust onto
	ordination diagrams.

	* New functions ensemble.PET.seasons, ensemble.prec.season and ensemble.tmean.season
	that return raster layers with the number of growing periods, their starts and lengths,
	and the precipitation and mean temperatures of a selected (growing) period.

	* New function ensemble.season.suitability that enables the calculation of crop
	suitability from ecocrop-like thresholds and growing season temperature and
	precipitation.

	* Readme file 


Version 2.12-3 (December 2020)

	* Moved package rgl to Suggests as requested by prof. Brian D Ripley (13-DEC-2020)

	* Moved package vegan3d to Suggests

	* Removed calls to rgls and vegan3d in function BiodiversityRGUI

	* New function ordiellipse.long that can be used to plot ordination diagrams via 
	ggplot2.

	* New plot options of 'ggplot (ordiellipse)' in the constrained and unconstrained 
	ordination GUIs.

	* Included references to https://rpubs.com/Roeland-KINDT in the documentation where
	options for ggplot2 graphics were shown.


Version 2.12-2 (November 2020; Fuzz III version )

	* New functions sites.long, species.long, centroids.long, vectorfit.long, 
	ordisurfgrid.long and axis.long that extract data in the 'long' (tidy) format and that
	can subsequentially be used to plot ordination diagrams via ggplot2. Various examples
	are provided in the documentation, including cases where concave hulls and 
	superellipses are drawn via the ggforce package.

	* New function accumcomp.long that extracts data in the 'long' (tidy) format from a
	accumcomp result and that can subsequentially be used by ggplot2.

	* New function renyicomp.long that extracts data in the 'long' (tidy) format from a
	renyicomp result and that can subsequentially be used by ggplot2.

	* New function renyi.long that extracts data in the 'long' (tidy) format from a   
	renyiresult and that can subsequentially be used by ggplot2.

	* New arguments of 'return.data' and 'specnames' that result in function rankabuncomp
	to return data that can be used to plot rank abundance curves via ggplot2. Examples were
	included in the documentation for rankabuncomp.

	* New argument of 'extracted.data' in function 'ensemble.environmentalThin' that avoids
	the step of extracting environmental data at the provided locations.

	* New argument of 'poly.only' in function ensemble.chull.create that results in only
	returning the convex polygon.

	* New plot methods of 'ggplot (ordisymbol1)', 'ggplot (ordisymbol2)', 
	'ggplot (ordispider1)', 'ggplot (ordispider2)', 'ggplot (ordisurf1)', 
	'ggplot (ordisurf2)', 'ggplot (add species)' and 'ggplot (add vector)' in the 
	unconstrained ordination and constrained ordination GUIs. Except from the latter two
	options, each method generates a ggplot2 graph ('plotgg1') based on information
	available in an ordiplot object ('plot1') and ordination result. The latter two options
	add information on species or continuous variables to 'plotgg1', resulting in 'plotgg2'.
	As for other scripts generated by the GUIs of BiodiversityR, it is expected that users
	will further modify these scripts to get exactly the graphs that are wanted.

	* New option in the Species accumulation curves, Renyi profiles and Rank abundance 
	curves GUI of 'ggplot'. These require that first the appropriate object (eg the result
	from accumcomp) was generated.

	* New feature for the Compare distance matrices GUI with betadisper options to also 
	provide results for pairwise permutation tests.

	* New accumulation method in the Species accumulation curves GUI to explicitly refer
	to the rarecurve function (previously this method was available via plot, but data
	used were not shown).


Version 2.12-1 (July 2020; Wand's Ganglion Reef + 1000 Days version)

	* New function ensemble.PET.season that calculates the maximum climatological water
	deficit (accumulated aridity), corresponding to the dry season with the largest 
	accumulated difference between precipitation and potential evapotranspiration. The
	methodology is the same as Aragao et al. 2007 (Spatial patterns and fire response of
	recent Amazonian droughts. Geophysical Research Letters 34(7)), but the function uses
	monthly PET values instead of fixed values at 100 mm per month.

	* New function ensemble.chull.buffer.distances that give details on potential buffer
	widths of the ensemble.chull.create function.

	* New function ensemble.chull.MSDM that creates input data and a suggested script for
	the MSDM_Posteriori function of the MSDM package (Mendes, P.; Velazco S.J.E.; Andrade,
 	A.F.A.; De Marco, P. (2020) Dealing with overprediction in species distribution models:
	how adding distance constraints can improve model accuracy, Ecological Modelling, 
	in press.)

	* New argument 'TrainTestData' for function ensemble.calibrate.weights that allows the
	function to calibrate suitability models and weights for the ensemble model based on
	a data.frame. When providing k-fold arguments as a list, the user should ensure that 
	these match the number of presence and absence (background) records of the data.frame.

	* New argument 'buffer.maxmins' for function ensemble.chull.create that estimates the
	buffer width from the observation that is farthest away from its closest neighbour.

	* New argument 'lonlat.dist' for function ensemble.chull.create that calculates the 
	distance in km for analyses based on longitude-latitude coordinate systems

	* Modification in function ensemble.calibrate.models to fit MAXENT and MAXNET models
	with data.frames when raster stack is not provided.

	* New arguments of 'rainbow_hcl', 'rainbow_hcl.c', and 'rainbow_hcl.l' of ordisymbol to
	use the colorspace::rainbow_hcl palette and to modify chroma and luminance.

	* Internally modified the 'rainbow' palette of functions accumcomp, rankabuncomp and
	renyiplot to use the colorspace::rainbow_hcl palette

	* Modified overall colour scheme of the GUI plot options to rainbow_hcl of the 
	colorspace package

	* Expanded options in the presence-absence GUI for various models that are available
	also from the ensemble suitability modelling algorithms. These include GBM (gbm), 
	RF (randomForest), CF (cforest), EARTH (earth), RPART (rpart), NNET (nnet), FDA (fda),
	SVM (ksvm) and SVME (svm).

	* New option in the clustering GUI to use the fastcluster package.

	* New option in the clustering GUI for fuzzy K-means analysis via e1071::cmeans

	* New options in the clustering GUI for kernel K-means (kkmeans) and spectral clustering
	(specc) via the kernel package

	* New options in the clustering GUI to determine the number of clusters via the NbClust
	package.

	* New options in the clustering GUI to change branch and label colors of dendrograms
	via the color_branches and color_labels functions of the dendextend package 

	* New options in the clustering GUI to create heat maps via the aspectHeatmap of the 
	ClassDiscovery package

	* New option in the clustering GUI to create a heat map based on a Thresher analysis
	(available as plot option).

	* Corrected an error in function ensemble.batch of assigning absence locations.	
	

Version 2.11-3 (October 2019)

	* New function ensemble.SEDI that calculates the Symmetric Extremal Dependence Index 
	(SEDI), as formulated by Ferro et al. 2011. Wea. Forecasting 26: 699-713 and
	recommended as evaluation metric by Wunderlich et al. 2019. Nature Conservation 35: 
	97-116.

	* New function ensemble.evaluate that calculates the following evaluation statistics:
	AUC: Area Under The Curve for the testing ModelEvaluation; TSS: maximum value of the 
	True Skill Statistic over range of threshold values; SEDI: maximum value of the 
	Symmetric Extremal Dependence Index over range of threshold values; TSS.fixed: True 
	Skill Statistic at the fixed threshold value; SEDI.fixed: SEDI at the fixed threshold 
	value; FNR.fixed: False Negative Rate (= omission rate) at the fixed threshold value; 
	MCR.fixed: Missclassification Rate at the fixed threshold value; and AUCdiff: Difference
 	between AUC for calibration and the testing data 

	* Internally call ensemble.evaluate in function ensemble.calibrate.models

	* New function ensemble.VIF.dataframe that provides similar types of Variance Inflation
	Factor analysis for a data.frame as function ensemble.VIF

	* Decreased the step size for PresenceAbsence threshold calculations in function
	ensemble.threshold from 0.005 to 0.0001 (as in dismo::evaluate)

	* Corrected an error in function ensemble.mean when RASTER.stack.name=""

	* Methods and examples of generating and using spatial folds for presence and absence
	points via the blockCV package are available from the BiodiversityRblockCV package 
	(URL https://github.com/RoelandKindt/BiodiversityRblockCV) through functions 
	ensemble.spatialBlock and ensemble.envBlock (These functions are in a
	separate package as blockCV is not available from CRAN). Use the commands
	devtools::install_github("rvalavi/blockCV") and
	devtools::install_github("RoelandKindt/BiodiversityRblockCV") to install these packages.

	* example of calculating diversity profiles from importance values calculated with
	importancevalue.comp (email exchange with Uday Pimple)


Version 2.11-2 (June 2019)

	* new function ensemble.environmentalThin.clara that enables environmental thinning for
	large data sets. Prior to using function ensemble.environmentalThin internally in the 
	function, the points are first divided in clusters via the cluster.clara function. 
	Subsequently points in each cluster are environmentally thinned.
		
	* new option for ensemble.calibrate.weights to import k-fold groupings for presence and
	background points as a list with elements groupp (k-fold groupings for presence points)
	and groupa (k-fold groupings for background points). The option was inspired on using
	outputs from the blockCV package. The option is invoked by using the list as input for
	argument k of ensemble.calibrate.weights. 

	* modification in ensemble.environmentalThin to provide a final data set that matches
	the requested number of environmentally thinned points (previously the function stopped
	the second algorithm when the identified minimum distance was reached, in analogy to 
	the ensemble.spatialThin function).

	* modification in ensemble.environmentalThin to possibly retain only 1 axis if the 
	variance on 1 axis exceeds the selected threshold (the previous behaviour was to 
	select a minimum of 2 PCA axes).

	* new argument 'silent' for the ensemble.spatialThin, ensemble.environmentalThin and
	ensemble.spatialThin.quant functions, with option to have no reports on the processing
	of points.

	* new arguments 'cex.lab' and 'cex.axis' for the accumplot and accumcomp functions to 
	modify sizes of axis labels (requested by Julio Cesar Canales).

	* new options for the unconstrained and constrained ordination GUI to create 
	3-dimensional ordination graphics via the ordiplot3d, ordirgl, orglspider and 
	orglellipse functions of the vegan3d package.

	* additional options of 'ward.D', 'ward.D2' and 'mcquitty' for the cluster GUI.

	* new option 'labels (variable)' of the cluster GUI to change labels in dendrograms
	to data from the environmental data set.

	* new option in the Analysis of species abundance menu to summarize differences in 
	abundance with the Rmisc::summarySE function.

	* corrected an error in the ensemble.raster function where projection ran into problems
	with CATCH.OFF=FALSE for the GBM algorithm.

	* corrected the error of having no visible global definitions for 'data' and 
	'wrld_simpl' of the ensemble.plot function (error reported in the CRAN Package Check
	results)
	
	* corrected an error for the envfit plotting option of the ordination GUI where results
	of permutation tests were not shown

	* compatible with Rcmdr 2.5-3 (May 2019)


Version 2.11-1 (January 2019; Ty Segall & White Fence's Joy version)

	* new function ensemble.environmentalThin that provides a method similar to function
	ensemble.spatialThin, but operates in environmental instead of geographical space. The
	environmental space is represented by principal components obtained via vegan::rda.
	The user needs to define the target number of environmentally thinned points instead
	of the minimum distance.

	* new function ensemble.outlierThin that filters out point observations that could be
	outliers based on a Local Outlier Factor analysis.

	* new function ensemble.spatialThin.bins that enables spatial thinning for large data
	sets. With the function, points are first classified in different bins. In the next
	step, spatial thinning is done for each bin. Bins are defined by quantile limits of
	geographical coordinates.

	* new argument of 'MAXNET' in ensemble.calibrate.models, ensemble.calibrate.weights, 
	ensemble.raster, ensemble.batch, ensemble.drop1, evaluation.strip.data and 
	evaluation.strip.plot functions, allowing for maximum entropy species distribution 
	modeling using glmnet for model fitting as implemented in the maxnet package.

	* new argument of 'CF' in ensemble.calibrate.models, ensemble.calibrate.weights, 
	ensemble.raster, ensemble.batch, ensemble.drop1, evaluation.strip.data and 
	evaluation.strip.plot functions, allowing for  random forest and bagging ensemble 
	algorithms utilizing conditional inference trees as base learners as implemented in the 
	party package. (Note that integration of cforest required modifications of 
	raster::predict that were integrated in raster version 2.8-19.)

	* new argument of 'target.groups' in ensemble.calibrate.models, 
	ensemble.calibrate.weights, ensemble.batch and ensemble.drop1 that results in 'target
	groups' of species that were all collected or observed using the same methods or
	equipment as for the species for which species distribution models are calibrated.
	See Phillips et al. 2009 https://doi.org/10.1890/07-2153.1 for details. When selecting 
	the option, users should provide the presence locations of the other species as
	background. For model calibrations and evaluations, pseudo-absence locations will 
	correspond to centres of cells with presence locations of the other species, possibly
	excluding cells where the focal species occurs (a similar option is available from
	dismo::randomPoints). Feature requested by Tobias Fremout.

	* new argument of 'block.default' in ensemble.calibrate.weights and ensemble.batch that
	results in different options of blocking point data sets (first by latitude as only 
	option available from ENMeval::get.block [i.e. the default], or first by longitude).
	Feature suggested by Evert Thomas.

	* new argument of 'get.subblocks' in ensemble.calibrate.weights and ensemble.batch that
	results in a double implementation of ENMeval::get.block, whereby point data sets 
	assigned to one block in the first step are again assigned to four blocks ('subblocks')
	in a second step.

	* corrected error in ensemble.spatialThin to allow retaining only 1 point in case that
	the random elimination process retained two points above the minimum distance in the
	previous elimination step.

	* modified ensemble.spatialThin to round geographical distances to 2 decimals (10 m)	

	* ensured that ensemble.raster function only retained numeric variables for maxlike and
	glmnet algorithms in situations where categorical variables were used by other 
	algorithms.

	* corrected error for GBMSTEP and probit links where the gbm.x argument did not select
	the correct explanatory variables

	* compatible with Rcmdr 2.5-1 (September 2018)

	* new option in the GUI to import Excel data sets via readxl::read_excel

	* modified edit of community and environmental data sets in the GUI to be more
	similar to edit options of the R-Commander

	* new GUI for spatial and environmental thinning of point observation data


Version 2.10-1 (July 2018)

	* new function ensemble.red that calculates statistics of Area of Occupancy (AOO) and
	Extent of Occurrence (EOO) that are used as thresholds for the IUCN Red List (URL 
	http://www.iucnredlist.org/static/categories_criteria_3_1). AOO and EOO are expected
	to be calculated for 'count' suitability layers that represent different levels of 
	consensus among ensembles or algorithms. AOO and EOO are calculated via the red package.

	* new functions ensemble.chull.create and ensemble.chull.apply that restrict suitable
	habitat to polygons that are included in a convex hull around known presence locations.
	The convex hull is expanded by a user-defined buffer based on the maximum distance among
	the known presence locations.

	* new function ensemble.pairs that creates scatterplots similar to graphics::pairs

	* new function BiodiversityR.changeLog

	* corrected error in ensemble.VIF where keeping explanatory variables resulted in 
	never-ending loops if VIF of some kept explanatory variables was above VIF.max

	* compatible with Rcmdr 2.4-4 (April 2018)

	* Species accumulation GUI plots horizontal error bars (via argument ci.length for 
	plotting of specaccum objects)

	* Distance matrix calculation GUI now includes the possibily to directly calculate the
	Hellinger and Chord distances.

	* Distance matrix calculation GUI now includes the scaled Hellinder and Chord distances
	(Conde and Dominguez 2018. https://doi.org/10.1016/j.japb.2018.01.001).

	* Clark's 1952 coefficient of divergence (appropriate for the analysis of species 
	abundance data; Legendre and Legendre 2012 p. 306) was included among the options
	in distance, ordination and clustering GUIs.

	* vegan::avgdist function was included as option in the Distance matrix calculation GUI

	* vegan::chaodist function was included as option in the Distance matrix calculation GUI

	* Ensemble suitability modeling GUI now allows for the option that absence locations
	are NULL - i.e. allowing for random selection of background locations during each run.

	* Corrected error generated by constrained ordination GUI by calling vegan::goodness for
	capscale results (this option is no longer available for vegan >= 2.5-1).

	* Corrected errors generated by constrained ordination GUI by calling vegan::inertcomp
	in vegan >= 2.5-1


Version 2.9-2 (27 February 2018)

	* modified gam (version 1.13 of 2018-02-25) functions to gam::predict.Gam and 
	gam::step.Gam in ensemble.calibrate.models, ensemble.raster and evaluation.strip.data
	to safely retain BiodiversityR on CRAN (problems reported on 2018-02-26).

	* corrected error in for R-devel for rankabuncomp

	* new argument 'srt' for rankabunplot to allow rotation of species labels in rank-
	abundance graphs

	* new method 'max' for diversityresult and diversitycomp functions


Version 2.9-1 (February 2018; Ty Segall's Freedom's Goblin version)

	* new function ensemble.spatialThin that creates a spatially thinned point location
	data set where all pairwise distances are above a threshold distance. Although similar
	to functions in the spThin or red packages, the geodesic is calculated more accurately
	via the geosphere package. The function was documented separately and also was 
	integrated in the ensemble.batch function.

	* an article that documents the ensemble suitability modelling options of BiodiversityR
	has been published (Kindt R. 2018. Ensemble species distribution modelling with 
	transformed suitability values. Environmental Modelling & Software 100: 136-145. URL 
	https://doi.org/10.1016/j.envsoft.2017.11.009. References to this article has been
	included in the documentation of various functions.

	* a new argument of 'keep' in ensemble.VIF allows to always keep a subset of
	explanatory variables within the final subset of variables

	* in the output of the ensemble.mean function, niche overlap between input suitability
	layers and the mean (consensus) layer is calculated via Warren's I index that is based
	on the Hellinger distance (dismo::nicheOverlap; Warren et al. 2008. Evolution 
	62-11: 2868?2883)

	* in the ensemble.batch function, random selection of background locations (if an 
	option) is repeated in each run

	* included options in ensemble.plot to specify colours for absence and presence 
	suitabilities, including a new option only to plot areas where the species is predicted
	to be present. (Also included an example how to generate the colour scheme used in the
	http://www.worldagroforestry.org/atlas-central-america climate change atlas.)

	* It is now possible to disable calls to the tryCatch function in the ensemble 
	suitability (parameter CATCH.OFF). This option was implemented to facilitate error 
	checking (such as problems when not all packages were installed).

	* An error was encountered when attempting to plot evaluation results. This error seems
	to be caused by interpretation of the ModelEvaluation signature. The error was 
	circumvened by disabling plotting in the ensemble functions, but giving an example of
	getting plot results in the examples. Error reported by Thomas Fremout 22-JAN-2018.

	* the location of the dismo examples folder is provided explicitly in the GUI for 
	creation of raster stacks


Version 2.8-4 (September 2017)

	* compatible with Rcmdr 2.4-0 (August 2017)


Version 2.8-3 (June 2017)

	* corrected error that prevented loading of the Graphical User Interface after previous
		workspace was saved

	* corrected error in function multiconstrained

	* option added of method="dbrda" in function multiconstrained


Version 2.8-2 (May 2017)

	* full integration of the MAXLIKE algorithm in ensemble suitability modelling

	* new argument of 'get.block' in ensemble.calibrate.weights and ensemble.batch. 
		The argument splits 4-fold cross-validation presence and background point 
		location data sets along longitudinaland latidudinal lines through function 
		get.block of the ENMeval package.

	* new argument of 'mmax' in the CAPdiscrim function. This argument limits the search for
		the optimal m (number of PCoA axes) to a a maximum number of axes equal to mmax.
		The argument was introduced to deal with the lda error of a variable appearing 
		to be constant within groups. 

	* function CAPdiscrim saves correct predictions per factor level

	* function ordisymbol now allows different palettes

	* errors corrected in the 'diversity indices' menu in saving results in the 
		environmental data set

	* function evaluation.strip.data includes suitability values prior to the probit
		transformation. Errors obtained for MAHAL, MAHAL01 and DOMAIN algorithms were
		corrected for the same function.


Version 2.8-1 (January 2017, malaria recovery version)

	* compatible with Rcmdr	2.3-1 (October 2016)

	* BiodiversityRGUI function gives information on backward compatibility with prior
		versions of BiodiversityR

	* new function ensemble.calibrate.models that replaces function ensemble.test.
		The original name of ensemble.test originated from the first (2012) versions of 
		ensemble suitability modelling functions in BiodiversityR where both 
		ensemble.raster and ensemble test internally calibrated and evaluated (tested)
		models, but only ensemble.raster went ahead with creating suitability raster 
		layers. For possible backwards compatibility, assign 
		ensemble.test <- ensemble.calibrate.models

	* new function ensemble.calibrate.weights that replaces function ensemble.test.splits

	* slot ensemble.calibrate.weights$AUC.table (ensemble.calibrate.weights) replaces 
		ensemble.calibrate.weights$table

	* argument SSB.reduce (ensemble.calibrate.models, ensemble.batch) replaces argument 
		CIRCLES.at

	* ensemble suitability layers are now create in different 'ensemble' subfolders
		subfolder 'suitability' contains suitability layers for each ensemble
		subfolder 'presence' contains presence layers for each ensemble
		subfolder 'count' contains number of algorithms predicting presence
		subfolder 'consensussuitability' contains consensus suitability layers
		subfolder 'consensuspresence' contains consensus presence layers
		subfolder 'consensuscount' contains count of ensembles predicting presence
		subfolder 'consenssd' contains consensus standard deviation

	* new function ensemble.VIF that selects subsets of explanatory data layers until all
		Variance Inflation Factors are below a user-defined threshold (default: 10).
		By an iterative procedure, the data layer with largest VIF is removed in each
		step. The function is called from within the ensemble.batch function.

	* new function ensemble.bioclim that provides an algorithm that more closely represents
		the original BIOCLIM algorithm than function dismo::bioclim

	* new function ensemble.bioclim.graph that graph function makes graphs that show mean, 
		median, minimum, maximum and lower and upper limits for species or climates

	* new function stackcommunitydataset that creates a data.frame with separate columns
		for sites, species and abundance values (therefore the inverse function of
		makecommunitydataset). Function is useful to combine information from 
		different community data sets into one community data set.

	* new option for including the glmnet algorithm in ensemble suitability modelling. 
		Option available via argument of GLMNET in ensemble.calibrate.models, 
		ensemble.batch, GUI interface and other functions.

	* new option for including the maxlike algorithm (Royle et al. 2012. Methods in Ecology
		and Evolution) in ensemble suitability modelling. However, because the maxlike
		function does not accept data frames for model calibration and the predict
		function does not have a newdata argument, inclusion of the algorithm is 
		problematic and may often not be available (as in evaluation.strip.data)
		or fail (Roeland will write a new email to the authors of maxlike indicating
		the need to expand maxlike to handle data frames).

	* new option for including a modification of the dismo::mahal algorithm to ensure
		that predictions are within the 0 to 1 range similar to probabilities. Option
		available via argument of MAHAL01 and MAHAL.shape in ensemble.calibrate.models, 
		ensemble.batch, GUI interface and other functions with 

	* new output of the ensemble.batch function to report which ensemble had the best
		overall AUC. (This option can be used to plot count models

	* new options for ensemble.threshold
		threshold.method == "threshold2013.mean" provides the mean threshold of
			optimal thresholds identified by Liu et al. 2013. Journal of 
			Biogeography 40: 778-789
		threshold.method == "threshold2013.min" provides the minimum threshold of
			optimal thresholds identified by Liu et al. 2013. Journal of 
			Biogeography 40: 778-789		
		threshold.method == "threshold2005.mean" provides the mean threshold of
			optimal thresholds identified by Liu et al. 2005. Ecography 28: 
			385-393
		threshold.method == "threshold2005.min" provides the minimum threshold of
			optimal thresholds identified by Liu et al. 2005. Ecography 28: 
			385-393		

	* change of handling of data extraction from raster stacks with only 1 layer

	* internal change of raster extent no longer possible with main ensemble functions.
		Hence rasterstack objects should be modified prior to using them in
		ensemble functions.

	* change of implementation in ensemble.calibrate.models whereby dummy variables
		are no longer excluded for BIOCLIM and BIOCLIM.O algorithms

	* change of implementatin in ensemble.calibrate.models whereby only dummy variables
		with no variation are excluded for the DOMAIN algorithm

	* new option for ensemble.drop1 to also fit models with only the focal variable.
		Option available via argument of variables.alone = TRUE.

	* new option for ensemble.novel.object to exclude factor variables. The documentation
		was updated to show dealing with factor variable through dummy variables.

	* new option for ensemble.dummy.variables to create dummy variables for levels not
		observed in the input factor layer

	* increased output of ensemble.calibrate.models and ensemble.calibrate.weights to
		show how ensemble weights are determined (input weights, parameters and
		output weights)

	* warning message in ensemble GUI that title of calibration stack is expected to be
		the same as object name of the calibration stack

	* ensemble suitability calibration modelling allows to set VIF.max (maximum Variance
		Inflaction Factors of explanatory variables) and CIRCLES.d (the distance in m
		of circular neighbourhoods for testing background locations to reduce spatial
		sorting bias).

	* added example of superimposing GBIF locations in ensemble.ecocrop documentation

	* GUI option of showing calibration stack also provides names of factor variables,
		names of dummy variables and makes a plot of the calibration stack

	* Diversity indices menu now also accepts two factor variables to create a 2-way
		table with diversity statistics for each combination of factor levels

	* Added links from the GUI help to vignettes on diversity analysis in vegan and 
		ordination analysis in vegan. Also added link to the community analysis
		website of Jari Oksanen from the GUI help.


Version 2.7-2 (August 2016)

	* compatible with Rcmdr	2.3-0 (August 2016) and vegan 2.4-0 (June 2016)

	* new function ensemble.threshold to calculate threshold values to differentiate
		between absence and presence suitabilities. This function was used earlier
		only internally in the ensemble.test, ensemble.test.splits and ensemble.batch
		functions, whereas it is now available and documented as separarte function.

	* corrected error in makecommunitydataset (error reported by Pascal Hirsch)

	* Graphical User Interface (GUI) now supports following functions or options from 
	vegan:

		o dispweight function (via Transform community matrix menu)
		o fitspecaccum function (via options of "arrhenius", "gleason", "gitay", 
			"lomolino", "asymp", "gompertz", "michaelis-menten", "logis" and 
			"weibull" in Species accumulation curves menu)
		o specslope function (via options in Species accumulation curves menu)
		o rareslope function (via options in Species accumulation curves menu)
		o rarefy function  (via options in Species accumulation curves menu)
		o tsallis function (via options in Renyi profile menu)
		o tsallisaccum function (via options in Renyi profile menu)	
		o dbrda function (via Constrained ordination menu)
		o monoMDS function (via Unconstrained ordination menu)
		o stressplot function (via unconstrained and constrained ordination menus)
		o betadisper function (via Compare distance matrices menu)
		o designdist function (in Distance matrix calculation menu)
		o Lingoes and Cailliez adjustments for wcmdscale, capscale, dbrda and 
			betadisper
		o sqrt.dist argument for wcmdscale, capscale, dbrda and betadisper
		o descriptive string of "species" in scaling of ordination axes (via
			unconstrained and constrained ordination menus)
		o RsquareAdj function for cca, dbrda and capscale (in summaries of constrained 
			ordination)
		o ordibar function (via plotting functions for unconstrained and constrained
			ordination)
		o plotting factor levels in different colours with ordihull, ordiarrows, 
			ordisegments, ordispider, ordibar and ordiellipse (via plotting 
			functions for unconstrained and contrained ordination)
		o summary and ordiareatest for ordihull and ordiellipse (via plotting 
			functions for unconstrained and contrained ordination)
		o ehull option of ordiellipse ((via plotting functions for unconstrained 
			and contrained ordination))

	* change in calculation for ensemble.threshold function when using thresholds from the
		PresenceAbsence package with ensemble.threshold options of "threshold.mean"
		and "threshold.min": five thresholds from the PresenceAbsence package will
		be used (see Details)

	* new parameter ENSEMBLE.weight.min to set minimum output weight for ensemble.test,
		ensemble.test.splits and ensemble.batch. Note that parameter ENSEMBLE.min
		refers to the minimum input weight (and typically used to exclude algorithms
		with low AUC values).

	* ensemble.plot allows to add country boundaries (via maptools package)

	* ensemble.plot exports breaks and colours if only one suitability map is plotted

	* breaks are forced to be unique in ensemble.plot

	* ensemble.analogue gives warning is variables are very strongly correlated with 
	method 'mahal' (as algorithm my fail)

	* corrected problem in ensemble.novel function when x only has one layer

	* avoid error when launching the GUI when dismo package was not installed

	* corrected error in labeling the y-axis in reyniplot function (error reported by
	Mauricio Carrasquilla)


Version 2.7-1 (April 2016)

	* ensemble.batch: procedure stops when no algorithms retained in the k-fold
	cross-validation procedure

	* new Graphical User Interface (GUI) for renaming layer names of calibration
	and prediction stacks

	* included link to Hijmans RJ and Elith J. 2016. Species distribution modelling with R.	

	* options to set width and height of new graphical device for ensemble.plot,
	evaluation.strip.plot and ensemble.centroids functions. Setting any of these parameters
	to a value < 0 results in no opening of a new device .


Version 2.7-0 (March 2016)

	* new Graphical User Interface (GUI) for ensemble suitability modelling.
	Guidelines for getting started are available from the GUI and in the 'doc'
	folder of BiodiversityR

	* included the ensemble.mean function within ensemble.batch, so that
	ensemble.batch also produces the mean ('_MEAN_') ensemble files when several
	ensembles are calibrated via ensemble.batch

	* new function ensemble.plot, especially to apply a colourscheme that
	differentiates between suitabilities below and above a threshold that
	discriminates between predicted absence-presence of the organism

	* new feature in the evaluation.strip.plot to include a boxplot for the 
	presence locations of a data set used for model calibrations

	* included help buttons in various GUI windows


Version 2.6-1 (January 2016)

	* ensemble.centroid and ensemble.zones: New functions to determine centroid 
	locations in principal components space of presence locations of an organism. 
	Mahalanobis distance from centroid locations to map zones based on the
	minimum distance from centroid locations.

	* report information on spatial sorting bias in ensemble.test.

	* CIRLES.at and CIRCLES.d options in ensemble.test function to reduce spatial 
	sorting bias between evaluation presence and absence locations

	* threshold.PresenceAbsence option in ensemble.test to use the PresenceAbsence
	package to calculate absence-presence thresholds.
	
	* ensemble.novel: New function to map novel environmental conditions.
	
	* ensemble.area: New function to calculate areas of suitability raster maps.

	* ensemble.analogue: New function to map environmental (climate) analogues.
	
	* ensemble.ecocrop: New function to map suitability based on temperature 
	and rainfall optimal and absolute ranges.

	* corrected problem in handling probit-transformations in ensemble.raster function

	* started ChangeLog


Version 2.5-4 (September 2015)

	* compatibility with Rcmdr restored (eg qqPlot)

	* menu interface scripts updated	

	* new menu option of Analysis of diversity > Add diversity variables to data set

	* new menu option of silhouette in the Cluster analysis plot options


Version 2.5-3 (July 2015)

	* changes in the CAPdiscrim function to result in same results as PRIMER (problem
	handled by including as.dist() function prior to cmdscale() function).

	* new function importancevalue to calculate Importance Value Index, and new
	ifri data set (collaboration with the International Forestry Resources and Institutions 
	[IFRI] research network; http://www.ifriresearch.net)  

	* new menu option of replacing NA with 0 in the community data set

	* corrected problem in ensemble.test.splits function in obtain AUC-derived
	weights for submodels when weights are not tuned

	* ensured that subfolder to save models is created (ensemble.test function)
	
	* included package information for function visibility


Version 2-5.2 (April 2015)

	* included droplevels() function in function ensemble.test

	* avoiding loading of libraries in ensemble functions (including gam::s()
	for gam formula)

	* included topography-derived variables in BCI.env data (provided by P. Legendre)


Version 2-5.1 (November 2014)

	* menu option to remove species with zero total abundance

	* handle new 8-character species codes in vegan in examples

	* include options to plot as.phylo() cluster dendrograms

	* option to reorder cluster dendrograms

	* option to plot symbols in cluster diagrams

	* BiodiversityR start up message

	* expand vegan functions from menu interface (vegemite, tabasco, coverscale,
	screeplot, bioenv, betadisper, contribdiv, beals, betadiverr, wcmscale, pcnm,
	polaccum, estaccumR, eventstar, indpower, isomap, meandist, nestedchecker,
	nestedtemp, nestednodf, nestedbetasor, nestedbetajac, RsquareAdj, drarefy,
	simper, treeheight)

	* corrected problems with jackknife of diversity analysis (diversityresult
	function with method='jackknife')


Version 2-4.4 (May 2014)

	* new PROBIT option in ensemble.test function to transform outputs of 
	ensemble submodels with probit transformation (also supported in 
	ensemble.raster function)	

	* new ENSEMBLE.exponent option to modify weights of ensemble submodels
	in ensemble model by using exponent

	* corrected use of persp() for accumulated renyi profiles in menu interface


Version 2-4.1 (January 2014)

	* new functions of ensemble.simplified.categories and ensemble.dummy.variables

	* new function of ensemble.evaluation.strip

	* only allow ensemble calibration in ensemble.test and ensemble.test.splits
	functions

	* include legends in menu-interface generated plots no longer via locator()

Older versions

	* mainly changes related to newer version of R base and loaded packages,
	including changes required to maintain compatility with R-commander


