Takes an existing threshold-sweep result object (produced by otSweep, ctSweepS, ctSweepM, or dtSweep) and augments it with Fiss (2011) core/peripheral classification.

compute_fiss_core(result, conditions = NULL)

Arguments

result

A sweep result object with $details and $settings slots (e.g., from otSweep(..., return_details = TRUE)).

conditions

Character vector. Condition names (used for consistent row ordering in charts). If NULL, extracted automatically.

Value

The original result object with an additional $fiss_core slot: a named list keyed by threshold (character), each entry containing:

  • parsim_expression — parsimonious solution expression

  • interm_expression — intermediate solution expression

  • classification — data frame with columns term_idx, term_expr, condition, status, type

Details

The classification requires that:

  • The sweep was run with include = "?" (to allow parsimonious computation)

  • return_details = TRUE was used (truth tables must be stored)

  • dir.exp was specified (i.e., the sweep produced intermediate solutions — core/peripheral is only meaningful when comparing parsimonious vs intermediate)

For each threshold in the result, this function:

  1. Retrieves the intermediate solution already stored in result$details.

  2. Re-runs QCA::minimize() on the same truth table with dir.exp = NULL to obtain the parsimonious solution.

  3. Compares the two solutions: conditions appearing in both are core; conditions appearing only in the intermediate solution are peripheral.

References

Fiss, P. C. (2011). Building better causal theories: A fuzzy set approach to typologies in organization research. Academy of Management Journal, 54(2), 393-420.

Examples

if (FALSE) { # \dontrun{
library(ThSQCA)
data(sample_data)

# Step 1: Run intermediate sweep (dir.exp required)
res <- otSweep(
  dat        = sample_data,
  outcome    = "Y",
  conditions = c("X1", "X2", "X3"),
  sweep_range = 6:8,
  thrX       = c(X1 = 7, X2 = 7, X3 = 7),
  include    = "?",
  dir.exp    = c(1, 1, 1),
  return_details = TRUE
)

# Step 2: Augment with Fiss core/peripheral classification
res_fiss <- compute_fiss_core(res, conditions = c("X1", "X2", "X3"))

# Step 3: Generate Fiss-style chart
cat(generate_fiss_chart(res_fiss, symbol_set = "unicode"))
} # }