Description Details Author(s) References See Also Examples
This help page documents the statistical and algorithmic details of splitplot designs in FrF2
A splitplot design is similar to a block
ed design, with the difference that
there are also factors of interest that can be only changed on block level (socalled whole
plot factors). The blocks are called “plots” in the context of splitplot designs.
The factors that can (and should!) be varied within a plot are called splitplot factors.
Note that the experiment provides more information on splitplot factors than on wholeplot factors.
Warning: In terms of analysis, splitplot designs would have to be treated by advanced random effects models, but often are not. At the very least, the user must be aware that all wholeplot effects (i.e. effects on columns that only change between plots) are (likely to be) more variable than splitplot effects so that e.g. it does not necessarily mean anything if they stick out in a normal or halfnormal effects plot.
Designs for hardtochange factors are also treated by the splitplot approach in function FrF2
,
although they are not quite splitplot designs: The are nonrandomized splitplot designs arranged in an order
such that the first wholeplot factors have as few as possible changes. This gives very poor information on
these first wholeplot factors (which in the extreme are only changed once or twice),
if there is variability involved with setting the factor levels.
If hardtochange factors can be implemented as true wholeplot factors with randomization, this is by far preferrable from a statistical
point of view (but may nevertheless be rejected from a feasibility point of view, as the necessary changes may seem unaffordable).
For design generation, there are two principal ways to handle splitplot designs, manual definition
(i.e. the user specifies exactly which columns are to be used for which purpose) and automatic
definition. Each situation has its specifics. These are detailed below. For users with
not so much mathematical/statistical background, it will often be best to use the automatic way,
specifying the treatement factors of interest via nfactors
or factor.names
and a single number for WPs
.
Users with more mathematical background may want to use the manual definitions, perhaps
in conjunction with published catalogues of good splitplot designs, or
after inspecting possibilities with function splitpick
.
The user can specify a design with the design
or the generators
option
and specify manually with the WPfacs
option, which factors are whole plot factors
(i.e. factors that do not change within a plot).
The other factors become splitplot factors (i.e. factors that do change within a plot).
If the user chooses this route, WPfacs
must be character vectors of factor names, factor letters,
factor numbers preceded by capital F, or a vector or list of factor position numbers (NOT: Yates column numbers).
Caution: It is the users responsibility to ensure a
good choice of splitplot design (e.g. by using a catalogued design from Huang, Chen and Voelkel 1998,
Bingham and Sitter 2003, or Bingham Schoen and Sitter 2004).
In case of a usermistake such that the resulting design is not a splitplot design with
the alleged number of whole plots, an error is thrown.
As mentioned above, splitplot designs differ from block designs by the fact that the block main
effects are purely nuisance parameters which are assumed (based on prior knowledge)
to be relevant but are not of interest, while the plots are structured by
nfac.WP
whole plot factors, which are of interest.
The user has to decide on a number of whole plots (WPs
) as well as
the number of whole plot factors nfac.WP
.
If log2(WPs) <= nfac.WP <= WPs1
, it is obviously in principle possible to accomodate the
desired number of whole plot factors in the desired number of whole plots. If nfac.WP > WPs/2
,
the base design for the splitplot structure has to be of resolution III. Sometimes,
subject matter considerations limit whole plot sizes, and there are only few interesting
whole plot factors, i.e. nfac.WP < log2(WPs)
.
In this case, it is of course nevertheless necessary to
have a total of log2(WPs)
whole plot construction factors;
the missing log2(WPs)  nfac.WP
factors are added
to the design (names starting with WP
), and nfactors
is increased accordingly.
In all cases, the first nfac.WPs
userspecified factors are treated as whole plot factors, the
remaining factors as splitplot factors.
From there, function FrF2
proceeds like in the blocked situation by starting
with the best design and working its way down to worse designs, if the best design cannot
accomodate the desired splitplot structure. For each design, function FrF2
calls function splitpick
, which permutes base factors until
the requested whole plot / splitplot structure is achieved, or until impossibility for
this design with these base factors has been ascertained. In the latter case, function FrF2
proceeds to the next best design and so forth.
If several competing splitplot designs based on the same base design are found,
the best possible resolution among the first check.WPs
such designs is chosen.
No further criteria are automatically implemented, and no more than check.WPs
designs are checked. If not satisfied with the structure of the whole plot portion of the experiment,
increasing check.WPs
vs. the default 10 may help.
Expert users may want to inspect possibilities,
using function splitpick
directly.
Note that the algorithm does not necessarily find an existing splitplot design. It has been checked out which catalogued designs it can find: designs for all catalogued situations from Bingham and Sitter (2003) have been found, as well as for most catalogued situations from Huang, Chen and Voelkel (1998). Occasionally, a better design than catalogued has been found, e.g. for 4 whole plot and 10 split plot factors in 32 runs with 16 whole plots, the design found by the algorithm is resolution IV, while Huang, Chen and Voelkel propose a resolution III design. The algorithm has the largest difficulties with extreme designs in the sense that a large number of whole plots with a small number of whole plot factors are to be accomodated; thus it does not find designs for the more extreme situations in Bingham, Schoen and Sitter (2004).
Please contact me with any suggestions for improvements.
Ulrike Groemping
Bingham, D.R., Schoen, E.D. and Sitter, R.R. (2004). Designing Fractional Factorial SplitPlot Experiments with Few WholePlot Factors. Applied Statistics 53, 325339.
Bingham, D. and Sitter, R.R. (2003). Fractional Factorial SplitPlot Designs for Robust Parameter Experiments. Technometrics 45, 8089.
Chen, J., Sun, D.X. and Wu, C.F.J. (1993) A catalogue of 2level and 3level orthogonal arrays. International Statistical Review 61, 131145.
Cheng, C.S. and Tsai, P.W. (2009). Optimal twolevel regular fractional factorial block and splitplot designs. Biometrika 96, 8393.
Huang, P., Chen, D. and Voelkel, J.O. (1998). MinimumAberration TwoLevel SplitPlot Designs. Technometrics 40, 314326.
See Also FrF2
for regular fractional factorials,
catlg
for the Chen, Sun, Wu catalogue of designs
and some accessor functions,
and block
for the statistical aspects of blocked designs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42  ########## hard to change factors ####################
## example from Bingham and Sitter Technometrics 19999
## MotorSpeed, FeedMode,FeedSizing,MaterialType are hard to change
BS.ex < FrF2(16,7,hard=4,
factor.names=c("MotorSpeed", "FeedMode","FeedSizing","MaterialType",
"Gain","ScreenAngle","ScreenVibLevel"),
default.levels=c("","+"))
design.info(BS.ex)
BS.ex
## NOTE: the design has 8 whole plots.
## The first hardtochange factors have very few changes only
## between whole plots.
## A conscious and honest decision is required whether it is
## acceptable for the situation at hand not to reset them!
## A proper splitplot design with resetting all whole plot factors
## for each whole plot would be strongly preferred from a
## statistical point of view.
########## automatic generation for split plot ##########
## 3 control factors, 5 noise factors, control factors are whole plot factors
## 8 plots desired in a total of 32 runs
## Bingham Sitter 2003
BS.ex2a < FrF2(32, 8, WPs=8, nfac.WP=3,
factor.names=c(paste("C",1:3,sep=""), paste("N",1:5,sep="")),randomize=TRUE)
## manual generation of this same design
BS.ex2m < FrF2(32, 8, generators=c("ABD","ACD","BCDE"),WPs=8, WPfacs=c("C1","C2","C3"), nfac.WP=3,
factor.names=c(paste("C",1:3,sep=""),paste("N",1:5,sep="")),randomize=TRUE)
## design with few whole plot factors
## 2 whole plot factors, 7 split plot factors
## 8 whole plots, i.e. one extra WP factor needed
BSS.cheese.exa < FrF2(32, 9, WPs=8, nfac.WP=2,
factor.names=c("A","B","p","q","r","s","t","u","v"))
design.info(BSS.cheese.exa)
## manual generation of the design used by Bingham, Schoen and Sitter
## note that the generators include a generator for the 10th spplitting factor
## s= ABq, t = Apq, u = ABpr and v = Aqr, splitting factor rho=Apqr
BSS.cheese.exm < FrF2(32, gen=list(c(1,2,4),c(1,3,4),c(1,2,3,5),c(1,4,5),c(1,3,4,5)),
WPs=8, nfac.WP=3, WPfacs=c(1,2,10),
factor.names=c("A","B","p","q","r","s","t","u","v","rho"))
design.info(BSS.cheese.exm)

