Designing Monte Carlo simulations can be a fun and rewarding experience. Whether you are interested in evaluating the performance of a new optimizer, re-evaluating previous research claims (like the ANOVA is ‘robust’ to violations of normality), determine power rates for an upcoming research proposal, or simply to appease a strange thought in your head about a new statistical idea you heard about, designing Monte Carlo simulations can be incredibly rewarding and are extremely important to those who are statistically oriented. However, organizing simulations can be a challenge, and all too often coders resort to the dreaded “for-loop” strategy, for-ever resulting in confusing, error prone, and simulation specific code. The package SimDesign is one attempt to fix these and other issues that often arise when designing Monte Carlo simulation experiments.

Generally speaking, Monte Carlo simulations can be broken into three major components:

  • generate your data from some model/probability density function given various design conditions to be studied (e.g., sample size, distributions, group sizes, etc),
  • analyse the generated data using whatever statistical analyses you are interested in (e.g., \(t\)-test, ANOVA, SEMs, IRT, etc), and collect the statistics/CIs/\(p\)-values/parameter estimates you are interested in, and
  • summarise the results after repeating the simulations \(R\) number of times to obtain empirical estimates of the population’s behavior.

Each operation above represents the essential components of the SimDesign package. The design component is represented by a data.frame object containing the simulation conditions to be investigated, while generate, analyse, and summarise represent user-defined functions which comprise the three steps in the simulation. Each of these components are constructed and passed to the runSimulation() function where the simulation steps are evaluated, ultimately returning a data.frame object containing the simulation results.

1 A general overview

After loading the