Learn R Programming

⚠️There's a newer version (1.8.2) of this package.Take me there.

skpr

Overview

skpr is an open source design of experiments suite for generating and evaluating optimal designs in R. Here is a sampling of what skpr offers:

  • Generates and evaluates D, I, A, Alias, E, T, and G optimal designs, as well as user-defined custom optimality criteria.
  • Supports generation and evaluation of split/split-split/…/N-split plot designs.
  • Includes parametric and Monte Carlo power evaluation functions, and supports calculating power for censored responses.
  • Provides an extensible framework for the user to evaluate Monte Carlo power using their own libraries.
  • Includes a Shiny graphical user interface, skprGUI, that auto-generates the R code used to create and evaluate the design to improve ease-of-use and enhance reproducibility.

Installation

# To install:
install.packages("skpr")

# To install the latest version from Github:
# install.packages("devtools")
devtools::install_github("tylermorganwall/skpr")

Functions

  • gen_design() generates optimal designs from a candidate set, given a model and the desired number of runs.
  • eval_design() evaluates power parametrically for linear models, for normal and split-plot designs.
  • eval_design_mc() evaluates power with a Monte Carlo simulation, for linear and generalized linear models. This function also supports calculating power for split-plot designs using REML.
  • eval_design_survival_mc() evaluates power with a Monte Carlo simulation, allowing the user to specify a point at which the data is censored.
  • eval_design_custom_mc() allows the user to import their own libraries and use the Monte Carlo framework provided by skpr to calculate power.
  • skprGUI() and skprGUIbrowser() opens up the GUI in either R Studio or an external browser.

If addition, the package offers two functions to generate common plots related to designs:

  • plot_correlations() generates a color map of correlations between variables.
  • plot_fds() generates the fraction of design space plot for a given design.

##skprGUI

skprGUI provides an graphical user interface to access all of the main features of skpr. An interactive tutorial is provided to familiarize the user with the available functionality. Type skprGUI() or skprGUIbrowser() to begin. Screenshots:

Usage

library(skpr)

#Generate a candidate set of all potential design points to be considered in the experiment
#The hypothetical experiment is determining what affects the caffeine content in coffee
candidate_set = expand.grid(temp = c(80,90,100), 
                            type = c("Kona","Java"),
                            beansize = c("Large","Medium","Small"))
candidate_set
#>    temp type beansize
#> 1    80 Kona    Large
#> 2    90 Kona    Large
#> 3   100 Kona    Large
#> 4    80 Java    Large
#> 5    90 Java    Large
#> 6   100 Java    Large
#> 7    80 Kona   Medium
#> 8    90 Kona   Medium
#> 9   100 Kona   Medium
#> 10   80 Java   Medium
#> 11   90 Java   Medium
#> 12  100 Java   Medium
#> 13   80 Kona    Small
#> 14   90 Kona    Small
#> 15  100 Kona    Small
#> 16   80 Java    Small
#> 17   90 Java    Small
#> 18  100 Java    Small

#Generate the design (default D-optimal)
design = gen_design(candidateset = candidate_set, 
                    model = ~temp + type + beansize,
                    trials=12)
design
#>    temp type beansize
#> 1    80 Java   Medium
#> 2   100 Java    Large
#> 3   100 Java    Small
#> 4    80 Java    Large
#> 5    80 Kona   Medium
#> 6    80 Kona    Small
#> 7   100 Kona    Small
#> 8   100 Kona   Medium
#> 9    80 Kona    Large
#> 10  100 Java   Medium
#> 11  100 Kona    Large
#> 12   80 Java    Small

#Evaluate power for the design with an allowable type-I error of 5% (default)
eval_design(design)
#>     parameter            type     power
#> 1 (Intercept)    effect.power 0.8424665
#> 2        temp    effect.power 0.8424665
#> 3        type    effect.power 0.8424665
#> 4    beansize    effect.power 0.5165386
#> 5 (Intercept) parameter.power 0.8424665
#> 6        temp parameter.power 0.8424665
#> 7       type1 parameter.power 0.8424665
#> 8   beansize1 parameter.power 0.5593966
#> 9   beansize2 parameter.power 0.5593966
#> ============Evaluation Info============
#> • Alpha = 0.05 • Trials = 12 • Blocked = FALSE
#> • Evaluating Model = ~temp + type + beansize
#> • Anticipated Coefficients = c(1.000, 1.000, 1.000, 1.000, -1.000)

#Evaluate power for the design using a Monte Carlo simulation. 
#Here, we set the effect size (here, the signal-to-noise ratio) to 1.5.
eval_design_mc(design, effectsize=1.5)
#>     parameter               type power
#> 1 (Intercept)    effect.power.mc 0.600
#> 2        temp    effect.power.mc 0.612
#> 3        type    effect.power.mc 0.610
#> 4    beansize    effect.power.mc 0.316
#> 5 (Intercept) parameter.power.mc 0.600
#> 6        temp parameter.power.mc 0.612
#> 7       type1 parameter.power.mc 0.610
#> 8   beansize1 parameter.power.mc 0.359
#> 9   beansize2 parameter.power.mc 0.354
#> ===========Evaluation Info============
#> • Alpha = 0.05 • Trials = 12 • Blocked = FALSE
#> • Evaluating Model = ~temp + type + beansize
#> • Anticipated Coefficients = c(0.750, 0.750, 0.750, 0.750, -0.750)

