Creates a multi-location augmented partially replicated (p-rep) design (Williams, Piepho and Whitaker, 2011). Instead of replicated checks, a subset of the test entries is replicated at each location: every entry is planted once at every location, and the entries chosen for p-rep at a location get extra plots there. All plots of a location are arranged in incomplete blocks, chosen so that pairs of entries share a block at most once across the whole trial ((0,1)-designs).
Usage
augmented_prep_design(
treatments,
locations,
block_size = 8,
prep_prop = NULL,
n_duplicate_per_location = NULL,
replications_per_repeated_entry = 2,
n_blocks_per_location = NULL,
resolvable = FALSE,
n_candidates = 1000,
seed = NULL,
field_cols = NULL,
rows_per_block = NULL,
blocks_per_row = NULL,
serpentine = TRUE,
output_file = NULL,
method = c("search", "alpha", "alpha2"),
n_prep_per_block = NULL,
n_efficiency_candidates = 5
)Arguments
- treatments
Character vector of entry names.
- locations
Character vector of location names.
- block_size
Maximum final incomplete block size. Can be a single integer or a named vector indexed by location (the algebraic methods use its smallest value). Actual block sizes may differ by one plot when totals do not divide evenly.
- prep_prop
Optional proportion of entries to duplicate per location (
method = "search"only). IfNULL, entries are split across locations so each entry is duplicated at approximately one location.- n_duplicate_per_location
Optional number of entries duplicated at each location (
method = "search"only). Can be a single integer, a vector matchinglocations, or a named vector indexed by location.- replications_per_repeated_entry
Total number of plots for entries selected for p-rep replication at a location. The default
2gives one base plot plus one extra plot. Can be a single integer or a named vector indexed by location. Must be 2 for the algebraic methods.- n_blocks_per_location
Optional number of incomplete blocks at each location (
method = "search"only). IfNULL, the number of blocks is the minimum needed so no block is larger thanblock_size. Can be a single integer or a named vector indexed by location.- resolvable
Logical (
method = "search"). IfTRUE, each location is laid out as a resolvable design: the blocks are grouped intoreplications_per_repeated_entryreplicates, each replicate holds every p-rep entry of that location exactly once plus an even share of the unreplicated entries, and all replicates have the same number of blocks. Ifn_blocks_per_locationis given it must be a multiple of the number of replicates. Designs from the algebraic methods are always resolvable.- n_candidates
Maximum number of candidate designs (
"search") or of random starting arrays ("alpha","alpha2") to generate.summary$n_candidates_evaluatedreports how many were used.- seed
Optional random seed.
- field_cols
Optional number of field columns for row/column layout. Can be a single integer or a named vector indexed by location.
- rows_per_block
Optional number of physical field rows each incomplete block should occupy. Can be a single integer or a named vector for selected locations. Must be used with
blocks_per_rowfor those locations.- blocks_per_row
Optional number of incomplete blocks to place side by side in each field row band. Can be a single integer or a named vector for selected locations. Must be used with
rows_per_blockfor those locations.- serpentine
Logical. If
TRUE, row/column coordinates use serpentine ordering within each location.- output_file
Optional tab-delimited output file for the complete design.
- method
Construction method:
"search","alpha"or"alpha2"(see Details).- n_prep_per_block
For the algebraic methods, the number
mof p-rep entries in every block. IfNULL, the largest feasiblemwhose blocks fit inblock_sizeis used.- n_efficiency_candidates
Number of optimal candidates (no entry repeated within a block, connected locations, and no pair of entries sharing more than one block) to compare on the average efficiency factor; the one with the highest efficiency is returned. Use
1to return the first optimal candidate. Efficiency is compared for up to 2000 entries.
Value
A list with design inputs, summary diagnostics, complete plot-level
design, Breedbase-compatible design columns, block summary, replication
summary, repeated-entry groups, and pairwise concurrence matrix. In the
complete design, repeated_at is the location where the entry receives its
extra p-rep plot(s), or "not_repeated" when the entry is not selected for
extra replication. replicate is the replicate (superblock) of the plot
for resolvable designs, and 1 otherwise; the Breedbase rep column is
replicate for resolvable designs and the plot's occurrence number
otherwise.
Details
Three construction methods are available through method:
"search"(default)A flexible randomized search. Any number of entries, locations, block sizes, p-rep proportions (
prep_prop,n_duplicate_per_location), replication levels (replications_per_repeated_entry) and block counts can be used, with an optional resolvable layout (resolvable)."alpha"The partial alpha-array construction of Section 2.1 of the paper. An alpha-array for
l * mrows and2lreplicates is searched, them x 2rectangles on its diagonal give the two-replicate design for the p-rep entries of each location, and half of the remaining elements of each column are deleted (Section 2.2) so that the design is a (0,1)-design. Every entry is duplicated at exactly one location, each location is resolvable with two replicates ofsblocks, and each block holdsmp-rep entries; the final block size is(l + 1) m / 2(blocks of the two replicates differ by one plot when this is not an integer)."alpha2"The augmented alpha(2)-array construction of Section 2.4, for even
mand an odd number of blocks per replicates. Every block has(l + 1) m / 2plots.
For the algebraic methods, m is set with n_prep_per_block (or chosen as
the largest value whose blocks fit in block_size), the number of blocks
and of duplicated entries follow from the construction, and
replications_per_repeated_entry must be 2. When the number of entries is
not a multiple of the array size, the surplus array positions are dropped
as dummy entries, so some blocks are one plot smaller.
augmented_prep_parameters() lists the feasible parameter sets.
The incomplete block structure is independent from the field geometry. By
default, field_cols lays the ordered plots into rows and columns. For a
rectangular block layout, use rows_per_block and blocks_per_row to place
multiple blocks side by side within each location.
With method = "search", the p-rep plots of every location are spread
evenly over its blocks, and the p-rep entries are placed so that they link
all blocks of the location (the location is connected), so entry effects
can also be estimated from each location on its own. A warning is given
when there are too few p-rep plots to connect the blocks. After the random
greedy search, the best candidates are improved by swapping plots between
blocks to remove pairs of entries that share more than one block.
For all methods, summary reports the maximum pairwise concurrence, the
number of locations whose blocks are not connected, and the average
efficiency factor efficiency_factor of the block design (Section 2.3 of
the paper; higher is better), which can be used to compare designs.
Entry labels, block order within replicates and plot order within blocks
are randomized.
References
Williams, E., Piepho, H.-P. and Whitaker, D. (2011). Augmented p-rep designs. Biometrical Journal 53, 19-27. doi:10.1002/bimj.201000102
Examples
design <- augmented_prep_design(
treatments = paste0("G", seq_len(12)),
locations = c("Loc1", "Loc2", "Loc3"),
block_size = c(Loc1 = 5, Loc2 = 5, Loc3 = 6),
n_blocks_per_location = c(Loc1 = 4, Loc2 = 4, Loc3 = 4),
n_duplicate_per_location = c(Loc1 = 4, Loc2 = 2, Loc3 = 4),
replications_per_repeated_entry = c(Loc1 = 2, Loc2 = 3, Loc3 = 2),
n_candidates = 5,
seed = 123,
field_cols = 8
)
design$summary
#> # A tibble: 1 × 20
#> score max_pairwise_concurr…¹ n_pairs_with_concurr…² total_excess_concurr…³
#> <dbl> <int> <int> <dbl>
#> 1 130002004 2 13 13
#> # ℹ abbreviated names: ¹max_pairwise_concurrence,
#> # ²n_pairs_with_concurrence_gt_1, ³total_excess_concurrence
#> # ℹ 16 more variables: same_entry_same_block <dbl>,
#> # n_disconnected_locations <int>, efficiency_factor <dbl>, resolvable <lgl>,
#> # min_replication <int>, max_replication <int>, mean_replication <dbl>,
#> # n_locations <int>, n_entries <int>, n_plots <int>, n_blocks <int>,
#> # n_candidates_evaluated <int>, method <chr>, m <int>, s <int>, …
head(design$design)
#> # A tibble: 6 × 16
#> plots location row col replicate block block_uid block_size plot_in_block
#> <int> <chr> <dbl> <int> <int> <int> <chr> <int> <int>
#> 1 1 Loc1 1 1 1 1 Loc1_B001 4 1
#> 2 2 Loc1 1 2 1 1 Loc1_B001 4 2
#> 3 3 Loc1 1 3 1 1 Loc1_B001 4 3
#> 4 4 Loc1 1 4 1 1 Loc1_B001 4 4
#> 5 5 Loc1 1 5 1 2 Loc1_B002 4 1
#> 6 6 Loc1 1 6 1 2 Loc1_B002 4 2
#> # ℹ 7 more variables: all_entries <chr>, occurrence <int>, entry_type <chr>,
#> # is_extra_repeat <int>, repeated_at <chr>, rep <int>, is_control <int>
# Example 1 of Williams, Piepho and Whitaker (2011): 20 entries, two
# locations, blocks of 3 built from a partial alpha-array.
alpha <- augmented_prep_design(
treatments = paste0("G", 1:20),
locations = c("L1", "L2"),
method = "alpha",
block_size = 3,
seed = 1
)
alpha$summary[, c("method", "m", "s", "max_pairwise_concurrence", "efficiency_factor")]
#> # A tibble: 1 × 5
#> method m s max_pairwise_concurrence efficiency_factor
#> <chr> <int> <int> <int> <dbl>
#> 1 alpha 2 5 1 0.609