Generation and analysis of conference designs

In this notebook, we show how to generate conference designs and calculate properties of these designs. For details on conference designs and their properties, see Properties of conference designs and A Classification Criterion for Definitive Screening Designs, Schoen et al., 2018 and [Enumeration and Classification of Definitive Screening Designs] (in preparation).

Load required libraries and define the class of conference designs to enumerate.

[3]:
import oapackage

conference_class = oapackage.conference_t(12, 6, 0)
print(conference_class)
conference class: number of rows 12, number of columns 6

Define the root array and extend the lists of conference designs.

[4]:
conference_designs = [[conference_class.create_root_three_columns()]]

for ii, ncols in enumerate(range(4, 8)):
    arrays = oapackage.extend_conference(conference_designs[ii], conference_class, verbose=0)
    conference_designs.append(arrays)
    print("extension resulted in %d designs with %d columns" % (len(arrays), ncols))
extension resulted in 9 designs with 4 columns
extension resulted in 42 designs with 5 columns
extension resulted in 123 designs with 6 columns
extension resulted in 184 designs with 7 columns

Calculate properties of conference designs

Here, we show how to calculate relevant properties of conference designs. Select a 12-run 7-factor conference design generated previously.

[5]:
design = conference_designs[4][0]
design.showarray()
array:
  0   1   1   1   1   1   1
  1   0  -1  -1  -1  -1  -1
  1   1   0  -1  -1   1   1
  1   1   1   0   1  -1  -1
  1   1   1  -1   0  -1   1
  1   1  -1   1   1   0  -1
  1   1  -1   1  -1   1   0
  1  -1   1   1  -1   1  -1
  1  -1   1   1  -1  -1   1
  1  -1   1  -1   1   1  -1
  1  -1  -1   1   1  -1   1
  1  -1  -1  -1   1   1   1

A sensible criterion to evaluate conference designs is the so-called \(F_4\)-vector (Schoen et al., 2019). We can compute the \(F_4\)-vector of a conference design as follows.

[6]:
design.FvaluesConference(4)
[6]:
(0, 25, 10)

Schoen et al., 2019 showed that conference designs are good building blocks for definitive screening designs (Xiao et al. 2012). The Orthogonal Array package can construct a definitive screening design from a conference design.

[9]:
dsd = oapackage.conference2DSD(design)
dsd.showarray()
array:
  0   1   1   1   1   1   1
  1   0  -1  -1  -1  -1  -1
  1   1   0  -1  -1   1   1
  1   1   1   0   1  -1  -1
  1   1   1  -1   0  -1   1
  1   1  -1   1   1   0  -1
  1   1  -1   1  -1   1   0
  1  -1   1   1  -1   1  -1
  1  -1   1   1  -1  -1   1
  1  -1   1  -1   1   1  -1
  1  -1  -1   1   1  -1   1
  1  -1  -1  -1   1   1   1
  0  -1  -1  -1  -1  -1  -1
 -1   0   1   1   1   1   1
 -1  -1   0   1   1  -1  -1
 -1  -1  -1   0  -1   1   1
 -1  -1  -1   1   0   1  -1
 -1  -1   1  -1  -1   0   1
 -1  -1   1  -1   1  -1   0
 -1   1  -1  -1   1  -1   1
 -1   1  -1  -1   1   1  -1
 -1   1  -1   1  -1  -1   1
 -1   1   1  -1  -1   1  -1
 -1   1   1   1  -1  -1  -1
  0   0   0   0   0   0   0

For the resulting definitive screening design, the Orthogonal Array package can compute some statistical properties based on projections into a smaller number of factors.

[7]:
PEC4, PIC4, PPC4 = oapackage.conference.conferenceProjectionStatistics(design, ncolumns=4, verbose=1)
conferenceProjectionStatistics: projection to 4 columns: PEC 0.286 PIC 3.111 PPC 0.458