| Type: | Package |
| Title: | Generation and Analysis of Confounded and Fractional Factorial Block Designs |
| Version: | 0.1.0 |
| Maintainer: | Sukanta Dash <sukanta.iasri@gmail.com> |
| Description: | Provides tools to generate and analyze 3-level linear factorial block designs, including complete factorial layouts, fractional factorial layouts, confounded factorial layouts, and design-characteristic summaries. The package includes utilities for recursive ternary construction, defining-contrast identification, alias/confounding summaries, incidence matrix construction, and design optimality diagnostics.The methodological framework follows foundational work on Gupta (1983) <doi:10.1111/j.2517-6161.1983.tb01253.x>. These methods assist in selecting, comparing, and studying factorial and fractional factorial block designs for large experimental situations. |
| License: | GPL-3 |
| Encoding: | UTF-8 |
| Imports: | MASS, Matrix, stats, utils |
| RoxygenNote: | 7.3.3 |
| Suggests: | testthat (≥ 3.0.0) |
| Config/testthat/edition: | 3 |
| NeedsCompilation: | no |
| Packaged: | 2026-04-23 05:19:20 UTC; Sukanta |
| Author: | Vankudoth Kumar [aut], Sukanta Dash [aut, cre], Med Ram Verma [aut] |
| Repository: | CRAN |
| Date/Publication: | 2026-04-24 20:30:06 UTC |
Generation and Analysis of Confounded and Fractional Factorial Block Designs
Description
Internal package-level roxygen directives used to generate the package 'NAMESPACE' automatically with roxygen2.
Author(s)
Maintainer: Sukanta Dash sukanta.iasri@gmail.com
Authors:
Vankudoth Kumar kumarvankudoth51@gmail.com
Med Ram Verma drmrverma@gmail.com
Analyze factorial block-design characteristics
Description
Computes incidence-based, estimability, balance, confounding, discrepancy, and optimality summaries for a factorial block design.
Usage
FactChar(factor_levels, blocks)
Arguments
factor_levels |
Integer vector giving the number of levels for each factor. |
blocks |
List of blocks, where each block is a character vector of treatment labels. |
Details
This function contains several local helper functions for pseudo-inverse calculation, contrast construction, Das-style diagnostics, discrepancy measures, and confounding checks. Those helper functions are scoped locally and are not intended to be documented as separate package-level functions.
Value
An object of class '"lfebd3_analysis"' containing the incidence matrix, C-matrix, design-property flags, confounding summary, discrepancy criteria, optimality diagnostics, and Das-style summaries. Use 'print()' to display the formatted report.
See Also
[build_block_matrix()], [lfbd_analyze()], [lfbd.cf.full()]
Convert a full confounded LFBD data frame into blocks
Description
Extracts block columns from a data frame returned by lfbd.cf.full().
Usage
as_blocks_from_cf_full(design_df)
Arguments
design_df |
Data frame containing a |
Value
A named list of character vectors, one vector per block.
Convert a run-ordered design into equal-sized blocks
Description
Splits the Treatment column of a run-ordered design data frame into
consecutive blocks of a specified size.
Usage
as_blocks_from_runs(design_df, block_size)
Arguments
design_df |
Data frame containing a |
block_size |
Positive integer giving the number of treatments per block. |
Value
A named list of character vectors, one vector per block.
Build a treatment-by-block incidence matrix
Description
Creates the incidence matrix for a block design from a list of treatment labels grouped by block.
Usage
build_block_matrix(blocks)
Arguments
blocks |
Named or unnamed list of blocks, where each block is a vector of treatment labels. |
Value
A binary matrix with treatments in rows and blocks in columns.
See Also
[convert_to_blocks()], [FactChar()]
Build a model matrix for factorial effects
Description
Generates the treatment-effect model matrix for a factorial design using sum-to-zero contrasts.
Usage
build_effect_matrix(trts, factor_levels)
Arguments
trts |
Character vector of treatment labels. Included for interface compatibility with the original script. |
factor_levels |
Integer vector giving the number of levels for each factor. |
Value
A model matrix with one row per treatment combination.
See Also
[FactChar()]
Build recursive triplets for fractional or confounded reduction
Description
Recursively partitions a design matrix into three components and returns three reduced patterns used in the fractional and confounded selection rules.
Usage
build_triplet(mat, type = c("fractional", "confounded"))
Arguments
mat |
Matrix to be partitioned and reduced. |
type |
Character string specifying the reduction rule. Must be one of '"fractional"' or '"confounded"'. |
Details
For 9-row base cases, the selection rule differs by 'type'. Fractional reduction uses consecutive row groups, whereas confounded reduction uses interleaved row groups. Larger matrices are handled recursively.
Value
A list of three matrices, conventionally interpreted as 'P1', 'P2', and 'P3'.
See Also
[reduce_once()], [reduce_repeated()]
Canonicalize a mod-3 effect vector
Description
Standardizes a nonzero effect vector so that its first nonzero coefficient is equal to '1' in mod-3 arithmetic.
Usage
canonical_effect(v)
Arguments
v |
Numeric vector encoding an effect in mod 3 arithmetic. |
Value
A canonicalized numeric vector in mod 3.
See Also
[effect_label()], [find_defining_contrasts()]
Convert a generated design object to a block list
Description
Converts either a treatment-run data frame or a block-wise design data frame into a named list of blocks.
Usage
convert_to_blocks(design_df)
Arguments
design_df |
Data frame returned by a design-generation function. |
Value
A named list where each element is a character vector of treatment labels belonging to one block.
See Also
[build_block_matrix()], [FactChar()]
Generate the defining subgroup from a defining-contrast basis
Description
Forms all mod-3 linear combinations of the supplied defining contrasts.
Usage
defining_subgroup(B)
Arguments
B |
Matrix whose columns are defining contrasts. |
Value
A matrix whose rows enumerate the defining subgroup.
See Also
[find_defining_contrasts()], [low_order_aliases_from_subgroup()]
Compute direct aliases from defining contrasts
Description
Combines an effect with each defining contrast, and optionally with multiples of each contrast, to obtain direct aliases.
Usage
direct_aliases_from_dc(v, dc_basis, include_multiples = FALSE)
Arguments
v |
Target effect vector. |
dc_basis |
Matrix of defining contrasts. |
include_multiples |
Logical; if 'TRUE', also include aliases generated by twice each defining contrast modulo 3. |
Value
A character vector of unique direct aliases.
See Also
[find_defining_contrasts()], [low_order_aliases_from_subgroup()]
List low-order aliases for an effect
Description
Computes low-order aliases of a target effect using a supplied defining subgroup.
Usage
effect_aliases_low_order(v, subgroup, max_order = 2)
Arguments
v |
Target effect vector. |
subgroup |
Matrix whose rows represent subgroup elements. |
max_order |
Maximum order of aliases to retain. |
Value
A sorted character vector of aliased low-order effects.
See Also
[low_order_aliases_from_subgroup()]
Convert an effect vector to a compact label
Description
Converts a mod-3 effect vector to the string representation used throughout the aliasing and confounding summaries.
Usage
effect_label(v)
Arguments
v |
Numeric vector encoding an effect in mod 3 arithmetic. |
Value
A character string such as '"I"', '"F11"', or '"F11F22"'.
See Also
[effect_order()], [canonical_effect()]
Compute the order of an effect vector
Description
Counts the number of nonzero coefficients in a mod-3 effect vector.
Usage
effect_order(v)
Arguments
v |
Numeric vector encoding an effect in mod 3 arithmetic. |
Value
Integer giving the number of active factors in the effect.
See Also
[effect_label()], [canonical_effect()]
Find defining contrasts for a fractional design
Description
Searches the effect space for mod-3 contrasts satisfied by a design matrix and extracts an independent basis of defining contrasts.
Usage
find_defining_contrasts(design_mat, expected_c = NULL)
Arguments
design_mat |
Design matrix whose rows correspond to treatment combinations and whose columns correspond to factors. |
expected_c |
Optional integer giving the expected number of defining contrasts to retain. |
Value
A list with components:
- basis
A matrix whose columns form an independent basis of defining contrasts.
- labels
Character vector of labels for the defining contrasts.
See Also
[defining_subgroup()], [fractional_confounding_summary()], [lfbd.fr()]
Summarize aliasing and confounding in a fractional LFBD
Description
Produces a low-order summary for main effects and two-factor interactions under the defining subgroup of a fractional 3-level factorial design.
Usage
fractional_confounding_summary(n, dc_basis)
Arguments
n |
Integer. Number of factors. |
dc_basis |
Matrix whose columns form the basis of defining contrasts. |
Value
A data frame describing each listed effect, its order, low-order aliases, and simple estimability/confounding indicators.
See Also
[find_defining_contrasts()], [lfbd.fr()]
Generate the full ternary construction matrix
Description
Builds the full recursive ternary matrix used as the foundation for generating complete, fractional, and confounded 3-level factorial layouts in this script.
Usage
generate_Tn_full(n)
Arguments
n |
Integer. Number of recursion levels (or factors). |
Details
The construction starts from a single-column seed and applies the 3-by-3 recursive expansion rule 'n' times. The returned matrix is transposed so that downstream functions can extract the square design submatrix directly.
Value
A matrix with entries in 0, 1, and 2
representing the full ternary construction after n
recursive expansions.
References
Elsawah, A.M. Multiple doubling: a simple effective construction technique for optimal two-level experimental designs. Statistical Papers 62, 2923–2967 (2021). DOI: 10.1007/s00362-020-01221-0
Gupta, S. C. (1983). Some new methods for constructing block designs having orthogonal factorial structure. Journal of the Royal Statistical Society, Series B (Methodological), 45, 297-307.
See Also
[get_Tn_square()], [lfbd()], [lfbd.fr()], [lfbd.cf()]
Examples
generate_Tn_full(1)
dim(generate_Tn_full(2))
get_Tn_square(1)
dim(get_Tn_square(2))
d <- lfbd(2)
d
nrow(d)
d <- lfbd.fr(2, 1)
d
attr(d, "defining_contrasts")
lfbd.cf(2, 1)
dim(lfbd.cf(3, 2))
d <- lfbd.cf.full(2, 1)
d
colnames(d)
d <- lfbd(2)
blk <- convert_to_blocks(d)
blk
d <- lfbd.cf.full(2, 1)
convert_to_blocks(d)
d <- lfbd.cf.full(2, 1)
blk <- convert_to_blocks(d)
build_block_matrix(blk)
X <- build_effect_matrix(NULL, c(3, 3))
dim(X)
head(X)
d <- lfbd.cf.full(2, 1)
blk <- convert_to_blocks(d)
res <- FactChar(c(3, 3), blk)
print(res)
res <- lfbd_analyze(
type = "lfbd.cf.full",
factor_levels = c(3, 3),
n = 2,
r = 1,
show_design = FALSE,
run_analysis = FALSE
)
names(res)
Generate a catalog of effects up to a chosen order
Description
Enumerates main effects and, optionally, two-factor interactions for a symmetric factorial design coded in mod 3.
Usage
generate_effect_catalog(n, max_order = 2)
Arguments
n |
Integer. Number of factors. |
max_order |
Maximum interaction order to include. Currently used for main effects and two-factor interactions. |
Value
A list with components 'mat', 'labels', and 'orders'.
See Also
[fractional_confounding_summary()]
Extract the square design matrix for a 3-level factorial construction
Description
Computes the square submatrix used as the base design matrix for the LFBD generators.
Usage
get_Tn_square(n)
Arguments
n |
Integer. Number of factors. |
Value
A '3^n x n?' style square matrix derived from the full ternary construction, with the first '3^n' rows retained after transposition.
See Also
[generate_Tn_full()], [lfbd()], [lfbd.fr()], [lfbd.cf()]
Test linear independence modulo 3
Description
Checks whether adding a vector to an existing basis increases its mod-3 rank.
Usage
is_independent_mod3(B, v)
Arguments
B |
Matrix whose columns form the current basis. |
v |
Vector to test for independence. |
Value
Logical value; 'TRUE' if 'v' is independent of the columns of 'B' over mod 3, otherwise 'FALSE'.
See Also
[rank_mod3()], [find_defining_contrasts()]
Generate a complete factorial LFBD
Description
Creates the complete 3-level factorial layout from the ternary design construction and returns treatment labels in run order.
Usage
lfbd(n)
Arguments
n |
Integer. Number of factors. |
Value
A data frame with columns:
- Run
Run labels such as '"run1"', '"run2"', ...
- Treatment
Treatment combination labels formed by concatenating factor levels coded as '0', '1', and '2'.
See Also
[lfbd.fr()], [lfbd.cf.full()], [lfbd_analyze()]
Generate the principal block for a confounded LFBD
Description
Extracts the principal block of size '3^r' from a complete 3-level factorial design using the recursive confounded selection rule.
Usage
lfbd.cf(n, r)
Arguments
n |
Integer. Number of factors. |
r |
Integer. Exponent determining the principal block size, so the principal block contains '3^r' treatment combinations. |
Value
A matrix representing the principal block.
See Also
[lfbd.cf.full()], [reduce_repeated()]
Generate the full confounded factorial design
Description
Builds the complete set of blocks induced by the principal block of a confounded 3-level factorial design.
Usage
lfbd.cf.full(n, r, max_blocks_display = 12)
Arguments
n |
Integer. Number of factors. |
r |
Integer. Exponent determining the principal block size. |
max_blocks_display |
Integer. Reserved display helper parameter from the original script. |
Value
An invisible data frame whose first column identifies units and whose remaining columns correspond to blocks ('blk1', 'blk2', ...).
See Also
[lfbd.cf()], [convert_to_blocks()], [FactChar()]
Generate a fractional 3-level LFBD
Description
Constructs a fractional layout from the complete ternary design by repeated fractional reduction and returns the design together with defining contrasts and a low-order confounding summary.
Usage
lfbd.fr(n, c)
Arguments
n |
Integer. Number of factors. |
c |
Integer. Degree of fractionation, so the final number of runs is '3^(n - c)'. |
Value
An object of class '"lfbd_fr"' containing:
- design
A data frame with run labels and treatment labels.
- design_matrix
The reduced numeric design matrix.
- defining_contrasts
Character vector of defining contrast labels.
- confounding_summary
Data frame of main-effect and 2FI summaries.
See Also
[lfbd()], [lfbd.cf()], [lfbd_analyze()]
Examples
d <- lfbd.fr(2, 1)
d$design
d$defining_contrasts
Generate and analyze an LFBD in one call
Description
Wrapper that generates a complete, fractional, or confounded LFBD and then, optionally, analyzes its design characteristics.
Usage
lfbd_analyze(
type = c("lfbd", "lfbd.fr", "lfbd.cf.full"),
factor_levels,
n,
c = NULL,
r = NULL,
block_size = NULL,
show_design = TRUE,
run_analysis = TRUE
)
Arguments
type |
Character string specifying the generator to use. Must be one of '"lfbd"', '"lfbd.fr"', or '"lfbd.cf.full"'. |
factor_levels |
Integer vector giving the number of levels for each factor. |
n |
Integer. Number of factors used by the generator. |
c |
Optional integer degree of fractionation for 'type = "lfbd.fr"'. |
r |
Optional integer controlling principal block size for 'type = "lfbd.cf.full"'. |
block_size |
Optional block size used when converting run-ordered designs into blocks. |
show_design |
Logical; if 'TRUE', print the generated design. |
run_analysis |
Logical; if 'TRUE', call [FactChar()] on the derived blocks. |
Details
This wrapper uses internal helper functions to convert generated designs into block lists and to print the generated design before analysis.
Value
Invisibly returns a list with the selected design type, generated design object, derived block list, and analysis output.
See Also
[lfbd()], [lfbd.fr()], [lfbd.cf.full()], [FactChar()]
Compute low-order aliases from a defining subgroup
Description
Adds a target effect to each subgroup element and retains aliases whose order does not exceed 'max_order'.
Usage
low_order_aliases_from_subgroup(v, subgroup, max_order = 2)
Arguments
v |
Target effect vector. |
subgroup |
Matrix whose rows represent subgroup elements. |
max_order |
Maximum order of aliases to retain. |
Value
A sorted character vector of unique low-order aliases.
See Also
[defining_subgroup()], [fractional_confounding_summary()]
Print an lfebd3 analysis object
Description
Displays the formatted report for an object returned by [FactChar()].
Usage
## S3 method for class 'lfebd3_analysis'
print(x, ...)
Arguments
x |
An object of class '"lfebd3_analysis"'. |
... |
Further arguments passed to or from other methods. |
Value
Invisibly returns 'x'.
Print a generated design
Description
Convenience printer used by lfbd_analyze() to display the generated
design object.
Usage
print_generated_design(design_df)
Arguments
design_df |
A generated design data frame. |
Value
Invisibly returns design_df.
Compute matrix rank over the field of integers mod 3
Description
Performs Gaussian elimination modulo 3 to determine the rank of a matrix.
Usage
rank_mod3(M)
Arguments
M |
Matrix-like object. |
Value
Integer rank of 'M' computed under mod-3 arithmetic.
See Also
[is_independent_mod3()]
Reduce a design matrix by one factor of three
Description
Applies a single fractional or confounded reduction step to a design matrix by selecting the first recursive pattern returned by [build_triplet()].
Usage
reduce_once(mat, type = c("fractional", "confounded"))
Arguments
mat |
Matrix to reduce. |
type |
Character string specifying '"fractional"' or '"confounded"'. |
Value
A reduced matrix with one-third as many rows as 'mat' when reduction is possible.
See Also
[build_triplet()], [reduce_repeated()]
Repeatedly reduce a design matrix
Description
Applies [reduce_once()] iteratively to obtain a smaller fractional or confounded design.
Usage
reduce_repeated(mat, times, type = c("fractional", "confounded"))
Arguments
mat |
Matrix to reduce. |
times |
Non-negative integer giving the number of repeated reduction steps. |
type |
Character string specifying '"fractional"' or '"confounded"'. |
Value
A matrix obtained after 'times' successive reductions.
See Also
[reduce_once()], [lfbd.fr()], [lfbd.cf()]