Skip to content

How to run sampler with sigma fixed? #64

@jacobenglert

Description

@jacobenglert

Suppose we are fitting a normal BART model using a dbarts sampler and we know the true residual variance is equal to one. When I specify resid.prior = fixed(1), it seems like the sampler is respecting my wishes. But when I interrogate the state of the sampler after running there is a sigma $\ne 1$. Can someone explain what exactly is happening here?

I actually do have a problem where I will need to be able to do this. The above solution appears to be working despite the sigma inside sampler$state, but I just want to confirm. If this actually is not working, I will need to find some other way around it.

Reproducible example:

# Fixed sigma reprex

# Simulate Data
set.seed(1)
n <- 100
p <- 5
x <- t(replicate(n, runif(p, 0, 1)))
f <- function(x){
  10*sin(pi*x[,1]*x[,2]) + 20*(x[,3] - .5)^2 + 10*x[,4] + 5*x[,5]
}

y <- rnorm(n, f(x), 1)

# Create dbarts sampler object
library(dbarts)
control <- dbartsControl(n.trees = 100, n.samples = 1000, n.burn = 0,
                         n.chains = 1, keepTrees = TRUE, keepTrainingFits = TRUE,
                         updateState = TRUE, verbose = FALSE)

sampler <- dbarts(x, y, control = control, resid.prior = fixed(1), sigma = 1)

sigma <- numeric(1000)
for(k in seq_len(1000)){
  samples <- sampler$run(0, 1)
  sigma[k] <- samples$sigma
}

# Print sigma stored in state
print(sampler$state[[1]]@sigma)

# Plot sigma values
plot(sigma)

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions