I'm hoping for some help identifying the experiment design in this question:

A large bakery would like to run an experiment that consists of evaluating the volume of their cupcakes after baking. Four recipes among their many recipes are selected at random. The employees and the owner of this bakery agreed on using three cooking temperatures. It is desired to have six replications from each combination of the four recipes and the three cooking temperatures. However, only twenty-four cupcakes can be baked per day, so the experiment must have to be spread over three consecutive days in order to achieve the six replications. Six similar ovens, randomly chosen from the pool of all ovens, are available in the course of the entire experiment every day and each can bake four cupcakes at a time.

The related question is

Discuss in detail how you will implement such an experiment in light of the constraint(s) imposed. Identify the design that you would use.

I want to suggest a split-plot design with recipe as 24 the main treatment/whole plots, each divided into three temperatures (subplots/split-plots). I believe this achieves significant experimental efficiency, rather than 72 total 'runs' to achieve the 6 replicates. However, I'm not sure how to account for the 'similar' ovens in this design.

Should I consider a nested design? Is blocking for the effect of oven necessary (I think 'no' because they are chosen at random)? Or can I stick with the split-plot and effectively ignore the various ovens?

  • $\begingroup$ This looks like a homework problem, thus this only a suggestion.If you have six replicates and six ovens then why not consider which oven as an additional experimental factor? $\endgroup$
    – Dave2e
    Commented Oct 2, 2020 at 13:21
  • $\begingroup$ It's a practice question for an exam. I think the issue with the general factorial design is that selecting one recipe at random, then one temperature at random, and then one oven at random will require 72 total runs. Are you suggesting to use the replicates as blocks? $\endgroup$
    – Jackson
    Commented Oct 2, 2020 at 15:27
  • $\begingroup$ Correct, that is what I am recommending. With 72 runs that is enough to run one run with every recipe, temperature and oven. Also this will help for the blocking for the three days. $\endgroup$
    – Dave2e
    Commented Oct 2, 2020 at 16:25
  • $\begingroup$ You have convinced me that a nesting or split-plot structure is not necessary, but I am still struggling to finalize the design. If I think of this as a factorial experiment with three factors: recipe, temperature, and oven and days as a nuisance factor, then I won't achieve six replicates. Or should I think of it as a factorial with two factors (recipe, temp) and two blocking factors (oven, day)? $\endgroup$
    – Jackson
    Commented Oct 2, 2020 at 18:50
  • 2
    $\begingroup$ Split-plot design. The ovens are the whole plots (units) and can only run at one temperature at a time, so only 6 runs per day at the whole-plot level. A hard-to-change factor. But within an oven you have 4 split-plots (sub-units) that can run the four different recipes, so 24 sub-units per day. The language of "randomly chosen from the pool of all ovens" hints that you're to treat ovens as random-effects blocks instead of fixed-effects blocks. This might help: minitab.com/uploadedFiles/Content/News/Published_Articles/… and ... $\endgroup$ Commented Oct 4, 2020 at 8:49

1 Answer 1


MichiganWater mention this is a split plot design, Temperature is the plot and the recipe is the subplot.

Using R to design the experiment:


Temp <- c("T1", "T2", "T3")
Recipe <- c("R1", "R2", "R3", "R4")
#Oven <- c("O1", "O2", "O3", "O4", "O5", "O6")

splitdesign <- design.split(Temp, Recipe, r=6, serie = 2)

#rearrange the table
answer <-pivot_wider(splitdesign$book, id_cols = "block", names_from="Temp", values_from="Recipe", values_fn = list(Recipe= toString))

# # A tibble: 6 x 4
# block T3               T2               T1            
# <fct> <chr>            <chr>            <chr>         
# 1     R2, R1, R4, R3   R3, R4, R2, R1   R1, R2, R3, R4
# 2     R4, R2, R1, R3   R4, R2, R1, R3   R2, R1, R4, R3
# 3     R2, R4, R1, R3   R2, R1, R4, R3   R2, R1, R3, R4
# 4     R1, R3, R2, R4   R3, R2, R1, R4   R2, R3, R4, R1
# 5     R3, R2, R4, R1   R1, R4, R2, R3   R2, R3, R4, R1
# 6     R1, R4, R3, R2   R2, R1, R4, R3   R4, R3, R2, R1

In this case the block would represent the oven. Thus to run the experiment each block would assign each temperature to a different oven. For example: T3 block would run in oven 1 to 6 across all of the blocks, then T2 would run (3, 4, 5, 6, 1, 2) and T1 would run (5, 6, 1, 2, 3, 4) now each Treatment (Recipe & Temperature combination) would run in each oven an equal number of times (ie a balanced design).

Hope this helps.

  • $\begingroup$ Perhaps the question that the OP quoted could be more clear, but I don't think your answer fits the parameters of the question. Each oven can bake 4 cupcakes at a time, and only 24 cupcakes can be baked per day, so there can only be 6 oven-level runs per day, otherwise it'd be possible to bake more than 24/day, yes? To me, this indicates a split-plot design with temp as a hard-to-change factor applied to oven run whole-plots, and recipe applied to cupcake split-plots, as described in my comments under the Question. $\endgroup$ Commented Oct 10, 2020 at 2:12
  • 1
    $\begingroup$ @MichiganWater, I completely missed the "each can bake four cupcakes at a time." line. Yes the split plot design is probably best. See edits $\endgroup$
    – Dave2e
    Commented Oct 10, 2020 at 3:55
  • $\begingroup$ Glad I was able to help add some clarity. I tried running your code, but got this error during the call to pivot_wider: Error: Input must be a vector, not NULL. Does the code as written above work for you? I'm not familiar with pivot_wider (or the tidy universe), so I don't know how to troubleshoot why it might be wrong (on my computer, at least). $\endgroup$ Commented Oct 10, 2020 at 5:36
  • $\begingroup$ @MichiganWater, Sorry the function in pivot_wider should be toString() and not "cat" $\endgroup$
    – Dave2e
    Commented Oct 10, 2020 at 13:34
  • $\begingroup$ Code works now. +1 on the answer. $\endgroup$ Commented Oct 11, 2020 at 2:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.