Mainly technical bug fixes: - in section 1.5, added component to calculate indices.samplesList - replaced result by samplesList.temp in the final call to conveff_final function - to avoid undefined results - changed functions conveff_final & conveff so that they can work in case there is only one parameter - changed the default value of min.Nvalues in control to NULL which will then be replaced in the code by which will be replaced by neff.max - added chains.to.remove<-NULL in 1.2 to avoid errors in case if control\(remove.fixedchains is FALSE - added affectation in samplesList in 2.2 in case Nimble, non parallelized and not APT - took the formula from within parallelized version; & added calculation of chains.to.update - rewritten the Nimble part of the 2.2 section so as to not update removed chains - their values are then replaced by those of the first updated chain for the sake of dimension coherence - correction in section 2.2 of allocation to samplesList in case Nimble and parallelize: the code was erroneous because did not take into account the nature out object out1 - adding chains.to.remove in call to conveff_final - removing removed chains from final result/output in mcmc.list format and adding the info of which chains were removed in the final.params component called removed.chains - can be useful e.g. to relate with the Initial values - added drop=FALSE in many parts of the code for mcmc objects and added as.matrix after coda::as.mcmc so that they do not become vectors in case only one parametger is monitored- - minor clarity changhes in help (of control\)conv.thorough.check, control$remove.fixedchains) - rather minor changes in vignettes

Major revisions: - Added 1000 to control\(time.max/Nchains in timeout argument to avoid
"error reading from connection"; then replaced timeout =
min(5184000,control\)time.max/Nchains+1000) by timeout =
ifelse(is.finite(control\(time.max),
3*control\)time.max+3600,30*24*3600) to have a maximum
length of 30 days in case time.max is unspecified and allowing
extra-time for WAIC & extra-calculations otherwise. - Modified
multiplier of Nchains in set.seed in sections 2 and greater - using
Ncycles to avoid repeated same values - Changed formula for niter
related to duration/time to promote reproducibility in case of time.max
not reached - Changed the way control\(check.thinmult behaves by adding a third level and
changing the default - to conserve neffs.reached & convergence if
they occurred prior to change - Changed the beginning of sections 2.3
& 2.5.3 - "Reshaping samplesList" sections - to better
control samples and iterations being controlled from the end of the
Markov chains - Added code for controlling sees in case of
parallelization (control.MCMC\)parallelize), for reproducibility
issues: seeds <- getseeds(Nchains, control\(seed); results.temp <-
parallel::clusterApply(cl, seeds, worker.seed), with specifications of
functions getseeds and worker.seed. - Added function window.seq to allow
coherence with modifications in 2.3 and 2.5.3 and used it instead of
window (in case thin was specified) - Added arguments
decrease.thinmult.multiplier and decrease.thinmult.threshold to control
and changed the formula for thinmult decrease when adapting it from
thinmult<-thinmult-1 to
thinmult<-ifelse(thinmult>control\)decrease.thinmult.threshold,
max(floor(control\(decrease.thinmult.multiplier*thinmult),
control\)decrease.thinmult.threshold),thinmult-1) - Added
time.MCMC.Preparation.num and shifted time-dependent formulas for niter
from (control\(time.max-duration)*0.95 to
(control\)time.max-duration)*max(0.5,time.MCMC.num/(duration-time.MCMC.Preparation.num)),
so that control$time.max is the targeted maximum time - Added two
vignettes to give expanations on two specific points: changing samplers
with Nimble and doing extra-calaulcations with Nimble

