vdem_ncut_con <- ncut.test(
data = vdem_calib,
outcome = vdem_outcome,
conditions = vdem_conds,
n.cut = vdem_n_cut,
step = 1,
max_steps = 10,
incl.cut = vdem_incl_cut,
solution = "conservative",
complete = TRUE,
sort.by = c("incl", "n")
)6 Frequency Cutoff
Once the calibrated cases have been located in the truth table, we must decide how much empirical representation a configuration needs before it can be treated as sufficient for the outcome and, thus, enter the minimization process. This decision is governed by the frequency cutoff, n.cut. A configuration with a case count equal to or greater than the cutoff is eligible for an empirical outcome assignment; conversely, a configuration below the cutoff is treated as a logical remainder, even when it contains cases.
In a fuzzy-set truth table, the frequency count deserves a little unpacking. Although it is displayed as 0/1 for ease of interpretation, the cases’ fuzzy membership scores are still used to calculate the configuration’s consistency of sufficiency and PRI; so they are not converted into crisp scores for the set-relation calculations. Each case is associated with the Boolean configuration defined by whether its membership in each condition falls above or below the 0.5 crossover. It is then counted in the usual n column, which reports the number of cases associated with that configuration.
Thus, n.cut governs how many cases represent a configuration, whereas incl.cut and, when supplied, pri.cut govern whether an adequately represented configuration is treated as sufficient for the outcome. The order matters because QCA::truthTable() first compares the configuration’s case count in n with n.cut and, if the count falls below the frequency cutoff, that configuration will be displayed as OUT = ?. But, if the count reaches the cutoff, the applicable incl.cut consistency requirements determine its outcome assignment.
Raising n.cut can therefore turn a sparsely represented empirical configuration into a logical remainder without changing either its case count or its consistency of sufficiency. Conversely, lowering n.cut can return that configuration to the empirically observed portion of the truth table.
Well, ncut.test() examines whether those reclassifications alter a selected QCA solution. Beginning from the frequency cutoff used in the reference analysis, it constructs an independent lower and upper search path for every monitored solution type. At each tested integer, the function rebuilds the truth table, repeats the requested minimization, and compares the newly selected solution formula with its baseline counterpart. The calibrated memberships, cases, outcome, conditions, inclusion cutoff, and remaining QCA settings stay fixed throughout the diagnostic.
6.1 Defining the Frequency-Cutoff Search
As in the inclusion-cutoff diagnostic—which we’ll tackle in the next section—data supplies the already calibrated condition and outcome memberships, while outcome and conditions identify the sets used to reconstruct the truth table. The value supplied through n.cut must match the frequency cutoff used in the reference analysis because the solution obtained at that value becomes the baseline against which every lower and upper path is compared. Although n.cut defaults to 1, an analysis conducted with a different frequency cutoff should specify that value explicitly.
The search itself follows a simple integer grid: step is a positive integer and defaults to 1, so the function ordinarily tests every adjacent frequency cutoff. This is usually the most informative choice when the objective is to locate the nearest value that changes the formula. A larger step can be used, but it skips intervening case counts and may therefore pass over a change that would have occurred at one of them.
So my recommendation is to stick with the default value of
1. But hey, you do you.
Next, max_steps retains the path-budget role established in the preceding diagnostics, while incl.cut remains fixed at the consistency requirement used in the reference truth table.
The admissible frequency range begins at 1 and ends at the number of cases in data. A proposed value outside that range stops the corresponding path without producing another truth table. Within the admissible range, the diagnostic follows the same stopping logic introduced for incl.test(): the path ends when the selected formula changes, a comparable selected formula cannot be obtained, the QCA workflow fails, or the available search budget is exhausted. When several solution types are monitored, each one receives its own lower and upper paths.
For ordinary use, the printed ncut_test object is the primary view of the diagnostic, and as.data.frame() returns the same boundary table for further reporting. Unlike the calibration- and inclusion-cutoff diagnostics, ncut.test() currently has no plotting method. This is no great hardship though: frequency cutoffs move along a short integer scale, and the boundary table keeps the last formula-preserving value, any tested cutoff at which the formula first fails to be preserved, and the stopping reason together.
We can begin with the conservative solution. The reference analysis uses n.cut = 2 and incl.cut = 0.8; the diagnostic moves one case at a time and allows as many as ten movements in each direction. Below the baseline, only n.cut = 1 is admissible. Above it, the path can continue until the formula changes or another stopping condition is reached.
6.2 Reading the First Boundary
vdem_ncut_con
#> <ncut_test>
#> Outcome test: n.cut robustness
#> Solution: conservative
#> Monitored solutions: conservative
#> which_M: 1
#> Starting n.cut: 2
#> Step size: 1
#> Max steps: 10
#> Upper limit: 66
#>
#> Result
#> direction start last_safe first_failing steps total_delta reason
#> lower 2 1 NA 1 -1 search_boundary_lower
#> upper 2 2 3 0 0 CON:formula_changed
#>
#> Summary
#> Stable interval: [1, 2]
#> Total width: 1The header reports an upper limit of 66, corresponding to the number of cases in vdem_calib and hence to the largest frequency cutoff the function would consider for this diagnostic. The two records in the printed table correspond to the lower and upper searches from the reference cutoff of 2. As in the preceding chapter, last_safe is the furthest tested cutoff that preserves the baseline formula. When an admissible cutoff is tested and the selected formula changes or can no longer be compared with its baseline counterpart, first_failing records that cutoff. If the path stops before another admissible cutoff can be tested, first_failing remains NA. In either situation, reason identifies what stopped the search.
In the lower direction, n.cut = 1 preserves the conservative formula. The only configurational reclassification concerns ~FREEXP*~PARTY*~GENCL*JUCON, represented by Laos in the truth table. With a frequency cutoff of 2, this singleton configuration is treated as a logical remainder.
subset(
vdem_tt$tt,
FREEXP == 0 & PARTY == 0 & GENCL == 0 & JUCON == 1
)
#> FREEXP PARTY GENCL JUCON OUT n incl PRI cases
#> 2 0 0 0 1 ? 1 0.764432009878504 0.225916716247882 LaosLowering the cutoff to 1 makes it eligible for an empirical outcome assignment, but its consistency of sufficiency is approximately 0.764, below the fixed inclusion cutoff of 0.8. The configuration consequently receives OUT = 0 rather than joining the empirical configurations treated as sufficient for CIVSOC.
This distinction explains why the conservative formula does not change, for at the baseline cutoff, the Laos configuration has OUT = ? and is not used as a simplifying assumption in conservative minimization. At n.cut = 1, it has OUT = 0 and is likewise absent from the empirical configurations submitted to minimization as sufficient. The lower path therefore reaches last_safe = 1 after one formula-preserving movement.
The next proposed value is n.cut = 0, which falls outside the admissible range. The function therefore stops before constructing another truth table or repeating the minimization. Because 0 is not tested, it is not recorded as a failing cutoff: first_failing remains NA, while reason = "search_boundary_lower" shows that the lower limit of the admissible search was reached.
The upper path stops for a different reason. Raising the cutoff from 2 to 3 reclassifies the three configurations represented by exactly two cases as logical remainders. Two of these configurations had OUT = 0 at the reference cutoff, so their reclassification does not remove any empirical configuration treated as sufficient. The third is FREEXP*PARTY*GENCL*~JUCON, as can be seen in the truth table, represented by Bolivia and Comoros.
subset(
vdem_tt$tt,
FREEXP == 1 & PARTY == 1 & GENCL == 1 & JUCON == 0
)
#> FREEXP PARTY GENCL JUCON OUT n incl PRI cases
#> 15 1 1 1 0 1 2 0.900460083796951 0.74447851675981 Bolivia,ComorosIts consistency of sufficiency is approximately 0.900, and it therefore had OUT = 1 at n.cut = 2 and incl.cut = 0.8.
At the reference cutoff, the Bolivia-Comoros configuration can be paired with FREEXP*PARTY*GENCL*JUCON: the two sufficient paths differ only in the absence or presence of JUCON, allowing logical minimization to remove that redundancy and obtain the prime implicant FREEXP*PARTY*GENCL. Once the Bolivia-Comoros configuration is treated as a logical remainder at n.cut = 3, conservative minimization can no longer make that reduction. The remaining sufficient configurations yield only FREEXP*GENCL*JUCON, so the complete conservative solution changes from FREEXP*PARTY*GENCL + FREEXP*GENCL*JUCON to FREEXP*GENCL*JUCON.
Because the very first admissible movement above the baseline changes the formula, the upper path records last_safe = 2, first_failing = 3, and steps = 0. The zero means that no formula-preserving movement was completed before the first tested upper cutoff changed the conservative solution.
By the end, the two disturbance paths establish an observed conservative formula-preservation interval of [1, 2]. At n.cut = 1, the Boolean formula remains identical and the calibrated memberships remain fixed; membership in the prime implicants and in their union therefore remains unchanged as well. The prime-implicant and solution-level parameters of fit are consequently preserved at that cutoff.
But at n.cut = 3, the selected formula changes. In case you also want to compare the parameters of fit of the new one-term solution, it is necessary to inspect the corresponding minimization result.
6.3 Extending the Diagnostic Across Solution Types
The expanded application below examines whether the same frequency boundary holds for the conservative, parsimonious, and intermediate solutions, with each solution type being compared with its own baseline formula. The call retains the directional expectations, the C1P1 intermediate branch, and model position 1 from the reference analysis.
Importantly, it also recomputes the exclusion of contradictory simplifying assumptions for each reconstructed truth table, so parsimonious and intermediate minimization are evaluated under the same exclusion rule at every frequency cutoff.
vdem_ncut_all <- ncut.test(
data = vdem_calib,
outcome = vdem_outcome,
conditions = vdem_conds,
n.cut = vdem_n_cut,
step = 1,
max_steps = 10,
incl.cut = vdem_incl_cut,
solution = "all",
dir.exp = vdem_dir_exp,
exclude_mode = "recompute",
exclude_recompute = list(type = 2),
which_M = 1,
i_mode = "C1P1",
result_shape = "long",
complete = TRUE,
sort.by = c("incl", "n")
)vdem_ncut_all
#> <ncut_test>
#> Outcome test: n.cut robustness
#> Solution: all
#> Monitored solutions: conservative, parsimonious, intermediate
#> which_M: 1
#> i_mode: C1P1
#> Starting n.cut: 2
#> Step size: 1
#> Max steps: 10
#> Upper limit: 66
#>
#> Result
#> solution_type direction start last_safe first_failing steps total_delta reason
#> conservative lower 2 1 NA 1 -1 search_boundary_lower
#> conservative upper 2 2 3 0 0 CON:formula_changed
#> parsimonious lower 2 1 NA 1 -1 search_boundary_lower
#> parsimonious upper 2 2 3 0 0 PAR:formula_changed
#> intermediate lower 2 1 NA 1 -1 search_boundary_lower
#> intermediate upper 2 2 3 0 0 INT:formula_changed
#>
#> Summary
#>
#> Stable intervals
#> solution_type lower upper width
#> CON 1 2 1
#> PAR 1 2 1
#> INT 1 2 1All three lower paths preserve their respective baseline formulas at n.cut = 1 and then stop at the inadmissible proposal of 0. For the conservative solution, the reason is the one already examined: the Laos configuration becomes empirically observed but receives OUT = 0. In parsimonious and intermediate minimization, the same reclassification removes it from the pool of logical remainders, yet the configuration does not alter the simplifying assumptions used to obtain either selected baseline formula. The lower boundary is consequently the same for all three solution types.
All three upper paths also stop at the same tested cutoff. At n.cut = 3, the conservative and intermediate solutions lose FREEXP*PARTY*GENCL and retain only FREEXP*GENCL*JUCON. The parsimonious solution similarly drops FREEXP*PARTY and retains only FREEXP*JUCON.1 So things get gloomy across all three solution types, as the sufficient term containing PARTY disappears once the Bolivia-Comoros configuration no longer counts as empirically observed for minimization.
The common formula-preservation interval is therefore [1, 2] for the conservative, parsimonious, and intermediate solutions. This agreement concerns the location of the frequency-cutoff boundary, not the content of the solution formulas, as each lower and upper path compares one solution type with its own baseline formula; the diagnostic does not compare the three formulas with one another.
6.4 Interpreting and Reporting the Diagnostic
The frequency cutoff expresses a judgment about how much case-based evidence a truth-table configuration should contain before it can participate in minimization as empirically observed. A lower cutoff admits more sparsely represented configurations and reduces the portion of the truth table treated as logical remainders; a higher cutoff requires broader empirical representation but also turns more configurations into logical remainders and may increase the limited diversity confronted during minimization.
There is no universally appropriate value. The decision should be made in relation to the number of cases, the number of conditions and resulting logically possible configurations, the observed distribution of cases across those configurations, and the study’s theoretical standards for treating a configuration as empirically represented.
In other words, the diagnostic should not make that substantive decision for us, as it only shows the consequence of nearby alternatives under a controlled comparison.
In this application, lowering the frequency cutoff from 2 to 1 preserves all three selected formulas, whereas raising it to 3 changes all three because the sufficient Bolivia–Comoros configuration is no longer treated as empirically observed. A concise report should therefore state the baseline cutoff, the adjacent cutoffs tested, the fixed inclusion cutoff, the selected solution types, and the resulting formula-preservation interval. It should also identify the empirical configuration responsible for the formula change, since the interval alone does not show what evidence was removed from minimization.
The next chapter holds the frequency cutoff fixed at n.cut = 2 and examines the inclusion requirement that determines whether a truth-table configuration is consistently sufficient for the outcome.
Recomputing the exclusion rule at
n.cut = 3identifies logical-remainder configurations2,4,6, and8as contradictory simplifying assumptions. Together, these four configurations represent the combinations ofPARTYandGENCLin whichFREEXPis absent andJUCONis present. Their exclusion prevents the parsimonious prime implicantFREEXP*JUCONfrom being simplified further toJUCON. This is why the parsimonious formula reported at the upper boundary retainsFREEXP.↩︎