Skip to contents

Screens whether a given target reliability is attainable in the generated finite Monte Carlo design for a particular test design (number of items, model, latent distribution, item source) by computing the range of empirical reliabilities across a range of scaling factors.

This function is useful for determining whether a planned simulation study is feasible before running the (potentially expensive) calibration algorithms.

Usage

check_feasibility(
  n_items,
  model = c("rasch", "2pl", "3pl"),
  latent_shape = "normal",
  item_source = "parametric",
  c_bounds = c(0.1, 10),
  M = 10000L,
  seed = NULL,
  latent_params = list(),
  item_params = list(),
  target_rho = NULL,
  verbose = TRUE
)

# S3 method for class 'feasibility_check'
print(x, digits = 4, ...)

Arguments

n_items

Integer. Number of items in the test form.

model

Character. Measurement model: "rasch", "2pl", or "3pl". For 3PL, supply lower-asymptote generation controls in item_params; discrimination alone is varied under D = 1.

latent_shape

Character. Shape argument passed to sim_latentG().

item_source

Character. Source argument passed to sim_item_params().

c_bounds

Numeric length-2 vector. Range of scaling factors to evaluate. Default: c(0.1, 10).

M

Integer. Monte Carlo sample size for theta. Default: 10000.

seed

Optional integer for reproducibility.

latent_params

List. Additional arguments passed to sim_latentG().

item_params

List. Additional arguments passed to sim_item_params().

target_rho

Optional numeric scalar in (0, 1). If supplied, the result includes status fields indicating whether the target is below, inside, or above the achievable range for each metric.

verbose

Logical. If TRUE, print results.

x

An object of class "feasibility_check".

digits

Integer. Number of decimal places for printing.

...

Additional arguments (ignored).

Value

An object of class "feasibility_check" (a list) with:

rho_range_info

Numeric length-2 vector: empirical range of average-information reliability (\(\tilde{\rho}\)) computed by the configured finite scan; provisional when topology is unresolved.

rho_range_msem

Numeric length-2 vector: empirical range of MSEM-based reliability (\(\bar{w}\)) computed by the configured finite scan; provisional when topology is unresolved.

rho_bounds_info

Endpoint reliabilities for average-information reliability.

rho_bounds_msem

Endpoint reliabilities for MSEM-based reliability.

rho_info_max_c

Scaling factor at the maximum information reliability detected by the configured scan within c_bounds; provisional when topology is unresolved.

rho_msem_max_c

Scaling factor at the maximum MSEM reliability detected by the configured scan within c_bounds; provisional when topology is unresolved.

target_status_info

If target_rho is supplied, one of "below_lower", "boundary_lower", "feasible", "boundary_upper", or "above_upper" for \(\tilde{\rho}\).

target_status_msem

Analogous status for \(\bar{w}\).

topology_info, topology_msem

Complete configured log-grid scans, polished extrema, detected roots, monotone branches, evaluation counts, and resolution status for each metric.

target_status_info_canonical, target_status_msem_canonical

Canonical feasibility status: "feasible", "infeasible_below_range", "infeasible_above_range", or "uncertain".

root_count_info, root_count_msem, admissible_root_count_info, admissible_root_count_msem

Detected roots and roots on increasing crossing/boundary branches.

best_achievable_info, best_achievable_msem

Closest detected point to target_rho, including scale, reliability, residual, absolute error, and location type.

n_items

Number of items.

model

Model used.

latent_shape

Latent distribution shape.

c_bounds

Scaling factor bounds evaluated.

M

Monte Carlo sample size.

theta_var

Estimated latent variance.

The input object, invisibly.

Details

Either reliability metric can be non-monotone over a sufficiently broad finite empirical integration interval. Both metrics therefore use the same adaptive log-scale topology scan as the calibrators. Endpoint values remain available in rho_bounds_*, while rho_range_* includes all resolved interior extrema within the user-supplied bounds.

These ranges and target classifications are conditional on the generated finite theta sample. In particular, for the built-in latent_shape = "heavy_tail", the population MSEM functional can be non-integrable even though a finite Monte Carlo sample yields a numeric rho_range_msem. Treat that MSEM range as finite-grid sensitivity evidence, not as a population feasibility guarantee.

Examples

# Check feasibility for 25-item Rasch test
feas <- check_feasibility(n_items = 25, model = "rasch",
                          target_rho = 0.90, seed = 42,
                          M = 5000, verbose = FALSE)
print(feas)
#> 
#> =======================================================
#>   Feasibility Check: Achievable Reliability Range
#> =======================================================
#> 
#>   Number of items  : 25
#>   Model            : RASCH
#>   Latent shape     : normal
#>   Latent variance  : 1.0099
#>   c range          : [0.10, 10.00]
#>   Monte Carlo M    : 5000
#> 
#> Achievable Reliability Ranges:
#>   rho_tilde (info) : [0.0591, 0.9872]
#>   rho_bar   (msem) : [0.0002, 0.9146]
#> 
#> Target rho*        : 0.9000
#>   info status      : feasible
#>   msem status      : feasible
#> 
#> Note: rho_tilde >= rho_bar on the same information grid (Jensen's inequality).
#>   rho_tilde range screens EQC targets; root policy must still admit a root.
#>   rho_bar range screens SAC targets; stable interior-branch preflight is also required.
#> 

# Metric-specific target status
feas$target_status_info
#> [1] "feasible"
feas$target_status_msem
#> [1] "feasible"