From d292d75ff93520590c24d6075853b50f64721538 Mon Sep 17 00:00:00 2001 From: Matt Graham Date: Tue, 10 Dec 2024 18:46:54 +0000 Subject: [PATCH] Add banana distribution example to README --- README.Rmd | 37 ++++++++++++++++- README.md | 51 +++++++++++++++++++++--- man/figures/README-banana-samples-1.png | Bin 0 -> 38502 bytes 3 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 man/figures/README-banana-samples-1.png diff --git a/README.Rmd b/README.Rmd index cfe13af..1d81c02 100644 --- a/README.Rmd +++ b/README.Rmd @@ -36,9 +36,9 @@ You can install the development version of `rmcmc` like so: devtools::install_github("UCL/rmcmc") ``` -## Example +## Examples -This is a basic example which shows you how to generate samples from a normal target distribution with random scales. +The snippet belows shows a basic example of using the package to generate samples from a normal target distribution with random scales. Adapters are used to tune the proposal scale to achieve a target average acceptance probability, and to tune the proposal shape with per-dimension scale factors based on online estimates of the target distribution variances. @@ -70,3 +70,36 @@ cat( sep = "\n" ) ``` + +As a second example, the snippet below demonstrates sampling from a two-dimensional 'banana' shaped distribution based on the [Rosenbrock function](https://en.wikipedia.org/wiki/Rosenbrock_function) and plotting the generated chain samples. + +```{r banana-samples, fig.width=7, fig.height=4} +library(rmcmc) + +set.seed(651239L) +target_distribution <- list( + log_density = function(x) -sum(x^2) / 8 - (x[1]^2 - x[2])^2 - (x[1] - 1)^2 / 10, + gradient_log_density = function(x) { + c( + -x[1] / 4 + 4 * x[1] * (x[2] - x[1]^2) - 0.2 * x[1] + 0.2, + -x[2] / 4 + 2 * x[1]^2 - 2 * x[2] + ) + } +) +proposal <- barker_proposal(target_distribution) +results <- sample_chain( + target_distribution = target_distribution, + proposal = proposal, + initial_state = rnorm(2), + n_warm_up_iteration = 10000, + n_main_iteration = 10000, +) +plot( + results$traces[, "position1"], + results$traces[, "position2"], + xlab = expression(x[1]), + ylab = expression(x[2]), + col = "#1f77b4", + pch = 20 +) +``` diff --git a/README.md b/README.md index c57bda3..aa9a361 100644 --- a/README.md +++ b/README.md @@ -31,13 +31,14 @@ You can install the development version of `rmcmc` like so: devtools::install_github("UCL/rmcmc") ``` -## Example +## Examples -This is a basic example which shows you how to generate samples from a -normal target distribution with random scales. Adapters are used to tune -the proposal scale to achieve a target average acceptance probability, -and to tune the proposal shape with per-dimension scale factors based on -online estimates of the target distribution variances. +The snippet belows shows a basic example of using the package to +generate samples from a normal target distribution with random scales. +Adapters are used to tune the proposal scale to achieve a target average +acceptance probability, and to tune the proposal shape with +per-dimension scale factors based on online estimates of the target +distribution variances. ``` r library(rmcmc) @@ -70,3 +71,41 @@ cat( #> True target scales: 1.50538046096953, 1.37774732725824, 0.277038897322645 #> Adapter scale est.: 1.5328097767097, 1.42342707172926, 0.280359693392091 ``` + +As a second example, the snippet below demonstrates sampling from a +two-dimensional ‘banana’ shaped distribution based on the [Rosenbrock +function](https://en.wikipedia.org/wiki/Rosenbrock_function) and +plotting the generated chain samples. + +``` r +library(rmcmc) + +set.seed(651239L) +target_distribution <- list( + log_density = function(x) -sum(x^2) / 8 - (x[1]^2 - x[2])^2 - (x[1] - 1)^2 / 10, + gradient_log_density = function(x) { + c( + -x[1] / 4 + 4 * x[1] * (x[2] - x[1]^2) - 0.2 * x[1] + 0.2, + -x[2] / 4 + 2 * x[1]^2 - 2 * x[2] + ) + } +) +proposal <- barker_proposal(target_distribution) +results <- sample_chain( + target_distribution = target_distribution, + proposal = proposal, + initial_state = rnorm(2), + n_warm_up_iteration = 10000, + n_main_iteration = 10000, +) +plot( + results$traces[, "position1"], + results$traces[, "position2"], + xlab = expression(x[1]), + ylab = expression(x[2]), + col = "#1f77b4", + pch = 20 +) +``` + + diff --git a/man/figures/README-banana-samples-1.png b/man/figures/README-banana-samples-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f6ffa700ae17dfaa6c382c8304e437bc3e290dfa GIT binary patch literal 38502 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