Direction-Aware Sufficient Condition Analysis
Overview
Tests whether a high or low level of a condition is enough to guarantee a high or low level of an outcome. Such a claim predicts that one corner of the condition-outcome scatter plot is empty of observations. The package estimates the boundary of that empty corner, its size as a share of the scope (the effect size), a permutation test against random pairing, and a threshold table giving the condition level that guarantees each outcome level, in actual units, percentages, percentiles or standard deviations. Each of the four directions (high or low condition, high or low outcome) is stated as a claim and mapped to its empty corner. Because a condition can rule out low outcomes while barely moving the average, results can be set beside ordinary least-squares and median regression slopes, showing whether the data hold an average effect, a sufficiency effect or both. Also provides plots, influential-case diagnostics, scope-sensitivity and resampling checks, random-data generation and power analysis for planning studies. Frontiers are estimated with the 'NCA' package.
SCAtools 0.5.0 was not released on CRAN, so this is the release that brings
the 0.5.0 changes below to CRAN users of 0.4.3. Read *Upgrading from 0.4.3*
first; it collects in one place every change that can break a script written
for that release.
Changed: the technique column is frontier again
0.5.0 renamed the column that names the frontier technique from frontier to
frontier_technique. It is frontier again, in sca_table(),
sca_thresholds(), sca_compare(), sca_locationshift(),
sca_scope_sensitivity() and sca_resample(), which is the name it had in
0.4.3 -- so for this column a script written against the CRAN release needs no
change at all.
The problem 0.5.0 set out to solve was a column that held "ce_fdh" under a
Show all changes in 0.5.1Hide the rest of the changes in 0.5.1
name that the same table also used for the boundary itself. frontier does not
have that problem: the value identifies which fitted frontier the row reports,
and frontier_accuracy beside it is that frontier's accuracy. boundary_type
still says whether the boundary is a ceiling or a floor. The plot legend reads
"Frontier" again, and frontier is no longer listed by sca_legacy_names().
The arguments ceilings and ceiling are unchanged.
Changed: empty_zone_area is kept beside empty_space_area
0.5.0 renamed empty_zone_area to empty_space_area. NSCA 0.4.5, the release
on CRAN, reads the old name from sca_table(), and fails without it. The table
therefore carries empty_zone_area as an exact copy of empty_space_area until
a release of NSCA that reads the new name has replaced 0.4.5; it will then be
removed. New code should read empty_space_area.
NSCA 0.4.5's own test suite passes against this release.
Terminology: Sufficient Condition Analysis
The method is *Sufficient Condition Analysis*. 0.5.0 changed the title, and
this release finishes the job in the places it missed: citation("SCAtools"),
the README and the help page of sca().
Documentation
Descriptionin DESCRIPTION, the text on the CRAN page, now says directly what the method is, what it is for and how it helps. Where the method comes from, with its authors and references, is on the package help page,?SCAtools, which is no longer marked internal and so appears in the reference manual. It now covers the method, what it is for, how to use it and how to read the result.- The README and its Traditional Chinese translation are rewritten around the same four questions, with a worked example on
sca_four_configurations, and install from CRAN. Version history now lives only in this file, and help pages no longer recount it. - Every exported function now has a runnable example. Examples that run a permutation test use 99 permutations on a subsample so that they finish within seconds;
sca(), whose point is the default 1000 permutations, is wrapped in\donttest{}.sca_power()had lost the example it had in 0.4.3 when the help pages were regenerated, and has one again. - Help pages are generated with Markdown enabled. In 0.5.0 code, links and emphasis written in Markdown appeared literally in the rendered help -- backticks and square brackets rather than code and links.
citation("SCAtools")and the help pages cite the two papers that set out the method: Chan (in press), *From Necessity to Sufficiency and Necessity-and-Sufficiency: Extending Condition Analysis in Degree*, and Chan (in press), *Mean Effects Are Not Sufficiency Effects: How Sufficient Condition Analysis Complements Regression Analysis*, both University of Leeds.sca_four_configurationsis the data of the second.sca_legacy_names()said thatsca_extract()accepts retired names with a warning and that retired arguments still work. Neither has been true since 0.5.0:sca_extract()stops and names the replacement, andboundary,bottleneck.xandbottleneck.ywere removed. The page now says so, and lists the 0.5.0 renames as well as those of 0.4.0.- A stray
tests/testthat/Rplots.pdfis no longer shipped.
Upgrading from 0.4.3
Everything that can make a script written for 0.4.3 fail or give a different
number, with the section of 0.5.0 below that explains it.
empty_zone_areais nowempty_space_area. The old name is still present insca_table()for now, andlegacy = TRUEappends it to both tables.sca()runs a permutation test by default (test.rep = 1000), so it takes noticeably longer thansca_analysis().bottleneck.xandbottleneck.yare removed fromsca_analysis(), andboundaryfromsca_thresholds()andsca_rescale(). Usethreshold.x,threshold.yandinequality.sca_extract()stops at once on a retired column name. In 0.4.3 such a call warned and then failed anyway, so only the message changes.sca_reference()returns one row per condition and reference line, withline,tauanddrawncolumns.sca_thresholds(),sca_test_plot()andsca_output()default to the first frontier actually estimated instead of"ce_fdh".- Six inputs that were accepted are refused: an unknown frontier technique, a
test.p_thresholdoutside (0, 1), a negativetest.rep, a reversedscope, ascopewith no width, and the same variable as condition and outcome. - One outcome may not be given two different theoretical ranges across conditions.
- With missing values, both axes of a condition are now bounded by the same rows, so effect sizes can differ from 0.4.3 on incomplete data. Complete data is unaffected.
Importsgainsquantreg, which NCA already imports.
From NEWS.md in the release
Install
Health
- OK13 OKNow
- OK7 OK2026-09-19
Documentation
- Help pages
- 34includes a package overview page
- Examples that run
- 97%32 run in a plain check · 1 only when donttest examples are enabled (R CMD check --as-cran)
- Exported functions with examples
- 100%
- Documented parameters
- 89%
- Return-value docs
- 100%
- Help pages citing references
- 18%
Downloads
Repository
Checks run against github.com/youngchanresearcher/scatools on 2026-10-11.
No development-tooling practices detected in the upstream repository.
Dependencies
Installing SCAtools adds 82 packages (45 with compiled code, 76 MB of source tarballs). Heaviest: stringi 11 MB, ggplot2 6.0 MB, data.table 5.7 MB.
Code & Tests
Datasets
People & History
Pick two releases to compare their code metrics.
- 0.5.1Latest2026-10-13 · current release · diff ↗ ·
added 11 exports
sca_boundary_type, sca_check_direction, sca_compare, sca_corner_location, sca_empty_space, sca_locationshift, sca_magnitude, sca_relationship, sca_resample, sca_scope, sca_scope_sensitivity - 0.4.32026-09-18
- RR 4.6.0 released · 2026-04-24
Package metadata
- First published
- 2026-09-18
- Total releases
- 2 / 1 yrs
- License
- GPL (>= 3) OSI
- Minimum R
- ≥ 3.5.0
- Bundled data
- 28 KB / 1 file
- Download size
- 215 KB
Cite
Cite this package
Run in R for the authors' entry:
citation("SCAtools")The package provides a citation file, so citation() returns the authors' own entry.
It points to 10.1177/1094428115584005.
Cite the R Observatory
For a number measured here: a download total, a coverage figure, an archival date.
From data release v2026-10-18, which the citation names so these numbers can be found later. More on citing and the projects behind them.