---
title: Blackbox MCMC Testing
format:
html:
copy-code: true
embed-resources: true
fig-responsive: true
fig-width: 8
project:
execute-dir: project
---
```{r}
library(tidyverse)
source('blackbox.r')
```
Making sure initially that we can plot the mystery function:
```{r}
xs = seq(-30,30, 0.01)
data = tibble(x = xs, y = mystery(xs))
ggplot(data=data, aes(x=x, y=y)) + geom_point()
```
Setting up our sampler:
```{r}
mcmc_sampler <- function(func, start, step_size, num_steps) {
samples = numeric(num_steps)
samples[1] = start
accepted = 0
for (i in 2:num_steps) {
current = samples[i-1]
proposed = rnorm(1, current, step_size)
ratio = func(proposed) / func(current)
if (ratio > runif(1)) {
samples[i] = proposed
accepted = accepted + 1
} else {
samples[i] = current
}
}
return(list(samples=samples, accept_rate=accepted / length(samples)))
}
```
Running the sampler
```{r}
out = mcmc_sampler(mystery, -10, 4, 50000)
samples = out$samples
accept_rate = out$accept_rate
accept_rate
```
Looking at the trace plot:
```{r}
data = tibble(iter=1:length(samples), x=samples)
ggplot(data=data, aes(x=iter, y=x)) + geom_line()
```
Looking at the lag plot:
```{r}
burned = data %>% filter(iter > 1000)
ggplot(data=burned, aes(x=x, y=lag(x))) + geom_point(alpha=0.1)
```
And looking at the overall histogram:
```{r}
ggplot(data=burned, aes(x=x)) + geom_histogram(bins=100)
```