| Title: | Construction and a-Efficiency of Nested Partially Balanced Bipartite Block Designs |
|---|---|
| Description: | Construction and evaluation of nested partially balanced bipartite block (NPBBB) designs for comparing a set of test treatments with a set of control treatments under a nested (blocks within blocks) structure. Six systematic construction methods are provided: composing partially balanced bipartite block designs with nested balanced incomplete block designs; augmenting nested partially balanced incomplete block designs with controls; merging rows of group-divisible nested designs; direct construction from group-divisible schemes; and expansion of partially balanced incomplete block designs (Vinayaka et al. 2026: In press). The A-efficiencies of the block and sub-block classifications are computed against the A-optimal completely symmetric reference design, following the test-versus-control optimality framework of Gupta and Parsad (1996) <doi:10.1080/03610929608831743> and Vinayaka et al. (2024) <doi:10.1080/03610926.2023.2251623>. These designs are particularly suited to agricultural, animal husbandry, industrial, and clinical trials involving multiple standard checks under nested experimental conditions, such as multi-environment trials where field heterogeneity (blocks) and within-field variation (sub-blocks) must be controlled simultaneously. |
| Authors: | Vinayaka [aut, cre] (ORCID: <https://orcid.org/0000-0001-5004-0084>), Rajender Parsad [aut, ctb], B.N. Mandal [aut, ctb], L.N. Vinaykumar [aut, ctb], Gopalareddy Krishnappa [aut, ctb] (ORCID: <https://orcid.org/0000-0002-8825-6363>) |
| Maintainer: | Vinayaka <[email protected]> |
| License: | GPL-3 |
| Version: | 1.0.0 |
| Built: | 2026-07-05 10:18:52 UTC |
| Source: | https://github.com/cran/NPBBBdesigns |
Returns the trace of the variance-covariance matrix of the
estimators of the elementary test-versus-control contrasts
( a test treatment, a control treatment),
that is, the sum of their variances. When the information matrix is completely
symmetric within the test set and within the control set (which holds for the
A-optimal members of the catalogue) the value is computed in closed form from
the canonical quantities (the average diagonal and
off-diagonal entries of the test-test and control-control sub-matrices of
). This reproduces the values reported in the design catalogues of
Vinayaka et al. (2026); see also Hedayat and Majumdar (1984) and Stufken
(1988).
a_value(design, v1, v2)a_value(design, v1, v2)
design |
A matrix (or data frame) whose rows are the blocks or sub-blocks
and whose entries are the treatment labels. Test treatments must be labelled
|
v1 |
Number of test treatments. |
v2 |
Number of control treatments. |
A single numeric value, the A-value (sum of variances of the
test-versus-control elementary contrasts).
Hedayat AS, Majumdar D (1984) A-optimal incomplete block designs for test treatment-control comparisons. Technometrics, 26, 363–370.
Stufken J (1988) On bounds for the efficiency of block designs for comparing test treatments with a control. Journal of Statistical Planning and Inference, 19, 361–372.
Vinayaka, Parsad R, Mandal BN, LN Vinaykumar (2026) Nested partially balanced bipartite block designs for comparing test treatments with multiple controls. Journal of Statistical Theory and Practice. (In press).
d <- rbind(c(1, 2, 5, 6), c(3, 4, 5, 6)) a_value(d, v1 = 4, v2 = 2)d <- rbind(c(1, 2, 5, 6), c(3, 4, 5, 6)) a_value(d, v1 = 4, v2 = 2)
Computes the smallest attainable A-value (sum of variances of the
test-versus-control elementary contrasts) within the class of
connected (sub-)block designs that are completely symmetric in the test and in
the control treatments, for a control replication . This is the
benchmark against which the A-efficiency is measured. The expression is the
nested-design analogue of the Hedayat-Majumdar / Stufken optimal A-value; see
Vinayaka et al. (2026).
a_value_optimal(v1, v2, b, k, r0)a_value_optimal(v1, v2, b, k, r0)
v1 |
Number of test treatments. |
v2 |
Number of control treatments. |
b |
Number of blocks (or sub-blocks) in the classification. |
k |
Block (or sub-block) size. |
r0 |
Replication of each control treatment in the classification. |
A single numeric value, the optimal (minimum) A-value.
Hedayat AS, Majumdar D (1984) A-optimal incomplete block designs for test treatment-control comparisons. Technometrics, 26, 363–370.
Stufken J (1988) On bounds for the efficiency of block designs for comparing test treatments with a control. Journal of Statistical Planning and Inference, 19, 361–372.
Vinayaka, Parsad R, Mandal BN, LN Vinaykumar (2026) Nested partially balanced bipartite block designs for comparing test treatments with multiple controls. Journal of Statistical Theory and Practice. (In press).
# Optimal block-classification A-value for an NPBBB with v1 = 9, v2 = 2 a_value_optimal(v1 = 9, v2 = 2, b = 6, k = 10, r0 = 12)# Optimal block-classification A-value for an NPBBB with v1 = 9, v2 = 2 a_value_optimal(v1 = 9, v2 = 2, b = 6, k = 10, r0 = 12)
Implements Method 1 of Vinayaka et al. (2026). Each block of a
partially balanced bipartite block (PBBB) design of size is
replaced by a copy of a nested balanced incomplete block (NBIB) design on
symbols, by identifying the symbols of
the NBIB design with the entries of the PBBB block.
construct_method1(pbbb_blocks, nbib_subblocks, q, v2 = 2)construct_method1(pbbb_blocks, nbib_subblocks, q, v2 = 2)
pbbb_blocks |
A list of integer vectors of common length |
nbib_subblocks |
A list of integer vectors over the symbols
|
q |
Number of sub-blocks per block of the NBIB design. |
v2 |
Number of control treatments in the PBBB design (default 2). |
An object of class "npbbb": a list with the following components:
method: a character string naming the construction used.
v1, v2: numbers of test and control treatments.
parameters: a list of the design parameters
v1, v2, b1, b2, r1, r2, k1, k2, q.
block_design: an integer matrix with b1 rows and
k1 columns; each row is a block written as its concatenated
sub-blocks.
subblock_design: an integer matrix with b2 rows and
k2 columns; each row is a sub-block.
E1, E2: block and sub-block A-efficiencies.
efficiency: an object of class "npbbb_efficiency"
holding the underlying A-values and optimal references.
Vinayaka, Parsad R, Mandal BN, LN Vinaykumar (2026) Nested partially balanced bipartite block designs for comparing test treatments with multiple controls. Journal of Statistical Theory and Practice. (In press).
# PBBB design: 4 test treatments (1-4), 2 controls (5, 6); block size k' = 4 pbbb <- list(c(1,2,5,6), c(1,3,5,6), c(1,4,5,6), c(2,3,5,6), c(2,4,5,6), c(3,4,5,6)) # NBIB on k' = 4 symbols from a one-factorisation of K4 (q = 2 sub-blocks/block) nbib <- list(c(1,2), c(3,4), c(1,3), c(2,4), c(1,4), c(2,3)) d <- construct_method1(pbbb, nbib, q = 2, v2 = 2) d# PBBB design: 4 test treatments (1-4), 2 controls (5, 6); block size k' = 4 pbbb <- list(c(1,2,5,6), c(1,3,5,6), c(1,4,5,6), c(2,3,5,6), c(2,4,5,6), c(3,4,5,6)) # NBIB on k' = 4 symbols from a one-factorisation of K4 (q = 2 sub-blocks/block) nbib <- list(c(1,2), c(3,4), c(1,3), c(2,4), c(1,4), c(2,3)) d <- construct_method1(pbbb, nbib, q = 2, v2 = 2) d
Implements Method 2 of Vinayaka et al. (2026). Starting from a
nested partially balanced incomplete block (NPBIB) design with q
sub-blocks per block, v2 control treatments are added to every
sub-block. Because the controls appear in every sub-block, every test
treatment meets every control the same number of times and every pair of
controls co-occurs the same number of times; the resulting design is
completely symmetric in the controls and, whenever the parent NPBIB design is
itself well balanced, A-optimal for both classifications.
construct_method2(npbib_subblocks, q, v2 = 2)construct_method2(npbib_subblocks, q, v2 = 2)
npbib_subblocks |
A list of integer vectors, one per sub-block of the
parent NPBIB design, giving its test treatments labelled |
q |
Number of sub-blocks per block of the parent NPBIB design. |
v2 |
Number of control treatments to add (default 2). |
An object of class "npbbb": a list with the following components:
method: a character string naming the construction used.
v1, v2: numbers of test and control treatments.
parameters: a list of the design parameters
v1, v2, b1, b2, r1, r2, k1, k2, q.
block_design: an integer matrix with b1 rows and
k1 columns; each row is a block written as its concatenated
sub-blocks.
subblock_design: an integer matrix with b2 rows and
k2 columns; each row is a sub-block.
E1, E2: block and sub-block A-efficiencies.
efficiency: an object of class "npbbb_efficiency"
holding the underlying A-values and optimal references.
Vinayaka, Parsad R, Mandal BN, LN Vinaykumar (2026) Nested partially balanced bipartite block designs for comparing test treatments with multiple controls. Journal of Statistical Theory and Practice. (In press).
# L2-type NPBIB on v = 9 (Example 3.2 of Vinayaka et al. (2026)) sub <- list(c(1,2,3), c(4,5,6), c(1,2,3), c(7,8,9), c(4,5,6), c(7,8,9), c(1,4,7), c(2,5,8), c(1,4,7), c(3,6,9), c(2,5,8), c(3,6,9)) d <- construct_method2(sub, q = 2, v2 = 2) d# L2-type NPBIB on v = 9 (Example 3.2 of Vinayaka et al. (2026)) sub <- list(c(1,2,3), c(4,5,6), c(1,2,3), c(7,8,9), c(4,5,6), c(7,8,9), c(1,4,7), c(2,5,8), c(1,4,7), c(3,6,9), c(2,5,8), c(3,6,9)) d <- construct_method2(sub, q = 2, v2 = 2) d
Implements Method 3 of Vinayaka et al. (2026). In a group-divisible
NPBIB design on treatments arranged in an array,
the treatments of v2 selected rows are each merged into a single
control treatment. The test treatments are the remaining
array entries, relabelled 1, ..., v1; the merged rows become controls
v1 + 1, ..., v1 + v2. A control may occur more than once in a sub-block
(see Note 3.1 of the paper); such multiplicities are retained.
construct_method3( gd_npbib_subblocks, m, n, q, merge_rows = seq_len(v2), v2 = 2 )construct_method3( gd_npbib_subblocks, m, n, q, merge_rows = seq_len(v2), v2 = 2 )
gd_npbib_subblocks |
A list of integer vectors, one per sub-block of the
parent group-divisible NPBIB design, with treatments labelled
|
m |
Number of rows of the group-divisible scheme. |
n |
Number of treatments per row. |
q |
Number of sub-blocks per block. |
merge_rows |
Integer vector of length |
v2 |
Number of control treatments (default 2). |
An object of class "npbbb": a list with the following components:
method: a character string naming the construction used.
v1, v2: numbers of test and control treatments.
parameters: a list of the design parameters
v1, v2, b1, b2, r1, r2, k1, k2, q.
block_design: an integer matrix with b1 rows and
k1 columns; each row is a block written as its concatenated
sub-blocks.
subblock_design: an integer matrix with b2 rows and
k2 columns; each row is a sub-block.
E1, E2: block and sub-block A-efficiencies.
efficiency: an object of class "npbbb_efficiency"
holding the underlying A-values and optimal references.
Vinayaka, Parsad R, Mandal BN, LN Vinaykumar (2026) Nested partially balanced bipartite block designs for comparing test treatments with multiple controls. Journal of Statistical Theory and Practice. (In press).
# Group-divisible NPBIB on v = m*n = 8 treatments (m = 4 rows, n = 2), # with q = 2 sub-blocks per block; merge the first two rows into v2 = 2 controls gd <- list(c(1,3), c(2,4), c(5,7), c(6,8), c(1,5), c(2,6), c(3,7), c(4,8), c(1,7), c(2,8), c(3,5), c(4,6)) d <- construct_method3(gd, m = 4, n = 2, q = 2, merge_rows = c(1, 2), v2 = 2) d# Group-divisible NPBIB on v = m*n = 8 treatments (m = 4 rows, n = 2), # with q = 2 sub-blocks per block; merge the first two rows into v2 = 2 controls gd <- list(c(1,3), c(2,4), c(5,7), c(6,8), c(1,5), c(2,6), c(3,7), c(4,8), c(1,7), c(2,8), c(3,5), c(4,6)) d <- construct_method3(gd, m = 4, n = 2, q = 2, merge_rows = c(1, 2), v2 = 2) d
Implements Method 4 of Vinayaka et al. (2026). The
test treatments are arranged in an array. For
each row, n sub-blocks are formed, each consisting of one treatment
from that row together with all v2 controls; the n sub-blocks of
a row constitute a block. The construction yields an A-optimal design for both
classifications.
construct_method4(m, n, v2 = 2)construct_method4(m, n, v2 = 2)
m |
Number of rows (groups) of the group-divisible scheme. |
n |
Number of treatments per row. |
v2 |
Number of control treatments (default 2). |
An object of class "npbbb": a list with the following components:
method: a character string naming the construction used.
v1, v2: numbers of test and control treatments.
parameters: a list of the design parameters
v1, v2, b1, b2, r1, r2, k1, k2, q.
block_design: an integer matrix with b1 rows and
k1 columns; each row is a block written as its concatenated
sub-blocks.
subblock_design: an integer matrix with b2 rows and
k2 columns; each row is a sub-block.
E1, E2: block and sub-block A-efficiencies.
efficiency: an object of class "npbbb_efficiency"
holding the underlying A-values and optimal references.
Vinayaka, Parsad R, Mandal BN, LN Vinaykumar (2026) Nested partially balanced bipartite block designs for comparing test treatments with multiple controls. Journal of Statistical Theory and Practice. (In press).
d <- construct_method4(m = 4, n = 3, v2 = 2) dd <- construct_method4(m = 4, n = 3, v2 = 2) d
Implements Method 5 of Vinayaka et al. (2026) (specific to
v2 = 2). Each block of a PBIB design with
block size 4 is expanded, with the two controls , into four
blocks of size 6 (each consisting of two sub-blocks of size 3): the
-th block places with both controls in one sub-block and the
remaining three treatments in the other.
construct_method5(pbib_blocks)construct_method5(pbib_blocks)
pbib_blocks |
A list of integer vectors of length 4, the blocks of a PBIB
design with test treatments labelled |
An object of class "npbbb" with v2 = 2: a list with the
following components:
method: a character string naming the construction used.
v1, v2: numbers of test and control treatments.
parameters: a list of the design parameters
v1, v2, b1, b2, r1, r2, k1, k2, q.
block_design: an integer matrix with b1 rows and
k1 columns; each row is a block written as its concatenated
sub-blocks.
subblock_design: an integer matrix with b2 rows and
k2 columns; each row is a sub-block.
E1, E2: block and sub-block A-efficiencies.
efficiency: an object of class "npbbb_efficiency"
holding the underlying A-values and optimal references.
Vinayaka, Parsad R, Mandal BN, LN Vinaykumar (2026) Nested partially balanced bipartite block designs for comparing test treatments with multiple controls. Journal of Statistical Theory and Practice. (In press).
# Singular GD design S1: v = 6, b = 3, k = 4 s1 <- list(c(1,2,3,4), c(1,2,5,6), c(3,4,5,6)) d <- construct_method5(s1) d# Singular GD design S1: v = 6, b = 3, k = 4 s1 <- list(c(1,2,3,4), c(1,2,5,6), c(3,4,5,6)) d <- construct_method5(s1) d
Implements Method 6 of Vinayaka et al. (2026) (specific to
v2 = 2). Each block of a PBIB design with block size 2
is expanded, with the two controls , into three blocks of size 4
(two sub-blocks of size 2): ,
and .
construct_method6(pbib_blocks)construct_method6(pbib_blocks)
pbib_blocks |
A list of integer vectors of length 2, the blocks of a PBIB
design with test treatments labelled |
An object of class "npbbb" with v2 = 2: a list with the
following components:
method: a character string naming the construction used.
v1, v2: numbers of test and control treatments.
parameters: a list of the design parameters
v1, v2, b1, b2, r1, r2, k1, k2, q.
block_design: an integer matrix with b1 rows and
k1 columns; each row is a block written as its concatenated
sub-blocks.
subblock_design: an integer matrix with b2 rows and
k2 columns; each row is a sub-block.
E1, E2: block and sub-block A-efficiencies.
efficiency: an object of class "npbbb_efficiency"
holding the underlying A-values and optimal references.
Vinayaka, Parsad R, Mandal BN, LN Vinaykumar (2026) Nested partially balanced bipartite block designs for comparing test treatments with multiple controls. Journal of Statistical Theory and Practice. (In press).
# Semi-regular GD design SR1: v = 4, b = 4, k = 2 sr1 <- list(c(1,3), c(1,4), c(2,3), c(2,4)) d <- construct_method6(sr1) d# Semi-regular GD design SR1: v = 4, b = 4, k = 2 sr1 <- list(c(1,3), c(1,4), c(2,3), c(2,4)) d <- construct_method6(sr1) d
Computes the reduced (treatment) information matrix
for a single classification (blocks or
sub-blocks) of a nested partially balanced bipartite block (NPBBB) design.
Here is the diagonal matrix of treatment replications, is the
treatment-by-(sub-)block incidence matrix and is the diagonal matrix
of (sub-)block sizes. Control treatments may occur more than once in a
(sub-)block (for example, designs obtained by merging rows of a
group-divisible scheme); such multiplicities are counted in so that
is the correct information matrix under the homoscedastic
fixed-effects nested model. For more details see Vinayaka et al. (2026).
info_matrix(design, v1, v2)info_matrix(design, v1, v2)
design |
A matrix (or data frame) whose rows are the blocks or sub-blocks
and whose entries are the treatment labels. Test treatments must be labelled
|
v1 |
Number of test treatments. |
v2 |
Number of control treatments. |
A numeric (v1 + v2) by (v1 + v2) information matrix
.
Vinayaka, Parsad R, Mandal BN, LN Vinaykumar (2026) Nested partially balanced bipartite block designs for comparing test treatments with multiple controls. Journal of Statistical Theory and Practice. (In press).
# Two blocks of size 4 on 4 test treatments (1-4) and 2 controls (5, 6) d <- rbind(c(1, 2, 5, 6), c(3, 4, 5, 6)) info_matrix(d, v1 = 4, v2 = 2)# Two blocks of size 4 on 4 test treatments (1-4) and 2 controls (5, 6) d <- rbind(c(1, 2, 5, 6), c(3, 4, 5, 6)) info_matrix(d, v1 = 4, v2 = 2)
Returns the total number of experimental units of a nested
partially balanced bipartite block design, .
n_units(x)n_units(x)
x |
An object of class |
A single numeric value, the total number of experimental units
.
d <- construct_method4(m = 3, n = 2, v2 = 2) n_units(d)d <- construct_method4(m = 3, n = 2, v2 = 2) n_units(d)
Evaluates the A-efficiency of a nested partially balanced bipartite block design separately for its block and sub-block classifications. For each classification the A-efficiency is
the ratio of the A-value of the A-optimal completely symmetric reference
design to the A-value of the design under study. A value of 1 means the
design is A-optimal for that classification. For more details see Vinayaka et
al. (2026).
npbbb_efficiency(block_design, subblock_design, v1, v2)npbbb_efficiency(block_design, subblock_design, v1, v2)
block_design |
A matrix whose rows are the blocks (each block being the
concatenation of its sub-blocks) and whose entries are treatment labels
|
subblock_design |
A matrix whose rows are the sub-blocks, with the same labelling convention. |
v1 |
Number of test treatments. |
v2 |
Number of control treatments. |
An object of class "npbbb_efficiency": a list with the following
components:
E1: block-classification A-efficiency.
E2: sub-block-classification A-efficiency.
A1, A2: A-values of the design under study (block and sub-block classifications, respectively).
A1_opt, A2_opt: A-values of the corresponding A-optimal completely symmetric reference designs.
v1, v2: numbers of test and control treatments.
Hedayat AS, Majumdar D (1984) A-optimal incomplete block designs for test treatment-control comparisons. Technometrics, 26, 363–370.
Stufken J (1988) On bounds for the efficiency of block designs for comparing test treatments with a control. Journal of Statistical Planning and Inference, 19, 361–372.
Vinayaka, Parsad R, Mandal BN, LN Vinaykumar (2026) Nested partially balanced bipartite block designs for comparing test treatments with multiple controls. Journal of Statistical Theory and Practice. (In press).
d <- construct_method4(m = 3, n = 2, v2 = 2) npbbb_efficiency(d$block_design, d$subblock_design, v1 = d$v1, v2 = d$v2)d <- construct_method4(m = 3, n = 2, v2 = 2) npbbb_efficiency(d$block_design, d$subblock_design, v1 = d$v1, v2 = d$v2)
Prints a nested partially balanced bipartite block design: its
construction method, design parameters, block and sub-block A-efficiencies
and, optionally, the full block layout with controls displayed as
0_1, 0_2, ....
## S3 method for class 'npbbb' print(x, digits = 4, show_layout = TRUE, ...)## S3 method for class 'npbbb' print(x, digits = 4, show_layout = TRUE, ...)
x |
An object of class |
digits |
Number of significant digits used when printing the A-efficiencies. |
show_layout |
Logical; if |
... |
Further arguments passed to or from other methods. |
The object x, invisibly.
d <- construct_method4(m = 3, n = 2, v2 = 2) print(d) print(d, show_layout = FALSE)d <- construct_method4(m = 3, n = 2, v2 = 2) print(d) print(d, show_layout = FALSE)
Prints the block and sub-block A-efficiencies of a nested partially
balanced bipartite block design held in an object of class
"npbbb_efficiency".
## S3 method for class 'npbbb_efficiency' print(x, digits = 4, ...)## S3 method for class 'npbbb_efficiency' print(x, digits = 4, ...)
x |
An object of class |
digits |
Number of significant digits used when printing the A-values and A-efficiencies. |
... |
Further arguments passed to or from other methods. |
The object x, invisibly.
d <- construct_method4(m = 3, n = 2, v2 = 2) print(d$efficiency)d <- construct_method4(m = 3, n = 2, v2 = 2) print(d$efficiency)