Minor revisions: - Put back the call to library instead of requireNamespace in parallelizeInitExpr to avoid some problems. - Added a stop of the program if parallelize and library parallel is not loaded. Updated help accordingly. - Changed error message if APT and Nimble and not parallelized, and nimbleAPT is not loaded - Revised burnin in the output - in case of non-convergence - and revised thinning of result in case of non-convergence - to ensure proper resizing - Revised 2.5 section and especially 2.5.2 to reduce number of samples in case of convergence - done also if not check.thinmult; associated changes in checking.neffs.conserved and in section 2.1 for thin in case niter<0 - Removed a print command in 2.5.2 that was there just for diagnosing - Corrected calculate.thinmult.target function to have a maximum value that thinmult cannot overcome so that there are at least 10 values left in each Markov Chain. - Shifted index.conv.local<-index.conv.temp to index.conv.local<-indices.samplesList[index.conv.temp] before conveff_final calls due to burnin problems with conveff_final - Slight changes in the first Vignette - Slight changes in the text of the help - Changed default and help for component check.convergence.firstrun of control - Changed the error message in case names of control or control.MCMC do not match those in the function, to be more informative - Changed final thin multiplier section to make check.thinmult more active: added if else in: stop_decrease<-convergedtemp&neffs.reachedtemp&ifelse(control\(check.thinmult==3,neffs.conserved,TRUE)&min.Nvalues.OK - Changed examples in functions runMCMC_btadjust and findMCMC_strong_corrs: not running them - due to duration constraints on CRAN - and removing condition - Replaced: nu.burn=nburnin.min+sum(numIter.samplesList[1:(index.conv.local-1)]) by: nu.burn= nburnin.min0+sum(numIter.samplesList[1:(index.conv.local-1)]) for nu.burn to be better estimated with Jags. - Added printing messages at the end of MCMC sampling and at the beginning of WAIC sampling; Added printing of extra-calculation phase - otherwise silent… - Added components Nvalues, neff.min & neff.median in final.params component of the attributes of the output - Introduced arguments monitorParentNodes and monitorAllStochNodes in control.MCMC and slight changes in params, params.conv & params.save - Added argument conveff.final.allparams to control with a default to TRUE and changed the conveff_final function and its calls accordingly. Behavior in previous versions corresponded to conveff.final.allparams=FALSE in case of MCMC convergence. - Added arguments force.niter.max and force.time.max (respectively time.max.turns.off.niter.max) to control with a default to FALSE to be able to force the MCMC to go to niter.max (for force.niter.max) and control\)time.max (for force.time.max) (provided control\(time.max constraints and niter.max contrainsts are met) (resp. to disable niter.max - except if in force.niter.max or force.time.max phase - if control\)time.max is specified). - In section 2 - for in thinmult adaptations - turned samplesList to samplesList.temp & adapted related indices for diagstemp and minNvalues.OK calculations.

- Replaced functions list.as.matrixbisdim1 and list.as.array and replaced them by as.matrix and as.array (from coda package)
- Complete reshaping of section 2.5
- Introduction of components ip.nc, conv.thorough.check, thinmult.in.resetMV.temporary, check.thinmult, only.final.adapt.thin, max.prop.decr.neff, save.data in parameter control
- Introduction of components resetMV, parallelize, parallelizeInitExpr, useConjugacy, WAIC, WAIC.Nsamples, WAIC.control, APT, APT.NTemps, APT.initTemps, APT.tuneTemps, APT.thinPrintTemps, includeAllStochNodes, saveAllStochNodes, includeParentNodes, saveParentNodes and extraCalculations in parameter control.MCMC.
- Replacing updates of thin with the function update.thin
- Added component save.data in control argument, allowing to save entire data instead of summary of data.
- Added code in the call.params component of the attributes output
- Added possibility that parameter inits is a function, and further checkings for inits
- Considerably developed checkings of arguments
- Revised formula for calculating thinmult and put it in function calculate.thinmult.target
- Allowed control$convtype to be NULL - which is now the default.
- Introduction of control$conv.thorough.check and associated programmation in sections 1.4 & 2.4.1
- Changed function checking.neffs.conserved to make all kinds of neff potentially active
- Introduced component only.final.adapt.thin to control and changed the function calculate.thinmult.target and its call accordingly
- Reframed initial checking of control$time.max so that if initially NULL becomes Inf and keeping only first condition in 2.1
- Reframed the proposed number of iterations to run in 2.1 in case ! Converged & ! previously.converged (to be close to case where previously converged in case the diagnostic is close the target, using a sigmoid function) & Heidleberger replaced by Heidelberger. Added associated component ip.nc to control
- In case MCMC.language is Nimble: added set.seed (…+Nchains) before $run in 1.1 and turned the one in 2.2 to set.seed (…+Ncycles*Nchains)
- Added component resetMV in control.MCMC active in case MCMC.language is Nimble: and adapted code accordingly in section 2.2
- Implemented parallelization for Jags and Nimble as driven by the parallelize & parallelizeInitExpr components of control.MCMC (and added section 3.1)
- Added calculate=FALSE in nimbleModel commands to speed up model preparation with Nimble: see: https://groups.google.com/g/nimble-users/c/a6DFCefYfjU/m/kqUWx9UXCgAJ
- Added useConjugacy in control.MCMC and then in configureMCMC commands to speed up model preparation with Nimble if TRUE: see: https://groups.google.com/g/nimble-users/c/a6DFCefYfjU/m/kqUWx9UXCgAJ
- Removed code: require(coda) through adding more calls to coda::as.mcmc.list to link with coda library sonner - for functions such as summary, as.matrix and as.array
- In case MCMC.language is Nimble: coded of (online) WAIC and introduced associated components in control.MCMC
- In case MCMC.language is Nimble: added possibility to use NimbleAPT through new code and associated components in control.MCMC (components starting with APT)
- Added components to the final.params element of the attributes of the output: WAIC, Temps, extraResults, the various components starting by “childCPUduration”
- Added near the end: result<- coda::as.mcmc.list(lapply(result,function(x){y<-x; attributes(y)\(mcpar<-c(original.atrributes\)final.params\(burnin,original.atrributes\)final.params\(burnin+original.atrributes\)final.params\(thin*(attributes(y)\)dim[1]-1), original.atrributes\(final.params\)thin);y})) - to render the mcmc.list with its usual format.
- Replaced final.diags=conveff_final(result) with final.diags=conveff_final(coda::as.mcmc.list(lapply(result,function(x){coda::as.mcmc(as.matrix(x))}))) and updated thin in the last condition for final diagnostics to be OK
- To correct problems with calculus of nburnin in case index.conv==1, repaced througout: nburnin.min0+sum(numIter.samplesList[1:ifelse(converged,index.conv-1,size.samplesList)]) by: nburnin.min0+ifelse(index.conv==1&converged,0,sum(numIter.samplesList[1:ifelse(converged,index.conv-1,size.samplesList)]))
- Added lines at the end of sections 1.1 and 2.2 to make samplesList of standard format: samplesList<- coda::as.mcmc.list(lapply(samplesList,function(x){coda::as.mcmc(as.matrix(x))}))
- Added a last argument to function checking.neffs.conserved to have a different behaviour depending on whether neffs criteria are reached or not; and recoded the function accordingly: now max.prop.decr.neff is active only if neffs.reached
- Added two suggested libraries in DESCRIPTION file: nimbleAPT & parallel
- Modifications in ways samples are collected with Nimble and in 2.6 (this is actually done for it) ; associated introduction of argument thinmult.in.resetMV.temporary in control
- Turned default of showCompilerOutput to FALSE to limit printing size with Nimble.
- Redesigned calculations of CPUtime/duration: includes child processes time & also reports childCPUtime as well (which can/should be NA on Windows)
- Removed components of the attributes of the output: R.version and package.versions, replacing it by sessionInfo that conatins these info (+ extra info)
- Modification of function formatC_adapted so that it does what we ant (digits=3); otherwise was returning to the default for the second formatC
- Due to bug with Nchains=1 & rstan: replaced as.array(out) with as.array(out,drop=FALSE) in two conveff functions
- Changed way of declaring initial values in Nimble - strangely appeared undeclared so far - and, if parallelize, Jags
- Introduced component check.thinmult in control and associated code
- Various changes in printed texts
- Introduced min.Nvalues in calculation of niter to avoid having so few values after fitting that no diagnostic would be produced
- Changes in the Vignette

