########

# Start simulation Sim A ------------------------------------------------

#Simulation Model 1/ Sim A
#Specifying the settings/ parameter values for M!
#Generation of simulated datasets and
#Application of MOB, metaMOB and calculation of performance measures


rm(list = ls()) 
library("rslurm")
run <- 0
total <- 1
nsim <- 2000


istart <- run * (nsim/total) + 1
iend <- min((run + 1) * (nsim/total),nsim)
#Add seeds
set.seed(123)
seeds1 <- sample(1:200000,nsim)
seeds1 <- seeds1[istart:iend]
set.seed(12345)
seedstest1 <- sample(1:500000,nsim)
seedstest1<-seedstest1[istart:iend]


# Load packages ------------------------------------------------
library("Matrix",lib.loc="./localRpackages")
library("numDeriv",lib.loc="./localRpackages")
library("iterators",lib.loc="./localRpackages")
library("crayon", lib.loc="./localRpackages")
library("withr", lib.loc="./localRpackages")
library("purrr",lib.loc="./localRpackages")
library("gtable", lib.loc="./localRpackages")
library("digest", lib.loc="./localRpackages")
library("lazyeval", lib.loc="./localRpackages")
library("Rcpp", lib.loc="./localRpackages")
library("plyr",lib.loc="./localRpackages")
library("stringr",lib.loc="./localRpackages")
library("reshape2",lib.loc="./localRpackages")
library("rlang",lib.loc="./localRpackages")
library("colorspace",lib.loc="./localRpackages")
library("scales",lib.loc="./localRpackages")
library("tibble",lib.loc="./localRpackages")
library("viridisLite",lib.loc="./localRpackages")
library("ggplot2",lib.loc="./localRpackages")
library("backports", lib.loc="./localRpackages")
library("parallel")
library("foreach", lib.loc="./localRpackages")
library("doMC", lib.loc="./localRpackages")
library("Formula", lib.loc="./localRpackages")
library("mvtnorm",lib.loc="./localRpackages")
library("data.table",lib.loc="./localRpackages")
library("glue",lib.loc="./localRpackages")

library("tidyselect",lib.loc="./localRpackages")
library("dplyr",lib.loc="./localRpackages")
library("dtplyr",lib.loc="./localRpackages")
library("nlme", lib.loc="./localRpackages")
library("minqa", lib.loc="./localRpackages")
library("nloptr", lib.loc="./localRpackages")
library("lme4", lib.loc="./localRpackages")
library("lmerTest", lib.loc="./localRpackages")
library("libcoin", lib.loc="./localRpackages")
library("inum", lib.loc="./localRpackages")
library("mvtnorm",lib.loc="./localRpackages")
library("partykit", lib.loc="./localRpackages")
library("glmertree", lib.loc="./localRpackages")
# source("./datageneration_m1.R")
source("./sim_m1.R")


# Parameter values ------------------------------------------------

n.obs <- c(500,1000,2000)
n.trials <- c(5,10)
ranef.intercept <- c(0,5,10)
ranef.slope <-  c(10,5,0,2.5)
#varnum <- c(5,15)
varnum <- c(15)
#cor.x <- c(0.3,0)
cor.x <- c(0.3)
corUbislope <- c(2,1,0)
corUbi <- c(2,1,0)
# <- c(5,2.5)
diff <- c(5)
parameters1 <- expand.grid(varnum,n.trials,n.obs,ranef.intercept,#
                           ranef.slope,
                           cor.x, corUbi,
                           corUbislope,
                           diff)
colnames(parameters1) <- c("varnum","n.trials","n.obs","ranef.intercept","ranef.slope",
                           "cor.x", "corUbi",
                           "corUbislope",
                           "diff")

#Delete settings in which both random slope and random intercept are correlated
#with a covariate
del_combi <- which(parameters1$corUbi!=0&parameters1$corUbislope!=0&
                     parameters1$corUbislope!=parameters1$corUbi)

del_combi2 <- which(parameters1$corUbi!=0&parameters1$corUbislope!=0&
                      parameters1$corUbislope==parameters1$corUbi)
parameters_server <- parameters1[-c(del_combi,del_combi2), ]


rm(list=c("n.obs","n.trials","ranef.slope","varnum","cor.x","corUbislope","diff"))



parameters <- parameters_server
seeds <- rep(seeds1,times=dim(parameters)[1])
seedstest <- rep(seedstest1,times=dim(parameters)[1])


seeds <- rep(seeds1,times=dim(parameters)[1])
seedstest <- rep(seedstest1,times=dim(parameters)[1])


pars <- data.frame(cbind(seeds,seedstest,parameters))


# Start simulation --------------------------------------------------------


sjob <- slurm_apply(execute.sim.M1, pars, jobname = 'model1_nsim2000',
                    slurm_options = list(time = "10:00:00"),
                    nodes = 250, cpus_per_node = 2, submit = FALSE,libPaths="./localRpackages")


# save workspace --------------------------------------------------------
res <- get_slurm_out(sjob, outtype = 'raw')
head(res, 3)
res%>%length
save(list="res",
     file="./model1_nsim2000.RData")



cleanup_files(sjob)

