| Title: | Generation and Analysis of 3-Level, 4-Level and 5-Level Factorial Block Designs |
|---|---|
| Description: | Provides tools to generate and analyze 3-level, 4-level and 5-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 construction, defining-contrast identification, alias and confounding summaries, incidence matrix construction, and selected design-characteristic diagnostics. The methodological framework follows foundational work on factorial block designs, including Gupta (1983) <doi:10.1111/j.2517-6161.1983.tb01253.x>. |
| Authors: | Vankudoth Kumar [aut], Sukanta Dash [aut, cre], Med Ram Verma [aut] |
| Maintainer: | Sukanta Dash <[email protected]> |
| License: | GPL-3 |
| Version: | 0.3.0 |
| Built: | 2026-07-21 14:49:14 UTC |
| Source: | https://github.com/cran/lfebd3 |
Provides generators and analysis tools for complete, fractional, and confounded factorial block designs at three, four, and five levels, together with defining-relation, aliasing, incidence-matrix, and design-characteristic summaries.
Maintainer: Sukanta Dash [email protected]
Authors:
Vankudoth Kumar
Sukanta Dash
Med Ram Verma
Creates the incidence matrix for a block design from a list of treatment labels grouped by block.
build_block_matrix(blocks)build_block_matrix(blocks)
blocks |
Named or unnamed list of blocks, where each block is a vector of treatment labels. |
A binary matrix with treatments in rows and blocks in columns.
convert_to_blocks(), FactChar()
N <- build_block_matrix(list(B1 = c("00", "11"), B2 = c("01", "10"))) stopifnot(ncol(N) == 2)N <- build_block_matrix(list(B1 = c("00", "11"), B2 = c("01", "10"))) stopifnot(ncol(N) == 2)
Generates the treatment-effect model matrix for a factorial design using sum-to-zero contrasts.
build_effect_matrix(trts, factor_levels)build_effect_matrix(trts, factor_levels)
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. |
A model matrix with one row per treatment combination.
X <- build_effect_matrix(NULL, c(3, 3)) stopifnot(nrow(X) == 9)X <- build_effect_matrix(NULL, c(3, 3)) stopifnot(nrow(X) == 9)
Converts either a treatment-run data frame or a block-wise design data frame into a named list of blocks.
convert_to_blocks(design_df)convert_to_blocks(design_df)
design_df |
Data frame returned by a design-generation function. |
A named list where each element is a character vector of treatment labels belonging to one block.
build_block_matrix(), FactChar()
blocks <- convert_to_blocks(lfebd3(2)) stopifnot(length(blocks) == 1)blocks <- convert_to_blocks(lfebd3(2)) stopifnot(length(blocks) == 1)
Computes incidence-based, estimability, balance, confounding, discrepancy, and optimality summaries for a factorial block design.
FactChar(factor_levels, blocks)FactChar(factor_levels, blocks)
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. |
This function contains several local helper functions for pseudo-inverse
calculation, contrast construction, Das-style diagnostics, discrepancy
measures, and confounding checks. For a symmetric s-level design, an
effect with coefficient vector a is marked as confounded only when
sum(a[j] * x[j]) is congruent to zero modulo s for every treatment
combination x in the principal block. A constant nonzero residue is not
marked as confounded. The helper functions are scoped locally and are not
intended to be documented as separate package-level functions.
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.
build_block_matrix(), lfebd3_analyze(), lfebd3.cf.full()
d <- lfebd3.cf.full(2, 1) res <- FactChar(c(3, 3), convert_to_blocks(d)) stopifnot(inherits(res, "lfebd3_analysis"))d <- lfebd3.cf.full(2, 1) res <- FactChar(c(3, 3), convert_to_blocks(d)) stopifnot(inherits(res, "lfebd3_analysis"))
Computes a lightweight subset of the diagnostics returned by FactChar().
This function is intended for large designs, especially 5-level designs with
n > 3, where the exact all-effects diagnostics require large generalized
inverses and pairwise distance matrices. It preserves the same printed-object
class as FactChar() so the result can still be displayed with
print.lfebd3_analysis().
FactChar_fast(factor_levels, blocks)FactChar_fast(factor_levels, blocks)
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. |
An object of class "lfebd3_analysis" containing fast design
properties and block-confounding summaries. Expensive exact diagnostics are
set to NA or skipped and reported as such by print().
d <- as.data.frame(lfebd5.fr(3, c = 1)) blk <- list(B1 = apply(d, 1, paste0, collapse = "")) res <- FactChar_fast(rep(5, 3), blk) stopifnot(inherits(res, "lfebd3_analysis"))d <- as.data.frame(lfebd5.fr(3, c = 1)) blk <- list(B1 = apply(d, 1, paste0, collapse = "")) res <- FactChar_fast(rep(5, 3), blk) stopifnot(inherits(res, "lfebd3_analysis"))
Compatibility wrapper for the construction function used in earlier versions of the package.
generate_Tn_full(n)generate_Tn_full(n)
n |
Non-negative integer. Number of recursive expansions. |
The transposed recursive construction matrix.
dim(generate_Tn_full(1))dim(generate_Tn_full(1))
Compatibility wrapper retaining the earlier package interface.
get_Tn_square(n)get_Tn_square(n)
n |
Positive integer. Number of factors. |
A matrix containing the first 3^n rows of the recursive
construction generated at expansion level n.
T2 <- get_Tn_square(2) stopifnot(nrow(T2) == 9)T2 <- get_Tn_square(2) stopifnot(nrow(T2) == 9)
Backward-compatible complete-design interface. The conceptual construction
is provided by lfebd3.ff(), while this function returns treatment labels
in the run-table format used by earlier package versions.
lfebd3(n)lfebd3(n)
n |
Positive integer. Number of factors. |
A data frame with Run and Treatment columns.
d <- lfebd3(2) stopifnot(nrow(d) == 9)d <- lfebd3(2) stopifnot(nrow(d) == 9)
Generates complete, fractional or confounded 3-level designs using the revised FF, FrF and CF construction rules and optionally applies the shared design-characteristic diagnostics.
lfebd3_analyze( type = base::c("lfebd3", "lfebd3.ff", "lfebd3.fr", "lfebd3.cf", "lfebd3.cf.full"), n, c = NULL, p = NULL, r = NULL, block_size = NULL, show_design = TRUE, run_analysis = TRUE, fast = NULL, exact_limit = Inf, print_limit = 50 )lfebd3_analyze( type = base::c("lfebd3", "lfebd3.ff", "lfebd3.fr", "lfebd3.cf", "lfebd3.cf.full"), n, c = NULL, p = NULL, r = NULL, block_size = NULL, show_design = TRUE, run_analysis = TRUE, fast = NULL, exact_limit = Inf, print_limit = 50 )
type |
Generator name: |
n |
Positive integer. Number of factors. |
c |
Optional backward-compatible alias for the fractional exponent. |
p |
Optional fractional exponent for |
r |
Optional block-size exponent for confounded designs. |
block_size |
Block size for complete and fractional run-ordered designs. |
show_design |
Logical. Whether the print method displays the design. |
run_analysis |
Logical. Whether to calculate design diagnostics. |
fast |
Logical or |
exact_limit |
Maximum number of treatments for automatic exact mode. |
print_limit |
Maximum rows displayed by the print method. |
An object of class "lfebd3_analyze_result".
res <- lfebd3_analyze( type = "lfebd3.fr", n = 4, p = 2, block_size = 9, show_design = FALSE, run_analysis = FALSE ) stopifnot(inherits(res, "lfebd3_analyze_result"))res <- lfebd3_analyze( type = "lfebd3.fr", n = 4, p = 2, block_size = 9, show_design = FALSE, run_analysis = FALSE ) stopifnot(inherits(res, "lfebd3_analyze_result"))
Generates a principal block of size 3^p from a 3^n complete
factorial design. The first reduction uses the confounded selection rule and
subsequent reductions use the fractional rule.
lfebd3.cf(n, p, row_numbers = FALSE)lfebd3.cf(n, p, row_numbers = FALSE)
n |
Integer greater than or equal to two giving the number of factors. |
p |
Positive integer giving the target block-size exponent, with
|
row_numbers |
Logical. If |
An object of class "lfebd3_cf_principal" containing
design_name, design, confound_factors,
design_matrix, and selected_rows.
lfebd3.cf.full(),
lfebd3_analyze()
d <- lfebd3.cf(3, p = 2) stopifnot(nrow(d$design) == 9)d <- lfebd3.cf(3, p = 2) stopifnot(nrow(d$design) == 9)
Forms all additive translates of the principal block, producing
3^(n-r) blocks of size 3^r and covering all 3^n
treatment combinations.
lfebd3.cf.full(n, r, max_blocks_display = 12, return_info = FALSE)lfebd3.cf.full(n, r, max_blocks_display = 12, return_info = FALSE)
n |
Positive integer giving the number of factors. |
r |
Positive integer giving the block-size exponent, with
|
max_blocks_display |
Retained for backward compatibility. |
return_info |
Logical. If |
A block-wise data frame of class "lfebd3_cf_design", or a list
containing construction details when return_info = TRUE.
lfebd3.cf(),
convert_to_blocks(),
FactChar()
d <- lfebd3.cf.full(3, r = 2) stopifnot(nrow(d) == 9, ncol(d) == 4)d <- lfebd3.cf.full(3, r = 2) stopifnot(nrow(d) == 9, ncol(d) == 4)
Selects columns 3^0, 3^1, ..., 3^(n-1) from the recursive ternary
matrix to obtain all 3^n treatment combinations.
lfebd3.ff(n)lfebd3.ff(n)
n |
Positive integer giving the number of factors. |
A data frame with 3^n rows and n factor columns named
F1, F2, and so on.
lfebd3(), lfebd3.fr(),
lfebd3.cf.full()
d <- lfebd3.ff(3) stopifnot(nrow(d) == 27, ncol(d) == 3)d <- lfebd3.ff(3) stopifnot(nrow(d) == 27, ncol(d) == 3)
Generates a 1/3^p fraction of a 3^n complete factorial design
using recursive row-selection rules. The resulting design contains
3^(n-p) runs.
lfebd3.fr(n, p, row_numbers = FALSE)lfebd3.fr(n, p, row_numbers = FALSE)
n |
Positive integer giving the number of factors. |
p |
Non-negative integer giving the fractionation exponent, with
|
row_numbers |
Logical. If |
An object of class "lfebd3_fr" containing design_name,
design, defining_factors, design_matrix,
selected_rows, and defining_contrasts.
lfebd3.ff(), lfebd3.cf(),
lfebd3_analyze()
d <- lfebd3.fr(4, p = 2) stopifnot(nrow(d$design) == 9)d <- lfebd3.fr(4, p = 2) stopifnot(nrow(d$design) == 9)
A concise alias for lfebd4.ff() that matches the naming convention of
lfebd3() and lfebd5().
lfebd4(n)lfebd4(n)
n |
Positive integer. Number of factors. |
An integer matrix with 4^n rows and n factor columns.
d <- lfebd4(2) stopifnot(nrow(d) == 16)d <- lfebd4(2) stopifnot(nrow(d) == 16)
Generates complete, fractional, or confounded 4-level factorial designs and optionally applies the shared package analysis routines with factor_levels = rep(4, n).
lfebd4_analyze( type = c("lfebd4", "lfebd4.ff", "lfebd4.fr", "lfebd4.cf", "lfebd4.cf.full"), n, fr = NULL, r = NULL, block_size = NULL, show_design = TRUE, run_analysis = TRUE, fast = NULL, exact_limit = 256, print_limit = 50 )lfebd4_analyze( type = c("lfebd4", "lfebd4.ff", "lfebd4.fr", "lfebd4.cf", "lfebd4.cf.full"), n, fr = NULL, r = NULL, block_size = NULL, show_design = TRUE, run_analysis = TRUE, fast = NULL, exact_limit = 256, print_limit = 50 )
type |
Character string identifying the 4-level generator. |
n |
Positive integer giving the number of factors. |
fr |
Fractionation count for |
r |
Optional block-size exponent for confounded designs. |
block_size |
Block size for complete and fractional run-ordered designs. |
show_design |
Logical. Whether printing displays the generated design. |
run_analysis |
Logical. Whether to compute design diagnostics. |
fast |
Logical or |
exact_limit |
Maximum number of treatments for automatic exact mode. |
print_limit |
Maximum number of rows displayed by the print method. |
An object of class "lfebd4_analyze_result".
res <- lfebd4_analyze( type = "lfebd4.fr", n = 3, fr = 1, block_size = 16, run_analysis = FALSE ) stopifnot(inherits(res, "lfebd4_analyze_result"))res <- lfebd4_analyze( type = "lfebd4.fr", n = 3, fr = 1, block_size = 16, run_analysis = FALSE ) stopifnot(inherits(res, "lfebd4_analyze_result"))
Reduces a complete 4^n design to a principal block. The first reduction uses the confounded selection pattern and later reductions use the fractional pattern.
lfebd4.cf(n, fr = n - 1, return.rows = FALSE)lfebd4.cf(n, fr = n - 1, return.rows = FALSE)
n |
Positive integer giving the number of factors. |
fr |
Positive integer giving the target block-size exponent. The principal block contains |
return.rows |
Logical. If |
A list of class "lfebd4_cf_principal" containing the principal-block design and independent confounded effects.
d <- lfebd4.cf(3, fr = 2) stopifnot(nrow(d$design) == 16)d <- lfebd4.cf(3, fr = 2) stopifnot(nrow(d$design) == 16)
Forms all additive translates of the principal block, giving 4^(n-r) blocks of size 4^r.
lfebd4.cf.full(n, r = 1, return.info = FALSE)lfebd4.cf.full(n, r = 1, return.info = FALSE)
n |
Positive integer giving the number of factors. |
r |
Positive integer giving the block-size exponent. |
return.info |
Logical. If |
A data frame of class "lfebd4_cf_design", or a construction list when return.info = TRUE.
d <- lfebd4.cf.full(3, r = 2) stopifnot(nrow(d) == 16, ncol(d) == 5)d <- lfebd4.cf.full(3, r = 2) stopifnot(nrow(d) == 16, ncol(d) == 5)
Constructs the complete 4^n factorial design using the recursive
modulo-4 construction supplied with the package update.
lfebd4.ff(n, return.full.matrix = FALSE, return.cols = FALSE)lfebd4.ff(n, return.full.matrix = FALSE, return.cols = FALSE)
n |
Positive integer. Number of factors. |
return.full.matrix |
Logical. If |
return.cols |
Logical. If |
By default, an integer matrix with 4^n rows and n columns.
When either return option is TRUE, a list containing design and the
requested supplementary component(s) is returned.
d <- lfebd4.ff(2) stopifnot(nrow(d) == 16, ncol(d) == 2)d <- lfebd4.ff(2) stopifnot(nrow(d) == 16, ncol(d) == 2)
Generates a 4^(n-fr) fraction from the complete 4^n design and reports independent defining factors. The special construction for n = 5 and fr = 3 is retained.
lfebd4.fr(n, fr = 1, return.rows = FALSE)lfebd4.fr(n, fr = 1, return.rows = FALSE)
n |
Positive integer giving the number of factors. |
fr |
Non-negative integer giving the number of fractionation stages. |
return.rows |
Logical. If |
A list of class "lfebd4_fr_design" containing design, defining.factor, and optionally selected.rows.
d <- lfebd4.fr(3, fr = 1) stopifnot(nrow(d$design) == 16)d <- lfebd4.fr(3, fr = 1) stopifnot(nrow(d$design) == 16)
Creates the complete 5-level factorial layout for n factors. Factor
columns are named F1, F2, and so on, and levels are coded as integers
0 through 4.
lfebd5(n)lfebd5(n)
n |
Positive integer. Number of factors. |
A data frame with 5^n rows and n factor columns.
d <- lfebd5(2) stopifnot(nrow(d) == 25, ncol(d) == 2)d <- lfebd5(2) stopifnot(nrow(d) == 25, ncol(d) == 2)
Generates a complete, fractional, or confounded 5-level factorial block
design and, optionally, computes design-characteristic diagnostics. The
factor-level vector is inferred automatically as rep(5, n) unless supplied.
lfebd5_analyze( type = base::c("lfebd5", "lfebd5.fr", "lfebd5.cf"), factor_levels = NULL, n, c = NULL, r = NULL, block_size = NULL, show_design = TRUE, run_analysis = TRUE, fast = NULL, exact_limit = 125, print_limit = 50 )lfebd5_analyze( type = base::c("lfebd5", "lfebd5.fr", "lfebd5.cf"), factor_levels = NULL, n, c = NULL, r = NULL, block_size = NULL, show_design = TRUE, run_analysis = TRUE, fast = NULL, exact_limit = 125, print_limit = 50 )
type |
Character string specifying the generator to use. Use
|
factor_levels |
Optional integer vector. Must equal |
n |
Positive integer. Number of factors. |
c |
Optional non-negative integer. Degree of fractionation for
|
r |
Optional positive integer. Block-size exponent for
|
block_size |
Optional positive integer used to split run-ordered
complete or fractional designs into consecutive blocks. Required for
|
show_design |
Logical. Stored in the returned object and used by
|
run_analysis |
Logical. If |
fast |
Logical or |
exact_limit |
Positive integer. Maximum number of treatments for which
exact |
print_limit |
Positive integer. Maximum number of rows printed from
large generated designs and alias tables by |
An object of class "lfebd5_analyze_result", a list with components
type, factor_levels, generated_design, design_table, blocks,
analysis, show_design, show_confounding, fast, and
print_limit. Use print() to display
a formatted report.
lfebd5(), lfebd5.fr(), lfebd5.cf(), FactChar()
res <- lfebd5_analyze( type = "lfebd5.fr", n = 3, c = 1, block_size = 25, show_design = FALSE, run_analysis = FALSE ) stopifnot(inherits(res, "lfebd5_analyze_result"))res <- lfebd5_analyze( type = "lfebd5.fr", n = 3, c = 1, block_size = 25, show_design = FALSE, run_analysis = FALSE ) stopifnot(inherits(res, "lfebd5_analyze_result"))
Generates a 5-level confounded factorial design with 5^n treatments
arranged in blocks of size 5^r. The result is returned in block-wise form.
lfebd5.cf(n, r = 1, return_info = FALSE)lfebd5.cf(n, r = 1, return_info = FALSE)
n |
Integer. Number of factors. Must be at least 3. |
r |
Positive integer. Block-size exponent; each block has |
return_info |
Logical. If |
A data frame of class "lfebd5_cf_design" unless return_info = TRUE.
d <- lfebd5.cf(3, r = 1) stopifnot(nrow(d) == 5, ncol(d) == 26)d <- lfebd5.cf(3, r = 1) stopifnot(nrow(d) == 5, ncol(d) == 26)
Returns independent confounded effects and related counts for a 5-level confounded design.
lfebd5.cf_independent_confounding(n, r, p = 5)lfebd5.cf_independent_confounding(n, r, p = 5)
n |
Integer. Number of factors. |
r |
Positive integer. Block-size exponent. |
p |
Integer modulus. Defaults to 5. |
A list with confounding summaries and generator matrix.
info <- lfebd5.cf_independent_confounding(3, r = 1) stopifnot(info$block_size == 5)info <- lfebd5.cf_independent_confounding(3, r = 1) stopifnot(info$block_size == 5)
Generates a 5-level fractional factorial design by repeated row selection and attaches defining-factor and aliasing summaries as attributes.
lfebd5.fr(n, c = 1, return_info = FALSE)lfebd5.fr(n, c = 1, return_info = FALSE)
n |
Integer. Number of factors. Must be at least 3. |
c |
Non-negative integer. Degree of fractionation; the design has
|
return_info |
Logical. If |
A data frame of class "lfebd5_fr_design" unless return_info = TRUE.
d <- lfebd5.fr(3, c = 1) stopifnot(nrow(d) == 25) attr(d, "defining_factors")d <- lfebd5.fr(3, c = 1) stopifnot(nrow(d) == 25) attr(d, "defining_factors")
Displays the formatted report for an object returned by FactChar().
## S3 method for class 'lfebd3_analysis' print(x, show_confounding = FALSE, ...)## S3 method for class 'lfebd3_analysis' print(x, show_confounding = FALSE, ...)
x |
An object of class |
show_confounding |
Logical. If |
... |
Further arguments passed to or from other methods. |
Invisibly returns x.
d <- lfebd3.cf.full(2, 1) res <- FactChar(c(3, 3), convert_to_blocks(d)) print(res)d <- lfebd3.cf.full(2, 1) res <- FactChar(c(3, 3), convert_to_blocks(d)) print(res)
Print a 3-level LFBD analysis result
## S3 method for class 'lfebd3_analyze_result' print(x, ...)## S3 method for class 'lfebd3_analyze_result' print(x, ...)
x |
Object returned by |
... |
Further arguments passed to methods. |
Invisibly returns x.
Displays the block design and independent confounded factors.
## S3 method for class 'lfebd3_cf_design' print(x, ...)## S3 method for class 'lfebd3_cf_design' print(x, ...)
x |
Object returned by |
... |
Further arguments passed to |
Invisibly returns x.
Displays the principal block and independent confounded factors.
## S3 method for class 'lfebd3_cf_principal' print(x, ...)## S3 method for class 'lfebd3_cf_principal' print(x, ...)
x |
Object returned by |
... |
Further arguments passed to |
Invisibly returns x.
Print a fractional 3-level factorial design
## S3 method for class 'lfebd3_fr' print(x, ...)## S3 method for class 'lfebd3_fr' print(x, ...)
x |
Object returned by |
... |
Further arguments passed to |
Invisibly returns x.
Displays the generated 4-level design and available diagnostics.
## S3 method for class 'lfebd4_analyze_result' print(x, ...)## S3 method for class 'lfebd4_analyze_result' print(x, ...)
x |
Object returned by |
... |
Further arguments passed to methods. |
Invisibly returns x.
Displays the block design and independent confounded effects.
## S3 method for class 'lfebd4_cf_design' print(x, ...)## S3 method for class 'lfebd4_cf_design' print(x, ...)
x |
Object returned by |
... |
Further arguments passed to |
Invisibly returns x.
Displays the principal block and independent confounded effects.
## S3 method for class 'lfebd4_cf_principal' print(x, ...)## S3 method for class 'lfebd4_cf_principal' print(x, ...)
x |
Object returned by |
... |
Further arguments passed to |
Invisibly returns x.
Displays the fractional design and its defining factors.
## S3 method for class 'lfebd4_fr_design' print(x, ...)## S3 method for class 'lfebd4_fr_design' print(x, ...)
x |
Object returned by |
... |
Further arguments passed to |
Invisibly returns x.
Displays the generated design and analysis diagnostics stored in an object
returned by lfebd5_analyze(). Printing is intentionally handled by this
S3 method so that the constructor itself can be used silently in scripts,
examples, and tests.
## S3 method for class 'lfebd5_analyze_result' print(x, ...)## S3 method for class 'lfebd5_analyze_result' print(x, ...)
x |
An object returned by |
... |
Further arguments passed to methods. |
Invisibly returns x.
res <- lfebd5_analyze( type = "lfebd5.fr", n = 3, c = 1, block_size = 25, show_design = FALSE, run_analysis = FALSE ) print(res)res <- lfebd5_analyze( type = "lfebd5.fr", n = 3, c = 1, block_size = 25, show_design = FALSE, run_analysis = FALSE ) print(res)
Displays a confounded 5-level block design and its confounded-effect summaries.
## S3 method for class 'lfebd5_cf_design' print(x, ...)## S3 method for class 'lfebd5_cf_design' print(x, ...)
x |
Object of class |
... |
Further arguments passed to |
Invisibly returns x.
d <- lfebd5.cf(3, r = 1) print(d)d <- lfebd5.cf(3, r = 1) print(d)
Displays a fractional 5-level design with defining factors and main-effect aliases.
## S3 method for class 'lfebd5_fr_design' print(x, ...)## S3 method for class 'lfebd5_fr_design' print(x, ...)
x |
Object of class |
... |
Further arguments passed to |
Invisibly returns x.
d <- lfebd5.fr(3, c = 1) print(d)d <- lfebd5.fr(3, c = 1) print(d)