- Correction of a bug in the section 2.1 section of the code for the calculation of the new number of iterations: the number of iterations was too small when thin.max was reached (acknowledged with thin.max=1): replaced thin by thin.theoretical (which has been introduced at the beginning or section 2.1); replaced (index.conv-1) by ifelse(converged,index.conv-1,size.samplesList) in final calculations of durations. Otherwise, erroneous in case of non convergence..
- Made corrections regarding how control\(seed was treated: (i) added the possibility that control\)seed could be NULL - in which case there is no control of seeds for MCMCs; (ii) put the default to NULL instead of 1; (iii) in case length(control$seed) was 1, added set.seed(NULL) at the end to not constrain the seed of the R environment after the end of the function by the seed used in the function.
- Added neffs.reached in the final.params component of the attributes of the result; added help for final.params\(converged and final.params\)neffs.reached
- Allowed control.MCMC$n.adapt to also apply in case Nimble was the MCMC.language; changed the default value accordingly (so that it is in the program 1000 in case Jags is used and 0 in case Nimble is used); corrected an error in the inclusion of n.adapt in duration.MCMC.transient in case Jags is used.

- Replaced (index.conv-1) by ifelse(converged,index.conv-1,size.samplesList) in final calculations of durations. Otherwise, erroneous in case of non convergence..

- Added buildDerivs component to control.MCMC parameter.

- Changed default value for round.thinmult in parameter control to TRUE, which is more rigorous.

- Added a
`NEWS.md`

file to track changes to the package. - Changed title of package - referring to ‘JAGS’, ‘nimble’ or ‘greta’ explicitly
- Changed function runMCMC_btadjust(): placing neff.max at the beginning, replacing neffmax by neff.max in functions scale.available.neffs & calculate.thinmult.target, adding warnings if niter.max is finite and niter.max/thin.max is greater than 3*neff.max
- Replaced niter>0 by niter>=thin in sections 2 and 2.2 in function runMCMC_btadjust(), to avoid a bug
- Slight changes to the vignette named ‘runMCMCbtadjust_Presentation’