=== mc2d ===

Version 0.3-0
=============

DEPENDENCIES
- 'ggpubr' (and its ~60 recursive dependencies) is no longer needed.
- R (>= 3.3.0) is required (was R >= 2.10.0).

CHANGES THAT MAY AFFECT EXISTING CODE
The API is unchanged and, for a given seed, results are identical to version
0.2-2, except for the corrected bugs (see BUG FIX). Code that ran without error
with 0.2-2 may nevertheless behave differently in the following cases:
- Warnings: rpert, rtriang, rbetagen, (d, p, q)pert and (d, p, q)betagen (also
  through mcstoc) now issue their warnings ("NaN in ...", "mode < min or
  mode > max"), which were silenced. The rtrunc / mcstoc(rtrunc = TRUE) warning
  about rounding errors is issued when any bound is extreme (was: only with a
  single bound and scalar parameters).
  Code run with options(warn = 2), or tests expecting no warning, may stop.
- pmin(x) / pmax(x) with a single mcnode return the mcnode (was a list of one
  mcnode): pmin(x)[[1]] now returns the first value of the node.
- mcdatanocontrol returns the mcnode (it returned the value of 'outm').
- New errors instead of silent wrong results: mcdata with a 1 x k matrix for a
  "0" mcnode when k is neither 1 nor nvariates, pmin / pmax with incompatible numbers of variates, mcdatanocontrol
  with an invalid 'type', cornode with a 'V' mcnode not in the first position.
- is.mcnode returns FALSE for objects with an invalid type or dimension (e.g.
  hand-modified attributes): functions checking their input now reject them.
- mcprobtree evaluates the elements of 'mcvalues' where it is called: inside a
  function, a local mcnode is used instead of a global one with the same name.
- outm(<mc>, value, which.node) now modifies the node: the following summaries
  and graphs use the new outm.
- Different values (previous results were wrong): rmultinomial (and mcstoc)
  with several values of 'size' or 'prob'; rempiricalC when n < length(values);
  dtriang / ptriang with parameters of lengths that are not multiples;
  dlnormb, plnormb, qlnormb, rlnormb with mean <= 0 or sd < 0 (now NaN);
  dmultinomial, ddirichlet, dbetasubj, dpert, qmqi in the cases listed below.
- outm = "mean" is computed with rowMeans(): results may differ from 0.2-2 in
  the last digit (about 1e-16), and be NaN instead of NA when NA and NaN are
  mixed; a test with identical() may fail.
- Graphs: hist / spaghetti / gghist / ggspaghetti with several outm functions,
  spaghetti with negative values, the x range of plot.mccut, and converg with
  more than 1000 iterations (drawn on a grid of iterations) look different.
- gghist, ggplotmc and ggspaghetti on mc objects are built without 'ggpubr':
  they still return a ggplot object of class "ggarrange" (with several pages,
  a list of class "ggarrange"),
  but functions of 'ggpubr' applied to these objects may behave differently.

BUG FIX
- Ops.mcnode: operations between a "V", "U" or "0" mcnode and an array (or a
  matrix) always failed.
- outm, mcdata, mcprobtree, Ops.mcnode: a vector of functions as "outm"
  (e.g. outm = c("min","max")) failed with R >= 4.3.
- outm(x, value, which.node) did not modify the node of an mc object.
- mcdata: a 1 x k matrix was accepted (and truncated or recycled) for a "0"
  mcnode when k was neither 1 nor nvariates.
- mcdatanocontrol: returned the value of 'outm' instead of the mcnode; the
  "type" argument was not checked.
- mcstoc and rtrunc: 'rtrunc = TRUE' or 'lhs = TRUE' failed with the default
  function (runif) or with a function given as pkg::fun. The warning about
  rounding errors in truncated distributions was almost never issued.
- mcapply: margin "unc" or "variates" failed on a dimension of length 1.
- pmin / pmax: a single argument returned a list; incompatible numbers of
  variates are now an error.
- mcprobtree: the elements of 'mcvalues' were only found if they were global
  variables (e.g. it failed inside a function); 'mcvalues' given as a variable
  and a single branch failed.
- cornode: a 'V' mcnode not in the first position was not rejected.
- is.mcnode: some invalid "0" mcnodes and invalid types were accepted.
- rmultinomial: the rows were not in the order of the parameters when 'size'
  or 'prob' had several values (e.g. mcstoc(rmultinomial, "VU", size = <a "V"
  mcnode>, ...)).
- dmultinomial: x > 0 for a probability of 0 gave a density of 1 instead of 0.
- rempiricalC: the support ('values' and 'prob' given as vectors) was truncated
  to n values when n < length(values).
- qempiricalD: NA in p led to an error. rempiricalD: a single value failed.
- dtriang, ptriang: wrong results when 'min' was the longest parameter or when
  the parameters had lengths that are not multiples.
- dpert: NaN for large values of shape (underflow).
- dbetasubj: wrong values (NaN or a non-zero density) outside [min, max].
- ddirichlet: NaN when x = 0 and alpha = 1.
- dlnormb, plnormb, qlnormb, rlnormb: mean <= 0 or sd < 0 now give NaN.
- qmqi: a probability < 0 corrupted the other results (now NaN).
- rpert, rtriang, rbetagen, (d, p, q)pert, (d, p, q)betagen: the warnings of
  the package ("NaN in ...", "mode < min or mode > max") were never shown.
- summary.mc: the warning about NA was issued once per node.
- converg: failed with nvariates > 1 and with non finite values (log scale).
- tornadounc: wrong results with use = "pairwise.complete.obs" and NA; the
  option use = "complete.obs" failed for mccut objects.
- evalmccut: failed when nsu = 1 or when no 'U' or 'VU' node was built in the
  first block, or when 'U' and 'VU' nodes were mixed in the first block.
- plot.mccut failed when all the nodes had the same type. The x range of the
  graph included the number of NA.
- plot.tornadounc, ggtornadounc: failed with the default value of 'stat'.
  plot.tornado, ggtornado: failed with a single input.
- plot.mc, ggplotmc: a list of xlim / ylim was rejected.
- hist, gghist, spaghetti, ggspaghetti: with several functions in "outm", each
  function was applied to the result of the previous one.
- spaghetti: the x axis started at 0 even for negative values.
- ggspaghetti: failed with a logical mcnode.

PERFORMANCE (large mcnodes, e.g. nsv = 1e5 and nsu = 200)
- The "outm" functions sum, mean, min and max are vectorized (summary, print,
  quantile, tornado, hist, ...): up to 100 times faster.
- spaghetti: 12 times faster, without building a data frame of all the values.
- converg: the running statistics are computed on a grid of iterations when
  there are more than 1000 iterations (was quadratic).
- dempiricalD, pempiricalD, qempiricalD: vectorized (100 to 300 times faster).
- dempiricalC, pempiricalC, qempiricalC, rempiricalC with varying min / max:
  vectorized (40 times faster).
- ddirichlet (20x), dmultinomial (5x), rtriang (2x), rpert, lhs.
- tornado (Spearman): ranks computed once (2x). summary, tornadounc,
  quantile: no copy of the whole node.
- Ops.mcnode, mcdata, mcstoc, pmin, pmax: fewer copies of the data.
- evalmccut: the results are filled in place (no copy at each iteration).


Version 0.2-2
=============

BUG FIX
- a bug in extractvar (didn't work for "U" or"V" nodes)
- a bug in summary.mc (digits = 3 was hard coded in the function)

Version 0.2-1
=============

BUG FIX
- a bug in ggtornado
- an issue in pert and triangular distribution when min, mode and max were
  < .Machine$double.eps^0.5

NEW FUNCTIONS

- spaghetti (and ggplot2 version "ggspaghetti"): plot a spaghetti plot (method for mc or mcnode objects)
- gghist : equivalent to hist, in the gglplot2 framwork (method for mc or mcnode objects)
- ggplotmc : equivalent to plot, in the gglplot2 framwork (method for mc or mcnode objects)

Version 0.2-0
=============

NEW DISTRIBUTIONS

- Beta subjective distribution (d, p, q, rbetasubj)
- Minimum Quantile Information Distribution (d,p,q,rmqi)

NEW FUNCTIONS

- spaghetti (and ggplot2 version "ggspaghetti"): plot a spaghetti plot (method for mc or mcnode objects)
- gghist : equivalent to hist, in the gglplot2 framwork (method for mc or mcnode objects)
- ggplotmc : equivalent to plot, in the gglplot2 framwork (method for mc or mcnode objects)


Version 0.1-22
=============

BUG FIX

- one bug in rpert

Version 0.1-21
=============

BUG FIX

- one bug in rpert

Version 0.1-20
=============

NEW FEATURES

- lognormb distribution: a lognormal distribution with arithmetic mean and sd parametrization. 
- Pert and triangular distribution as an alternative parametrization using the mean 

Version 0.1-18
=============

BUG FIX

- potential bugs linked to the default limit of 60 characters in the deparse function. Let to errors in hist, plot, converg, ... 

Version 0.1-17
=============

BUG FIX

- one bug in rtriang, rpert, rbetagen corrected (error when the length of the arguments differed)

Version 0.1-16
=============

BUG FIX

- one bug in rtriang corrected (returned 1 when min == mode == max)
- one error in the manual was corrected

Version 0.1-15
=============

BUG FIX

- one bug in mcstoc for multivariates nodes with truncation was corrected

Version 0.1-14
=============

BUG FIX

- one bug for multivariates nodes with truncation was corrected
- addition of tests for truncations (function rtrunc and mcstoc (option trunc=TRUE)). Some unexpected results linked to rounding errors could be obtained for some extreme truncations (see examples). Note that it is not possible to catch all errors and a warning is now provided in the documentation.

IMPROVEMENTS

- pert is definitively better and quicker.
- the vignettes were revised

Version 0.1-13
=============

BUG FIX

- pert, betagen and triang functions were slow in previous versions. This is fixed 
- some of the rdist functions returned matrixes when some of the arguments were matrixes
- all parameters but the first one are now vectorized in the univariate p, d, q, r distribution functions

Version 0.1-12
=============

BUG FIX

- a bug in the definition of d2V and d3V in the mc2dLmEnglish vignette
- a bug in dmultinomial with log = FALSE: it led to NA values

NEW FEATURES

- creation of a NAMESPACE for R.2.14 compliance 
- additionnal xlim and ylim arguments in plot.mc

Version 0.1-11
=============

BUG FIX

- rtriang was really slow in Version 0.1-10

Version 0.1-10
=============

NEW FEATURES

- dempiricalC is now vectorized and improved
- better control of limit cases in distributions

BUG FIXES

- major correction: dbetagen and dpert led to wrong values
- major correction: mcapply led to incorrect results when the function returned a vector of length n and if margin was 'unc' or 'variates'
- one bug in extractvar led to errors

Version 0.1-9
=============

NEW FEATURES

- dmultinormal, a vectorized version of dmvnorm

IMPROVEMENTS

- all p- d- q- r-distributions return numeric(0) if the first argument (x, q, p or n) are numeric(0)  

BUG FIXES

- dmultinomial led to errors

Version 0.1-8
=============

NEW FEATURES

- pmin.mcnode and pmax.mcnode 
- a second vignette

IMPROVEMENTS

- error message in mc when one argument was neither an mc nor an mcnode

BUG FIXES

- rempiricalC and qempiricalC lead to errors 

Version 0.1-7
=============

NEW FEATURES

- The documentation is now a real vignette
- mcratio, a function to measure variability and uncertainty
- extractvar and addvar, two utilities for multivariate nodes

IMPROVEMENTS

- Ops.mcnode function is much more efficient and less memory consuming
- great improvement for speed in mcstoc for multivariate distributions
- plot.mc proposes to fill the envelopes
- empiricalD is (a little bit) more efficient

BUG FIXES

- lhs: could bug when sent without default distribution. Now, distr="runif" by default.
- lhs: nsv = ndvar() and nsu = ndunc() by default
- mcstoc: issue when rtrunc with linf or lsup as multivariate nodes: solved
- rtrunc: issue for discrete distribution. It is now clear that rtrunc sample within (linf, lsup]. As a consequence, linf should be strictly lower than lsup
- same issue in mcstoc

Version 0.1-6
=============


BUG FIXES

- Pert distribution: could bug when is.equal(mu,mode) while mu!=mode.
- mcprobtree: allows now to use mcvalues with a type different of
  the type of the ouptut


Version 0.1-5
=============


- Initial release on CRAN.