Loading required package: DoE.base
Loading required package: grid
Loading required package: conf.design
Attaching package: 'DoE.base'
The following objects are masked from 'package:stats':
aov, lm
The following object is masked from 'package:graphics':
plot.design
The following object is masked from 'package:base':
lengths
sh: 1: cannot create /dev/null: Permission denied
$type
[1] "FrF2.splitplot"
$nruns
[1] 16
$nfactors
[1] 7
$nfac.WP
[1] 4
$nfac.SP
[1] 3
$factor.names
$factor.names$MotorSpeed
[1] "" "+"
$factor.names$FeedMode
[1] "" "+"
$factor.names$FeedSizing
[1] "" "+"
$factor.names$MaterialType
[1] "" "+"
$factor.names$Gain
[1] "" "+"
$factor.names$ScreenAngle
[1] "" "+"
$factor.names$ScreenVibLevel
[1] "" "+"
$nWPs
[1] 8
$plotsize
[1] 2
$res.WP
[1] 4
$aliased
$aliased$legend
[1] "A=MotorSpeed" "B=FeedMode" "C=FeedSizing" "D=MaterialType"
[5] "E=Gain" "F=ScreenAngle" "G=ScreenVibLevel"
$aliased$main
character(0)
$aliased$fi2
[1] "AB=CD=EF" "AC=BD=EG" "AD=BC=FG" "AE=BF=CG" "AF=BE=DG" "AG=CE=DF" "BG=CF=DE"
$FrF2.version
[1] "1.72"
$catlg.name
[1] "catlg"
$base.design
[1] "73.1"
$map
[1] 1 2 3 4
$orig.fac.order
[1] 1 2 3 5 4 6 7
$replications
[1] 1
$repeat.only
[1] FALSE
$randomize
[1] TRUE
$seed
NULL
$creator
FrF2(16, 7, hard = 4, factor.names = c("MotorSpeed", "FeedMode",
"FeedSizing", "MaterialType", "Gain", "ScreenAngle", "ScreenVibLevel"),
default.levels = c("", "+"))
run.no run.no.std.rp MotorSpeed FeedMode FeedSizing MaterialType Gain
1 1 2.1.2  + +  
2 2 1.1.1  + +  +
ScreenAngle ScreenVibLevel
1 + +
2  
run.no run.no.std.rp MotorSpeed FeedMode FeedSizing MaterialType Gain
3 3 3.2.1  +  + 
4 4 4.2.2  +  + +
ScreenAngle ScreenVibLevel
3 + 
4  +
run.no run.no.std.rp MotorSpeed FeedMode FeedSizing MaterialType Gain
5 5 6.3.2     
6 6 5.3.1     +
ScreenAngle ScreenVibLevel
5  
6 + +
run.no run.no.std.rp MotorSpeed FeedMode FeedSizing MaterialType Gain
7 7 7.4.1   + + 
8 8 8.4.2   + + +
ScreenAngle ScreenVibLevel
7  +
8 + 
run.no run.no.std.rp MotorSpeed FeedMode FeedSizing MaterialType Gain
9 9 9.5.1 +  +  +
10 10 10.5.2 +  +  
ScreenAngle ScreenVibLevel
9  +
10 + 
run.no run.no.std.rp MotorSpeed FeedMode FeedSizing MaterialType Gain
11 11 12.6.2 +   + +
12 12 11.6.1 +   + 
ScreenAngle ScreenVibLevel
11  
12 + +
run.no run.no.std.rp MotorSpeed FeedMode FeedSizing MaterialType Gain
13 13 13.7.1 + +   +
14 14 14.7.2 + +   
ScreenAngle ScreenVibLevel
13 + 
14  +
run.no run.no.std.rp MotorSpeed FeedMode FeedSizing MaterialType Gain
15 15 15.8.1 + + + + 
16 16 16.8.2 + + + + +
ScreenAngle ScreenVibLevel
15  
16 + +
class=design, type= FrF2.splitplot
NOTE: columns run.no and run.no.std.rp are annotation, not part of the data frame
sh: 1: cannot create /dev/null: Permission denied
sh: 1: cannot create /dev/null: Permission denied
sh: 1: cannot create /dev/null: Permission denied
Warning message:
In FrF2(32, 9, WPs = 8, nfac.WP = 2, factor.names = c("A", "B", :
There are fewer factors than needed for a full factorial whole plot design. 1 dummy splitting factor(s) have been introduced.
$type
[1] "FrF2.splitplot"
$nruns
[1] 32
$nfactors
[1] 10
$nfac.WP
[1] 3
$nfac.SP
[1] 7
$factor.names
$factor.names$A
[1] 1 1
$factor.names$B
[1] 1 1
$factor.names$WP3
[1] 1 1
$factor.names$p
[1] 1 1
$factor.names$q
[1] 1 1
$factor.names$r
[1] 1 1
$factor.names$s
[1] 1 1
$factor.names$t
[1] 1 1
$factor.names$u
[1] 1 1
$factor.names$v
[1] 1 1
$nWPs
[1] 8
$plotsize
[1] 4
$res.WP
[1] Inf
$aliased
$aliased$legend
[1] "A=A" "B=B" "C=WP3" "D=p" "E=q" "F=r" "G=s" "H=t" "J=u"
[10] "K=v"
$aliased$main
character(0)
$aliased$fi2
[1] "AB=DF" "AC=DG" "AD=HK=BF=CG=EJ" "AE=DJ"
[5] "AF=BD" "AG=CD" "AH=DK" "AJ=DE"
[9] "AK=DH" "BC=FG" "BE=FJ" "BG=CF"
[13] "BH=FK" "BJ=EF" "BK=FH" "CE=GJ"
[17] "CH=GK" "CJ=EG" "CK=GH" "EH=JK"
[21] "EK=HJ"
$FrF2.version
[1] "1.72"
$catlg.name
[1] "catlg"
$base.design
[1] "105.1"
$map
[1] 2 3 4 1 5
$orig.fac.order
[1] 1 2 3 4 5 6 7 8 9 10
$replications
[1] 1
$repeat.only
[1] FALSE
$randomize
[1] TRUE
$seed
NULL
$creator
FrF2(32, 9, WPs = 8, nfac.WP = 2, factor.names = c("A", "B",
"p", "q", "r", "s", "t", "u", "v"))
sh: 1: cannot create /dev/null: Permission denied
$type
[1] "FrF2.splitplot"
$nruns
[1] 32
$nfactors
[1] 10
$nfac.WP
[1] 3
$nfac.SP
[1] 7
$factor.names
$factor.names$A
[1] 1 1
$factor.names$B
[1] 1 1
$factor.names$rho
[1] 1 1
$factor.names$p
[1] 1 1
$factor.names$q
[1] 1 1
$factor.names$r
[1] 1 1
$factor.names$s
[1] 1 1
$factor.names$t
[1] 1 1
$factor.names$u
[1] 1 1
$factor.names$v
[1] 1 1
$nWPs
[1] 8
$plotsize
[1] 4
$res.WP
[1] NaN
$aliased
$aliased$legend
[1] "A=A" "B=B" "C=rho" "D=p" "E=q" "F=r" "G=s" "H=t" "J=u"
[10] "K=v"
$aliased$main
[1] "C=DK=FH" "D=CK" "F=CH" "H=CF" "K=CD"
$aliased$fi2
[1] "AB=EG" "AC=GJ" "AD=EH" "AE=BG=DH=FK" "AF=EK"
[6] "AG=BE=CJ" "AH=DE" "AJ=CG" "AK=EF" "BC=EJ"
[11] "BD=GH" "BF=GK" "BH=DG" "BJ=CE" "BK=FG"
[16] "DF=HK"
$FrF2.version
[1] "1.72"
$base.design
[1] "generator columns: "
$map
[1] 1 2 3 4 5
$orig.fac.order
[1] 1 2 10 3 4 5 6 7 8 9
$replications
[1] 1
$repeat.only
[1] FALSE
$randomize
[1] TRUE
$seed
NULL
$creator
FrF2(32, gen = list(c(1, 2, 4), c(1, 3, 4), c(1, 2, 3, 5), c(1,
4, 5), c(1, 3, 4, 5)), WPs = 8, nfac.WP = 3, WPfacs = c(1,
2, 10), factor.names = c("A", "B", "p", "q", "r", "s", "t",
"u", "v", "rho"))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.