mcmcplots package from Suggests (it has been archived from CRAN). MCMC diagnostic plots in examples and the vignette now use the coda package instead.dspline() pooling is specified through a single vector (betas) argument rather than individual beta.1, beta.2, etc.dspline() spline types have been consolidated to the implemented set: "bs" (B-splines) and "ns" (natural cubic splines). The defunct "rcs" and "is" options, and the redundant "ls" option (piecewise linear splines, equivalent to "bs" with degree=1), have been removed from the documentation and argument checks.knots argument in dspline() can now be specified either as a single integer (indicating the number of equally-spaced internal knots) or as a vector of quantile locations (proportions of the dose range).dmulti() whereby each constituent dose-response function’s parameters were not renamed to globally unique names. This caused the functions to share (and overwrite) each other’s parameters in the JAGS model and in predict(), giving incorrect results, and could cause a JAGS "Invalid parent values" error for functions involving division (e.g. demax()).dmulti() models whereby the reference-arm dose-response was subtracted without parentheses, so only the first term of multi-term functions (e.g. dpoly(degree=2)) was negated.dmulti() whereby the df (spline degrees of freedom) of constituent functions became misaligned when any function was specified via knots (rather than df), causing a subscript-out-of-bounds error in predict() for models combining spline functions.get.relative() for models with multiple (agent-specific) dose-response functions, where parameters were mapped to the wrong dose-response function when constructing relative effects.plot() for predictions (plot.mbnma.predict()) with overlay.split=TRUE, which errored because the overlay.split argument masked the internal function of the same name. Additional arguments passed via ... are now correctly routed to either R2jags::jags() (for the split NMA) or ggplot2, rather than jags-specific arguments (e.g. jags.seed) being incorrectly passed to ggplot2.ggplot2 warning in devplot() caused by passing the group aesthetic outside of aes().dspline() whereby specifying multiple knots as a vector silently retained only the first knot, generating a spline basis with fewer parameters than intended (and a mismatch with the monitored dose-response parameters).nma.run() that referenced an undefined class.effect object when named (multi-element) priors were supplied.dspline(type="rcs") previously errored despite being documented, and dspline(type="is") was accepted but crashed during model setup. Spline types are now consistent across the package (see above).plot() for node-split objects (plot.nodesplit()) that referenced an undefined object when rescaling density panels with large differences in scale.duser() now returns a correctly named bname element, consistent with the other dose-response functions.dfpoly() so that validation errors for the second power refer to power.2 rather than beta.4.ditp(p.expon=TRUE), which incorrectly referred to ed50 instead of rate.predict() now returns an informative error message (instead of an empty stop()) when too few values are available to generate predictions.summary() output for mbnma.network objects.cumrank() now normalised to be between 0 and 1.pd is now specified as pD and should be logical as either TRUE (estimates the effective number of parameters via the Kullback-Leibler divergence) or FALSE (using the pV approximation)regress.vars argument in mbnma.run(). Various sharing assumptions for effects can be specified in regress.effect.dfpoly() can only take numeric values from set defined in Jansen 2015.calc.edx() to allow easy estimation of different ED values (e.g. ED90 = the dose at which 90% of the maximum response (Emax) is reached)get.relative() now allows simultaneous comparison of two models in a single league table - can be used to compare MBNMA models with different dose-response functions, or MBNMA and NMA models, or NMA models that assume consistency versus those that use Unrelated Mean Effects.ed50, hill, onset) are now on the natural scale and are assigned truncated normal default priorsgetjagsdata()
fitplot() and devplot()
get.relative() to allow estimation of relative effects between any doses of different agents."relative.array" objects generated by get.relative().n rather than N so that datasets can be consistent with those used in MBNMAtime
predict.mbnma() and get.relative()
devdev() for comparing deviance contributions between modelsmbnma.run() are now given as class("dosefun") and dose-response parameters are specified within these functions. NOTE: Previous syntax of specifying a function name as a character (e.g. fun="linear") along with beta parameters (e.g. mbnma.run(beta.1="rel")) will be removed in subsequent versions, along with wrapper functions.dloglin())dspline()) (piecewise linear splines, B-splines, restricted cubic splines, natural splines)dfpoly())link="smd" to allow for analysis using Standardised Mean Differencescalcom() to guess outcome measure scale for more careful specification of default priors for SD"mbnma.network" objectmbnma.nodesplit() fixedparams in plot.mbnma.rank() is not a subset of x
overlay.split() uses full distribution of E0 rather than summary statisticsmbnma.predict object now contains values assigned/estimated for E0 to be used in overlay.split()
plot.nodesplit(), plot.type="forest" plots a single forest plot with results for each node-split comparison, rather than presenting results in panels.summary.mbnma.network() returns valid minimum doses per agentparallel=TRUE and added a warning when pd is set to "pd.kl" or "popt" for these models.summary() for multiple dose-response function modelsfun="rcs") in mbnma.run()
mbnma.run() to allow relaxing of the consistency assumption. This can be used to test its validity.cumrank() added for cumulative ranking plots. Also calculates SUCRA values for each agent and dose-response parameterautojags options added for mbnma.run() to allow users to run models until they converge (convergence defined by Rhat)rank.mbnma() also calculates cumulative ranking probabilities and stores them in cum.matrix
getjagsdata() contains studyID and has been added to mbnma objectsdevplot() and fitplot()
plot.nodesplit() scales y-axis if density is >50 times larger in panel with highest density than in panel with lowest density. This improves legibility of the graph.class("nodesplit")
mbnma.nodesplit() includes potential splits via dose-response curve and direct and indirect evidence contributions are calculated simultaneously in the same model.mbnma.nodesplit() and nma.nodesplit()
plot.mbnma.network()
psoriasis and ssri datasets to packagecrayon package to neaten printed console outputsfun in mbnma.run()) so that multiple functions can be modelled simultaneously. Some downstream package functions still may not yet work with these models though.mbnma.network objects returned from plot.mbnma.network now have specific igraph attributes assigned to them, which can be easily changed by the user.user.fun now takes a formula as an argument (for example ~ (beta.1 * dose) + (beta.2 * dose^2)) rather than a string.plot.mbnma.network() now uses a layout argument that takes an igraph layout function instead of layout_in_circle (which was a logical argument). This allows any igraph layout to be plotted rather than just a circle (e.g. igraph::as_star())if {class(x)=="matrix"} statements to if {is.matrix(x)} to address R development changespd="plugin"), or Kullback-Leibler divergence (pd="pd.kl")parallel=TRUE in mbnma.run() (or wrapper functions) now properly runs JAGS in parallel on multiple cores.nma.nodesplit() that prevented the model running if disconnected treatments were included in the analysis (drop.discon=FALSE)