## -----------------------------------------------------------------------------
library(AccumulatR)

## -----------------------------------------------------------------------------
model <- race_spec(n_outcomes = 2L) |>
  add_accumulator("A", "lognormal") |>
  add_accumulator("B", "lognormal") |>
  add_outcome("A", "A") |>
  add_outcome("B", "B") |>
  set_parameters(separate = list(m = TRUE, s = TRUE)) |>
  finalize_model()

true_params <- c(
  A.m = log(0.30),
  A.s = 0.18,
  B.m = log(0.38),
  B.s = 0.22
)

## -----------------------------------------------------------------------------
set.seed(123456)

n_trials <- 500
params_df <- build_param_matrix(model, true_params, n_trials = n_trials)

sim <- simulate(model, params_df)

data_df <- data.frame(
  trials = sim$trials,
  R = factor(sim$R),
  rt = sim$rt,
  R2 = factor(sim$R2),
  rt2 = sim$rt2,
  stringsAsFactors = FALSE
)

head(data_df)

## ----eval=FALSE---------------------------------------------------------------
# prepared <- prepare_data(model, data_df)
# ctx <- make_context(model)
# neg_loglik <- function(theta) {
#   est <- true_params
#   est[c("A.m", "A.s", "B.m", "B.s")] <- theta[c("A.m", "A.s", "B.m", "B.s")]
#   est[c("A.s", "B.s")] <- exp(est[c("A.s", "B.s")])
#   params_df <- build_param_matrix(
#     model,
#     est,
#     n_trials = n_trials
#   )
#   ll <- log_likelihood(ctx, prepared, params_df)
#   -as.numeric(ll)
# }
# 
# start <- c(
#   A.m = log(0.24),
#   A.s = log(0.12),
#   B.m = log(0.48),
#   B.s = log(0.12)
# )
# 
# fit <- optim(start, neg_loglik, method = "Nelder-Mead")
# 
# fit_params <- fit$par
# fit_params[c("A.s", "B.s")] <- exp(fit_params[c("A.s", "B.s")])
# target <- true_params[c("A.m", "A.s", "B.m", "B.s")]
# 
# data.frame(
#   true = target,
#   recovered = fit_params,
#   miss = abs(target - fit_params)
# )

