Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.21 KB | None | 0 0
  1. ---
  2. title: "Random effect on standard deviation"
  3. output: html_notebook
  4. ---
  5.  
  6. ```{r}
  7. library(rstan)
  8. options(mc.cores = parallel::detectCores())
  9. rstan_options(auto_write = TRUE)
  10. ```
  11.  
  12. Stan model
  13.  
  14. ```{stan output.var=model1}
  15. data {
  16. int<lower = 0> N; // Number of records
  17. int<lower = 0> M; // Number of blocks
  18. vector[N] Y; // Data
  19. int<lower = 1, upper = M> B[N]; // Index of blocks
  20. }
  21. parameters {
  22. real mu;
  23. real<lower = 0> sigma_bar;
  24. vector[M] log_epsilon;
  25. real<lower = 0> sigma_e;
  26. }
  27. transformed parameters {
  28. vector<lower = 0>[M] sigma = sigma_bar * exp(log_epsilon);
  29. }
  30. model {
  31. Y ~ normal(mu, sigma[B]);
  32. log_epsilon ~ normal(0, sigma_e);
  33. }
  34. ```
  35.  
  36. Generate data
  37.  
  38. ```{r}
  39. set.seed(123)
  40. n_block <- 20
  41. n_block_obs <- 10
  42. mu <- 3
  43. sd <- 1
  44. sd_block <- 0.5
  45. ranef <- rnorm(n_block, 0, sd_block)
  46. stdev <- sd * exp(ranef)
  47. y <- sapply(1:n_block, function(i)
  48. rnorm(n_block_obs, mu, stdev[i]))
  49. y <- c(y)
  50. block <- rep(1:n_block, each = n_block_obs)
  51. df <- data.frame(block = as.factor(block), y = y)
  52. ggplot(df) +
  53. geom_point(aes(x = block, y = y))
  54. ```
  55.  
  56. Fit to the simulated data
  57.  
  58. ```{r fit, cache=TRUE}
  59. data <- list(N = length(y), M = n_block, Y = y, B = block)
  60. fit <- sampling(model1, data = data, iter = 2000)
  61. print(fit)
  62. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement