--- title: "Supported Distributions" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{supported-distributions} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", echo = TRUE ) ``` ```{r setup} library(samplr) ``` The current distributions in the samplr package are those supported by [Rcpp](https://www.rcpp.org/) and [RcppDist](https://github.com/duckmayr/RcppDist). ## Univariate Distributions The parameters these distributions take can be provided in a vector, e.g. a vector `c(0,1)` for the standard normal distribution. ### Continuous Distributions ```{r echo=FALSE} abbrev_cont <- c("unif", "norm","lnorm", "gamma", "beta", "nbeta", "chisq", "nchisq", "t", "nt", "f", "nf", "cauchy", "exp", "logis", "weibull", "4beta", "lst", "truncnorm", "trunct", "trunclst", "triangular") for (i in 1:length(abbrev_cont)){abbrev_cont[i] <- paste("*", abbrev_cont[i],"*", sep="")} name_cont <- c("Uniform", "Normal","Lognormal", "Gamma", "Beta", "Non-central Beta", "Chi-squared", "Non-central Chi-squared", "t", "Non-central t", "F", "Non-central F", "Cauchy", "Exponential", "Logistic", "Weibull", "4-parameter Beta", "Location-scale t", "Truncated Normal", "Truncated t", "Truncated Location-scale t", "Triangular") for (i in 1:length(name_cont)){name_cont[i] <- paste(name_cont[i],"Distribution")} parameters <- c( "`min`, `max`", # "unif", "`mean`, `sd`",# "norm", "`log_mean`, `log_sd`", # "lnorm", "`shape`, `scale`", # "gamma", "`shape1`,`shape2`", # "beta", "`shape1`,`shape2`, `ncp`", # "nbeta", "`df`", # "chisq", "`df`, `ncp`", # "nchisq", "`df`", # "t", "`df`, `ncp`", # "nt", "`df1`, `df2`", # "f", "`df1`, `df2`, `ncp`", # "nf", "`location`, `scale`, ", # "cauchy", "`rate`", # "exp", "`location`, `scale`", # "logis", "`shape`, `scale`",# "weibull", "`shape1`,`shape2`, `minumum`, `maximum`", # "4beta", "`df`, `location`, `scale`, ", # "lst", "`mean`, `sd`, `low_bound`, `high_bound`", # "truncnorm", "`df`, `low_bound`, `high_bound`", # "trunct", "`df`, `location`, `scale`, `low_bound`, `high_bound`", # "trunclst", "`lower_limit`, `upper_limit`, `mode`"# "triangular" ) X <- data.frame(abbrev_cont, name_cont, parameters) names(X) <- c("Abbreviation", "Distribution Name", "Parameters") knitr::kable(X) ``` ### Discrete Distributions ```{r echo=FALSE} abbr_discr <- c("binom", "nbinom", "nbinom_mu", "pois", "geom", "hyper", "wilcox", "signrank") for (i in 1:length(abbr_discr)){abbr_discr[i] <- paste("*", abbr_discr[i],"*", sep="")} name_discr <- c("Binomial", "Negative Binomial", "Negative Binomial", "Poisson", "Geometric", "Hypergeometric", "Wilcoxon rank-sum test statistic", "Wilcoxon signed-rank test statistic") for (i in 1:length(name_discr)){ if ((name_discr[i] != "Wilcoxon rank-sum test statistic") && (name_discr[i] != "Wilcoxon signed-rank test statistic")){ name_discr[i] <- paste(name_discr[i],"Distribution") } else{ name_discr[i] <- paste("Distribution of", name_discr[i]) } if (i == 2){ name_discr[i] <- paste(name_discr[i],"(with success probability as parameter)") } else if (i == 3){ name_discr[i] <- paste(name_discr[i],"(with mean as parameter)") } } parameters_discr <-c( "`size`, `success_prob`", # Binomial", "`size`, `success_prob`", # Non-central Binomial", "`size`, `mean`", # Negative binomial", "`lambda`", # Poisson", "`success_prob`", # Geometric", "`number_successes`, `number_failures`, `number_samples`", # Hypergeometric", "`number_samples1`, `number_samples2`", # Wilcoxon rank-sum test statistic", "`number_samples`" # Wilcoxon signed-rank test statistic" ) X <- data.frame(abbr_discr, name_discr, parameters_discr) names(X) <- c("Abbreviation", "Distribution Name", "Parameters") knitr::kable(X) ``` ## Multivariate Distributions For multivariate distributions, distribution parameters are provided in a list, not a vector. ### Continuous Distributions ```{r echo=FALSE} abbrev_cont_mv <- c("mvnorm", "mvt") for (i in 1:length(abbrev_cont_mv)){abbrev_cont_mv[i] <- paste("*", abbrev_cont_mv[i],"*", sep="")} name_cont_mv <- c("Multivariate Normal", "Multivariate t") for (i in 1:length(name_cont)){name_cont[i] <- paste(name_cont[i],"Distribution")} parameters_cont_mv <- c( "`mean` (vector); `covariance_matrix` (matrix)", # Multivariate Normal", "`location` (vector); `scale_matrix` (matrix), `df` (number)" # Multivariate t" ) X <- data.frame(abbrev_cont_mv, name_cont_mv, parameters_cont_mv) names(X) <- c("Abbreviation", "Distribution Name", "Parameters") knitr::kable(X) ``` ## Examples ### Univariate distribution ```{r} X <- sampler_mh( start = 0, # starting point for the sampler distr_name = "truncnorm", # Use abbreviation in distr_name distr_params = c(0,1,-5,0), # provide distribution parameters as a vector for univariate distributions sigma_prop = 1, # variance of the proposal distribution ) hist(X[[1]]) ``` ### Multivariate distribution ```{r} X <- sampler_hmc( start = c(0,0), distr_name = "mvnorm", # as before list(c(0,0), diag(2)), # provide distribution parameters as a list for multivariate distributions ) x <- X[[1]][,1] y <- X[[1]][,2] plot(x,y) ```