Releases: lindeloev/mcp
mcp 0.3.4
mcp 0.3.3
This is a bug fix release.
Bug fixes
- Support
ggplot >= 3.4.0
,tidyselect >= 1.2.0
, and newerfuture
by replacing deprecated functions. - Accept
mcp(..., cores = "all")
. - Fix documentation of
iter
argument tomcp()
. - Other small fixes to deployment and documentation.
mcp 0.3.1
This is mostly a bug fix release.
New features:
-
ex = mcp_example("demo", with_fit = TRUE) is the new interface that replaces the ex_* datasets in prior versions. This reduces clutter of the namespace/documentation and the size of the package. It also gives the user richer details on the simulation and analyses. For "demo", the ex_demo dataset is now ex$data and the ex_fit is ex$fit.
-
Nicer printing of lists and texts all over. E.g., try print(demo_fit$jags_code) and print(demo_fit$pars).
Bug fixes
- Support breaking changes in tidybayes >= 3.0.0 and dplyr >= 1.0.6
mcp 0.3.0
New features:
-
Get fits and predictions for in-sample and out-of-sample data. Read more in the article on these functions.
- Use
predict(fit)
to get predicted values and quantiles. - Use
fitted(fit)
to get estimated values and quantiles. - Use
residuals(fit)
to get residuals and quantiles.
All of the above functions include many arguments that align with (and extends) the options already in
plot.mcpfit()
, including getting fits/predictions for sigma (which_y = "sigma"
), for the prior (prior = TRUE
), and arbitrary quantiles (probs = c(0.1, 0.5, 0.999)
). Use thenewdata
argument to get out-of-sample fitted/predicted values. Setsummary = FALSE
to get per-draw values. - Use
-
Added support for weighted regression for gaussian families:
model = list(y | weights(weight_column) ~ 1 + x)
. Weights are visualized as dot sizes inplot(fit)
. -
Support for more link functions across families (e.g.,
family = gaussian(link = "log")
) see this article for more info:gaussian
: "identity", "log"binomial
: "logit", "probit", "identity"bernoulli
: "logit", "probit", "identity"poisson
: "log", "identity"
-
New argument
scale
infitted()
,plot()
, andfit$simulate()
. Whenscale = "response"
(default), they return fits on the observed scale. Whenscale = "linear"
, they return fits on the parameter scale where the linear trends are. Useful for model understanding and debugging. -
Use
pp_check(fit)
to do prior/posterior predictive checking. Seepp_check(fit, type = "x")
for a list of plot types.pp_check(fit, facet_by = "varying_column")
facets by a data column. -
Improvements to
plot()
:- Change point densities are now computed on a per-panel basis in
plot(fit, facet_by = "varying_column")
. Previous releases only displayed population-level change points. - You can now plot varying effects with
rate = FALSE
for binomial models. - Change point densities in
plot(fit)
are not located directly on the x-axis. They were "floating" 5% above the x-axis in the previous releases.
- Change point densities are now computed on a per-panel basis in
-
New argument
nsamples
reduces the number of samples used in most functions to speed up processing.nsamples = NULL
uses all samples for maximum accuracy. -
New argument
arma
in many functions toggles whether autoregressive effects should be modelled. -
Although the API is still in alpha, feel free to try extracting samples using
mcp:::tidy_samples(fit)
. This is useful for further processing usingtidybayes
,bayesplot
, etc. and is used extensively internally inmcp
. One useful feature is computing absolute values for varying change points:mcp:::tidy_samples(fit, population = FALSE, absolute = TRUE)
. Feedback is appreciated beforetidy_samples
will to become part of themcp
API in a future release.
Other changes
- Change point densities in
plot(fit)
are now scaled to 20% of the plot for each chain X changepoint combo. This addresses a common problem where a wide posterior was almost invisibly low when a narrow posterior was present. This means that heights should only be compared within each chain x changepoint combo - not across. - Removed the implicit ceiling of 1000 lines and samples in
plot.mcpfit()
. - Rownames are removed from
ranef()
andfixef()
returns. - A major effort has been put into making
mcp
robust and agile to develop.mcp
now use defensive programming with helpful error messages. The Test suite includes 3600+ tests. plot()
,predict()
, etc. are now considerably faster for AR(N) due to vectorization of the underlying code.
Bug fixes
- Sigma is now forced to stay positive via a floor at 0.
- Fixed: support and require dplyr 1.0.0. Now also requires tidybayes 2.0.3.
- Fixed: Parallel sampling sometimes produced identical chains.
- Fixed several small bugs
mcp 0.2.0
New features:
- Model quadratic and other terms using
I(x^2)
,I(x^3.24)
,sin(x)
,sqrt(x)
, etc. - Model variance for
family = gaussian()
using~ sigma([formula here])
. - Model Nth order autoregressive models using
~ ar(order, formula)
, typically likey ~ 1 + x + ar(2)
for AR(2). Simulate AR(N) models from scratch or given known data withfit$simulate()
. The article on AR(N) has more details and examples. AR(N) models are popular to detect changes in time-series. - Many updates to
plot()
.- Includes the posterior densities of the change point(s). Disable using
plot(fit, cp_dens = FALSE)
. - Supports AR(N) models (see above).
- Plot posterior parameter intervals using
plot(fit, q_fit = TRUE)
.plot(fit, q_fit = c(0.025, 0.5, 0.975))
plots 95% HDI and the median. - Plot prediction intervals using
plot(fit, q_predict = TRUE)
. - Choose data geom. Currently takes "point" (default) and "line" (
plot(fit, geom_data = "line")
). The latter is useful for time series. Disable usinggeom_data = FALSE
.
- Includes the posterior densities of the change point(s). Disable using
- Use
options(mc.cores = 3)
for considerable speed gains for the rest of the session. All vignettes/articles have been updated to recommend this as a default, though serial sampling is still the technical default.mcp(..., cores = 3)
does the same thing on a call-by-ball basis. fit$simulate()
adds the simulation parameters as an attribute (attr(y, "simulate")
) to the predicted variable.summary()
recognizes this and adds the simulated values to the results table (columnssim
andmatch
) so that one can inspect whether the values were recovered.- Use
plot(fit, which_y = "sigma")
to plot the residual standard deviation on the y-axis. It works for AR(N) as well, e.g.,which_y = "ar1"
,which_y = "ar2"
, etc. This is useful to visualize change points in variance and autocorrelation. The vignettes on variance and autocorrelations have been updated with worked examples. - Much love for the priors:
- Set a Dirichlet prior on the change points using
prior = list(cp_1 = "dirichlet(1)", cp_2 = ...)
. Read pros and cons here. - The default prior has been changed from "truncated-uniforms" to a "t-tail" prior to be more uninformative while still sampling effectively. Read more here.
- You can now sample the prior using
mcp(..., sample = "prior")
ormcp(..., sample = "both")
and most methods can now take the prior:plot(fit, prior = TRUE)
,plot_pars(fit, prior = TRUE)
,summary(fit, prior = TRUE)
,ranef(fit, prior = TRUE)
.
- Set a Dirichlet prior on the change points using
mcp
can now be cited! Callcitation("mcp")
or see the pre-print here: https://osf.io/fzqxv.
Other changes:
- Some renaming: "segments" --> "model".
fit$func_y()
-->fit$simulate()
. plot()
only visualize the total fit whileplot_pars()
only visualize individual parameters. These functions were mixed inplot()
previously.- The argument
update
has been discarded frommcp()
(it's all onadapt
now) andinits
has been added. - Many internal changes to make
mcp
more future proof. The biggest internal change is thatrjags
andfuture
replace thedclone
package. Among other things, this gives faster and cleaner installations. - Many more informative error messages to help you quickly understand and solve errors.
- Updated documentation and website.
mcp 0.1.0
This is the first public release. The aim is to get wider feedback and testing so as to lock down the API a bit more for mcp 0.2.0 which will go on CRAN.
- Varying change points, including
ranef(fit)
andplot(fit, facet_by="column")
- Basic GLM: Gaussian, binomial, Bernoulli, and Poisson, and associated vignettes.
- Summaries:
summary(fit)
andfixef(fit)
plot(fit, "segments")
andplot(fit, "bayesplot-name-here")
with some options.- 1000+ basic unit tests to ensure non-breaking code for a wide variety of models.
- Testing and model comparison using
loo
andhypothesis
.