compute_fiss_core: Compute Fiss Core/Peripheral Classification for Sweep Results

View source: R/tsqca_fiss_core.R

compute_fiss_coreR Documentation

Compute Fiss Core/Peripheral Classification for Sweep Results

Description

Takes a threshold-sweep result produced by otSweep or ctSweepS and augments it with the Fiss (2011) core/peripheral classification of the intermediate solution. Results of ctSweepM and dtSweep are not supported yet and give an error.

Usage

compute_fiss_core(result, conditions = NULL)

Arguments

result

A result of otSweep() or ctSweepS() run with include = "?", dir.exp and return_details = TRUE.

conditions

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

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 and intermediate solutions)

For each threshold in the result, this function:

  1. Retrieves the intermediate solution already stored in result$details, and takes the model reported in the sweep summary (M1).

  2. Identifies the parsimonious solution(s) from which QCA::minimize() derived that model. With dir.exp, QCA stores one entry in sol$i.sol for each pair of a complex solution and a parsimonious minimal solution (C1P1, C1P2, ...; see print(sol)), holding the parsimonious model in $p.sol and the intermediate model(s) obtained from it in $solution. Every entry that lists M1 is treated as a source.

  3. Classifies each term (configuration) of M1: the conditions of the source parsimonious term(s) contained in that term are core; its other conditions are peripheral.

Value

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

  • parsim_expression — the parsimonious solution(s) M1 was compared with; several are shown with QCA's labels, e.g. "P1: ...; P2: ..."

  • interm_expression — the intermediate solution classified (M1)

  • parsim_n_solutions — number of tied parsimonious solutions on the truth table

  • interm_n_solutions — number of intermediate minimal solutions

  • parsim_sources — names of the i.sol entries M1 was derived from (e.g. "C1P1"), or NA when unavailable

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

Relation to Fiss (2011)

Fiss (2011) defines core conditions as those that are part of both the parsimonious and the intermediate solution, and peripheral conditions as those that are eliminated in the parsimonious solution and therefore appear only in the intermediate solution. His solution tables apply this configuration by configuration: solutions are grouped by their core conditions, and the same condition can be core in one configuration and peripheral in another. This function follows that practice. A parsimonious term is contained in an intermediate term when every condition it specifies has the same status (present or absent) in the intermediate term; the core conditions of the intermediate term are the conditions of all parsimonious terms contained in it (one of the configurations in Fiss's high-performance table contains two parsimonious terms and has the core conditions of both).

Example: with the parsimonious solution ~A*E + A*B, the intermediate term ~A*~B*C*E contains ~A*E, so ~A and E are core and ~B and C are peripheral, even though B occurs in the other parsimonious term. Versions up to 2.0.7 compared each condition with the whole parsimonious solution and reported ~B as core here, which does not match how Fiss's tables are built.

Fiss (2011) does not discuss two situations, which this function handles conservatively and reports with a warning:

  • Tied parsimonious solutions. If QCA derived M1 from a single parsimonious solution, that solution alone decides. If QCA derived the same M1 from several tied parsimonious solutions (the directional expectations do not single one out), a condition is core only if it is core relative to every one of them. For example, if M1 = SUP + TRU*PRC is derived both from TRU + SUP and from PRC + SUP, then TRU is core relative to the first and PRC relative to the second, so both are reported as peripheral. Fiss grounds coreness in the strength of the evidence; a condition whose status depends on which tied solution is chosen is not treated as strongly supported. To report core/peripheral status relative to one particular parsimonious solution, state that choice explicitly.

  • No contained parsimonious term. An intermediate term can be covered by the parsimonious solution without containing any single parsimonious term (for example B*C*D*E with the parsimonious solution ~A*E + A*B). Its conditions are then all classified as peripheral.

Only M1 is classified. When the intermediate solution itself has several minimal models (see n_solutions in the sweep summary and interm_n_solutions below), the other models are not included in the classification or the chart. If the derivation cannot be read from the stored solution (no $i.sol or $p.sol), M1 is compared with every tied parsimonious solution.

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.

See Also

generate_fiss_chart

Examples

## Not run: 
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"))

## End(Not run)


ThSQCA documentation built on Sept. 26, 2026, 5:07 p.m.