#Evaluate power for the design using a Monte Carlo simulation, for a non-normal response. 
#Here, we also increase the number of simululations to improve the precision of the results.
eval_design_mc(design, nsim=5000, glmfamily = "poisson", effectsize=c(2,6))
#>     parameter               type  power
#> 1 (Intercept)    effect.power.mc 0.9968
#> 2        temp    effect.power.mc 0.9826
#> 3        type    effect.power.mc 0.9832
#> 4    beansize    effect.power.mc 0.8502
#> 5 (Intercept) parameter.power.mc 0.9968
#> 6        temp parameter.power.mc 0.9826
#> 7       type1 parameter.power.mc 0.9832
#> 8   beansize1 parameter.power.mc 0.8842
#> 9   beansize2 parameter.power.mc 0.7052
#> ============Evaluation Info============
#> • Alpha = 0.05 • Trials = 12 • Blocked = FALSE
#> • Evaluating Model = ~temp + type + beansize
#> • Anticipated Coefficients = c(1.242, 0.549, 0.549, 0.549, -0.549)

#skpr was designed to operate with the pipe (%>%) in mind. 
#Here is an example of an entire design of experiments analysis in three lines:

expand.grid(temp = c(80,90,100), type = c("Kona","Java"), beansize = c("Large","Medium","Small")) %>%
  gen_design(model = ~temp + type + beansize + beansize:type + I(temp^2), trials=24, optimality="I") %>%
  eval_design_mc()
#>          parameter               type power
#> 1      (Intercept)    effect.power.mc 0.912
#> 2             temp    effect.power.mc 0.927
#> 3             type    effect.power.mc 0.997
#> 4         beansize    effect.power.mc 0.935
#> 5        I(temp^2)    effect.power.mc 0.637
#> 6    type:beansize    effect.power.mc 0.913
#> 7      (Intercept) parameter.power.mc 0.912
#> 8             temp parameter.power.mc 0.927
#> 9            type1 parameter.power.mc 0.997
#> 10       beansize1 parameter.power.mc 0.917
#> 11       beansize2 parameter.power.mc 0.913
#> 12       I(temp^2) parameter.power.mc 0.637
#> 13 type1:beansize1 parameter.power.mc 0.899
#> 14 type1:beansize2 parameter.power.mc 0.902
#> ==============Evaluation Info==============
#> • Alpha = 0.05 • Trials = 24 • Blocked = FALSE
#> • Evaluating Model = ~temp + type + beansize + type:beansize + I(temp^2)
#> • Anticipated Coefficients = c(1.000, 1.000, 1.000, 1.000, -1.000, 1.000, 1.000, -1.000)

Copy Link

Version

Install

install.packages('skpr')

Monthly Downloads

1,172

Version

0.66.5

License

GPL-3

Issues

Pull Requests

Stars

Forks

Maintainer

Tyler Morgan-Wall

Last Published

May 11th, 2021

Functions in skpr (0.66.5)

calculate_split_columns

Calculate Split Plot Columns
contr.simplex

Orthonormal Contrast Generator
convert_rownames_to_covariance

Converts dot operator to terms
convert_model_dots

Converts dot operator to terms
blockingstructure

Find block sizes in column
anticoef_from_delta_surv

Generates Anticipated Coefficients from delta for eval_design_suvival_mc
calc_conservative_anticoef

Calculate Conservative Anticipated Coefficients
get_optimality

Get optimality values
eval_design_survival_mc

Evaluate Power for Survival Design
calc_interaction_degrees

Calculate Interaction Degrees of Freedom
anticoef_from_delta

Generates Anticipated Coefficients from delta
extractPvalues

Extract p-values from a model object
aliasmodel

Alias terms
calculate_degrees_of_freedom

Calculate Degrees of Freedom
is_intralayer_interaction

Layer Interaction
convert_blockcolumn_rownames

Convert Block Column to Rownames
gen_momentsmatrix

Generates the moment matrix
calculate_gefficiency

Calculate G Efficiency Either calculates G-Efficiency by Monte Carlo sampling from the design space (ignoring constraints), searching for the maximum point (slower but higher quality), or by using a user-specified candidate set for the design space (fastest).
rearrange_formula_by_order

Rearrange formula by order
reduceRunMatrix

Remove columns not in model
gen_poisson_anticoef

Generates Poisson Anticipated Coefficients
quad

quadratic
eval_design_mc

Monte Carlo Power Evaluation for Experimental Designs
eval_design_custom_mc

Monte Carlo power evaluation for experimental designs with user-supplied libraries
priorlevels

Prior levels
gen_anticoef

Generates Anticipated Coefficients
effectpower

Calculate Effect Power
disallowed_combinations

Detect and list disallowed combinations in candidate set
effectpowermc

Fit Anova for Effect Power Calculation in Monte Carlo
constructRunMatrix

Construct Run Matrix given rows
calculatepower

Calculate Power
gen_binomial_anticoef

Generates Binomial Anticipated Coefficients
normalize_numeric_runmatrix

Normalize Run Matrix
parameterpower

Calculates parameter power
gen_design

Generate optimal experimental designs
get_attribute

Get attribute values
eval_design

Calculate Power of an Experimental Design
plot_correlations

Plots design diagnostics
genparammatrix

Generate Parameter Matrix
remove_skpr_blockcols

Remove skpr-generated blocking columns
gen_exponential_anticoef

Generates Exponential Anticipated Coefficients
plot_fds

Fraction of Design Space Plot
potential_permuted_factors

Find potential permuted interactions
print.skpr_eval_output

Print evaluation information
generate_noise_block

Generate Noise Block
permutations

Permutations
skprGUIbrowser

skprGUIbrowser
%>%

re-export magrittr pipe operator
genhypmatrix

Generate Hypothesis Matrix
skprGUIserver

Graphical User Interface for skpr
skprGUI

Graphical User Interface for skpr
calcblocksizes

Calculate block sizes
calcnoncentralparam

Calculate Non-Centrality Parameter
calculate_level_vector

Calculate level vector