pcatR is an independent R package for reproducible
analysis of the 14-item Pragmatic Context Assessment Tool
(pCAT). It imports and validates response data, classifies
barriers and facilitators, summarizes item-level patterns, describes
team agreement and disagreement, compares repeated assessments, creates
implementation action-planning tables, and produces publication-ready
figures.
The pCAT was developed as a brief pragmatic reflection and
problem-solving tool, not as a conventional multi-item psychometric
scale. Accordingly, pcatR:
-2 to +2 display code only for
plotting and within-item transition descriptions;Read the Technical User Guide before analyzing study or operational data. After installation, open the packaged guide with:
pcat_user_guide()install.packages("remotes")
remotes::install_github("JaeManP/pcatR")install.packages(
"pcatR_1.0.1.tar.gz",
repos = NULL,
type = "source"
)pcatR is a pure-R package. Its required plotting
dependency, ggplot2, is installed automatically by standard
package installers. The optional Shiny interface requires
shiny.
library(pcatR)
# Use synthetic example data, or replace this with pcat_read_csv("file.csv").
dat <- pcat_example_data()
analysis <- pcat_analyse(
dat,
group_vars = c("site_id", "timepoint"),
require_complete = TRUE,
validation_action = "none"
)
analysis
pcat_validation_issues(analysis$validation)
head(analysis$summary)
head(analysis$consensus)
head(analysis$action_plan)
plot_pcat_profile(
analysis$classified,
group_vars = c("site_id", "timepoint"),
label = "cfir_original_construct"
)
example_output <- tempfile("pcat_analysis_", tmpdir = tempdir())
pcat_write_analysis(
analysis,
path = example_output,
include_classified = FALSE
)
unlink(example_output, recursive = TRUE, force = TRUE)The export directory contains a manifest, validation findings,
classified responses, item summaries, consensus diagnostics, an
action-plan worksheet, and an optional multi-page profile PDF. Set
include_classified = FALSE when a respondent-level export
is not required.
The temporary path keeps this documentation example out of the current working directory. For real analyses, choose an explicit, approved project output directory.
Each item has two response components:
| Component | Code | Meaning |
|---|---|---|
| Direction | 1 | Disagree / potential barrier |
| Direction | 2 | Neutral |
| Direction | 3 | Agree / potential facilitator |
| Effect | 0 | Weak or no effect |
| Effect | 1 | Strong effect |
Leave effect blank when direction = 2
(neutral). A neutral response paired with any effect value is flagged by
default.
The five complete descriptive classifications are:
| Direction | Effect | Classification | Display code |
|---|---|---|---|
| 1 | 1 | Strong barrier | -2 |
| 1 | 0 | Weak barrier | -1 |
| 2 | blank | Neutral | 0 |
| 3 | 0 | Weak facilitator | +1 |
| 3 | 1 | Strong facilitator | +2 |
The display code must not be summed across items or treated as an interval-scale outcome.
Required columns are respondent_id,
item_id, direction, and effect.
Recommended metadata columns include project_id,
site_id, team_id, role,
timepoint, assessment_date, and
comment.
template_path <- tempfile("pcat_long_template_", fileext = ".csv")
pcat_write_template(
template_path,
format = "long",
n_respondents = 10,
include_item_text = TRUE
)
unlink(template_path, force = TRUE)For non-standard source data, map columns explicitly:
standard <- pcat_standardize(
raw_data,
respondent_id = "participant_code",
item_id = "question_number",
direction = "barrier_facilitator_response",
effect = "effect_strength",
site_id = "clinic",
timepoint = "wave"
)| Task | Primary functions |
|---|---|
| Instrument and mappings | pcat_items(), pcat_construct_map(),
pcat_response_options() |
| Templates and import | pcat_template(), pcat_write_template(),
pcat_read_csv(), pcat_standardize() |
| Validation | pcat_validate(),
pcat_validation_issues() |
| Classification | pcat_classify() |
| End-to-end analysis | pcat_analyse() |
| Item summaries | pcat_summarise() |
| Agreement/disagreement | pcat_consensus() |
| Repeated assessment | pcat_change() |
| Action planning | pcat_action_plan(),
pcat_strategy_candidates() |
| Figures | plot_pcat_profile(), plot_pcat_heatmap(),
plot_pcat_change() |
| Export | pcat_write_analysis(),
pcat_save_profile_pdf() |
| Technical guide | pcat_user_guide() |
| Diagnostic check | pcat_self_test() |
| Optional dashboard | pcat_app() |
Directional percentages use all eligible records with a valid
direction and therefore use n_valid_direction. The
directional n_neutral count includes every valid neutral
direction. Complete five-category percentages use only eligible records
with a complete direction-plus-effect classification and use
n_complete_class; their neutral numerator is
n_neutral_complete. A neutral direction with an invalid
effect remains in n_neutral but is excluded from
n_neutral_complete and the complete five-category
distribution. pct_complete_class is the share of
valid-direction records that have a complete five-category
classification and can be reviewed as a completeness diagnostic before
interpreting category-specific percentages.
The package retains the original pCAT-to-CFIR mapping and the updated
mapping reported in 2026. Item 10 has two updated-CFIR links in
Supplementary Table S3:
Available Resources: Materials & Equipment (primary in
the package dictionary) and Available Resources: Funding
(secondary). Retrieve all links with:
pcat_construct_map("2022", include_secondary = TRUE)Use coded respondent identifiers. Do not place names, medical-record
numbers, email addresses, or protected health information in pCAT files.
Avoid respondent-level heatmaps for small or identifiable teams. For
tabular outputs, pcat_summarise(..., suppress_below = 5)
suppresses numerical analytic results and the derived
modal_class below a user-specified respondent threshold
while retaining grouping, item, and CFIR metadata. Select the threshold
required by your protocol or organization.
The Shiny interface is an analysis convenience, not a secure survey-collection platform.
The package author is Lilac Li. Jae Man Park is the package maintainer. Author and maintainer profile links are retained in the package metadata and website.
Run:
citation("pcatR")Analyses should cite the software, the original pCAT development article, and, when updated CFIR mappings are used, the 2026 mapping article. Instrument wording and source-derived mapping content are attributed under CC BY 4.0; package code is MIT licensed. See LICENSE.note and REFERENCES.md.
This software is independent and is not an official product or endorsement of the original pCAT authors, the U.S. Department of Veterans Affairs, the CFIR Leadership Team, or the instrument repository.
install.packages(c("devtools", "testthat", "pkgdown"))
devtools::document()
devtools::test()
devtools::check()
pkgdown::build_site()See CONTRIBUTING.md, GOVERNANCE.md, and SECURITY.md before contributing.
Before publishing, follow PUBLISHING.md, use RELEASE_CHECKLIST.md as the reusable review template, and require all GitHub Actions jobs to pass. The completed release-candidate checks and remaining external gates are documented in RELEASE_VALIDATION.md.