This document provides reproducible code for TSQCA
analyses.
It is designed to be inserted directly into a research article’s
appendix
or provided as supplementary analysis documentation. All code is fully
executable and ordered for reproducibility.
library(TSQCA)
library(QCA)
#> Warning: package 'QCA' was built under R version 4.4.3
#> Loading required package: admisc
#> Warning: package 'admisc' was built under R version 4.4.3
#>
#> To cite package QCA in publications, please use:
#> Dusa, Adrian (2019) QCA with R. A Comprehensive Resource.
#> Springer International Publishing.
#>
#> To run the graphical user interface, use: runGUI()# Adjust the file name as needed
library(TSQCA)
data("sample_data")
dat <- sample_data
# Outcome and conditions
Yvar <- "Y"
Xvars <- c("X1", "X2", "X3")
# Quick inspection
str(dat)
#> 'data.frame': 80 obs. of 4 variables:
#> $ Y : int 8 4 5 7 2 2 7 5 3 8 ...
#> $ X1: int 7 2 6 8 8 9 8 8 1 5 ...
#> $ X2: int 7 5 8 4 0 5 8 4 4 2 ...
#> $ X3: int 1 6 6 5 3 4 5 3 6 8 ...
summary(dat)
#> Y X1 X2 X3
#> Min. : 0.000 Min. : 0.000 Min. : 0.00 Min. : 0.000
#> 1st Qu.: 3.000 1st Qu.: 3.000 1st Qu.: 3.00 1st Qu.: 3.000
#> Median : 5.000 Median : 5.500 Median : 5.00 Median : 5.000
#> Mean : 5.513 Mean : 5.237 Mean : 5.05 Mean : 4.925
#> 3rd Qu.: 7.250 3rd Qu.: 8.000 3rd Qu.: 7.25 3rd Qu.: 7.000
#> Max. :10.000 Max. :10.000 Max. :10.00 Max. :10.000thrY_base <- 7
thrX_base <- 7
# Fixed X thresholds (for OTS–QCA)
thrX_vec <- c(
X1 = thrX_base,
X2 = thrX_base,
X3 = thrX_base
)
thrX_vec
#> X1 X2 X3
#> 7 7 7Sweep a single condition X (example: X3).
sweep_var <- "X3" # Condition (X) whose threshold is swept
sweep_range <- 6:9 # Candidate threshold values to evaluate
thrY <- 7 # Outcome (Y) threshold (fixed)
thrX_default <- 7 # Threshold for other X conditions (fixed)
res_cts <- ctSweepS(
dat = dat,
Yvar = "Y",
Xvars = c("X1", "X2", "X3"),
sweep_var = "X3",
sweep_range = 6:9,
thrY = 7,
thrX_default = 7,
dir.exp = 1,
return_details = FALSE
)
head(res_cts)
#> threshold expression inclS covS
#> 1 6 No solution NA NA
#> 2 7 No solution NA NA
#> 3 8 No solution NA NA
#> 4 9 No solution NA NAExport:
Sweep multiple X thresholds simultaneously.
res_mcts <- ctSweepM(
dat = dat,
Yvar = "Y",
Xvars = c("X1", "X2", "X3"),
sweep_vars = c("X2", "X3"),
sweep_range = 6:9,
thrY = 7,
thrX_default = 7,
dir.exp = 1,
return_details = FALSE
)
#> Error in ctSweepM(dat = dat, Yvar = "Y", Xvars = c("X1", "X2", "X3"), : unused arguments (sweep_vars = c("X2", "X3"), sweep_range = 6:9, thrX_default = 7)
head(res_mcts)
#> Error: object 'res_mcts' not foundExport:
Sweep only the outcome threshold (Y).
sweep_range_ots <- 6:9
res_ots <- otSweep(
dat = dat,
Yvar = "Y",
Xvars = c("X1", "X2", "X3"),
sweep_range = sweep_range_ots,
thrX = thrX_vec,
dir.exp = 1,
return_details = FALSE
)
res_ots
#> thrY expression inclS covS
#> 1 6 No solution NA NA
#> 2 7 No solution NA NA
#> 3 8 No solution NA NA
#> 4 9 No solution NA NAExport:
Two-dimensional sweep: X thresholds × Y thresholds.
sweep_list_dts_X <- list(
X1 = 6:8,
X2 = 6:8,
X3 = 6:8
)
sweep_range_dts_Y <- 6:8
res_dts <- dtSweep(
dat = dat,
Yvar = "Y",
Xvars = c("X1", "X2", "X3"),
sweep_list_X = sweep_list_dts_X,
sweep_range_Y = sweep_range_dts_Y,
dir.exp = 1,
return_details = FALSE
)
res_dts
#> combo_id thrY thrX expression inclS covS
#> 1 1 6 X1=6, X2=6, X3=6 No solution NA NA
#> 2 1 7 X1=6, X2=6, X3=6 No solution NA NA
#> 3 1 8 X1=6, X2=6, X3=6 No solution NA NA
#> 4 2 6 X1=7, X2=6, X3=6 No solution NA NA
#> 5 2 7 X1=7, X2=6, X3=6 No solution NA NA
#> 6 2 8 X1=7, X2=6, X3=6 No solution NA NA
#> 7 3 6 X1=8, X2=6, X3=6 No solution NA NA
#> 8 3 7 X1=8, X2=6, X3=6 No solution NA NA
#> 9 3 8 X1=8, X2=6, X3=6 No solution NA NA
#> 10 4 6 X1=6, X2=7, X3=6 No solution NA NA
#> 11 4 7 X1=6, X2=7, X3=6 No solution NA NA
#> 12 4 8 X1=6, X2=7, X3=6 No solution NA NA
#> 13 5 6 X1=7, X2=7, X3=6 No solution NA NA
#> 14 5 7 X1=7, X2=7, X3=6 No solution NA NA
#> 15 5 8 X1=7, X2=7, X3=6 No solution NA NA
#> 16 6 6 X1=8, X2=7, X3=6 No solution NA NA
#> 17 6 7 X1=8, X2=7, X3=6 No solution NA NA
#> 18 6 8 X1=8, X2=7, X3=6 No solution NA NA
#> 19 7 6 X1=6, X2=8, X3=6 No solution NA NA
#> 20 7 7 X1=6, X2=8, X3=6 No solution NA NA
#> 21 7 8 X1=6, X2=8, X3=6 No solution NA NA
#> 22 8 6 X1=7, X2=8, X3=6 No solution NA NA
#> 23 8 7 X1=7, X2=8, X3=6 No solution NA NA
#> 24 8 8 X1=7, X2=8, X3=6 No solution NA NA
#> 25 9 6 X1=8, X2=8, X3=6 No solution NA NA
#> 26 9 7 X1=8, X2=8, X3=6 No solution NA NA
#> 27 9 8 X1=8, X2=8, X3=6 No solution NA NA
#> 28 10 6 X1=6, X2=6, X3=7 No solution NA NA
#> 29 10 7 X1=6, X2=6, X3=7 No solution NA NA
#> 30 10 8 X1=6, X2=6, X3=7 No solution NA NA
#> 31 11 6 X1=7, X2=6, X3=7 No solution NA NA
#> 32 11 7 X1=7, X2=6, X3=7 No solution NA NA
#> 33 11 8 X1=7, X2=6, X3=7 No solution NA NA
#> 34 12 6 X1=8, X2=6, X3=7 No solution NA NA
#> 35 12 7 X1=8, X2=6, X3=7 No solution NA NA
#> 36 12 8 X1=8, X2=6, X3=7 No solution NA NA
#> 37 13 6 X1=6, X2=7, X3=7 No solution NA NA
#> 38 13 7 X1=6, X2=7, X3=7 No solution NA NA
#> 39 13 8 X1=6, X2=7, X3=7 No solution NA NA
#> 40 14 6 X1=7, X2=7, X3=7 No solution NA NA
#> 41 14 7 X1=7, X2=7, X3=7 No solution NA NA
#> 42 14 8 X1=7, X2=7, X3=7 No solution NA NA
#> 43 15 6 X1=8, X2=7, X3=7 No solution NA NA
#> 44 15 7 X1=8, X2=7, X3=7 No solution NA NA
#> 45 15 8 X1=8, X2=7, X3=7 No solution NA NA
#> 46 16 6 X1=6, X2=8, X3=7 No solution NA NA
#> 47 16 7 X1=6, X2=8, X3=7 No solution NA NA
#> 48 16 8 X1=6, X2=8, X3=7 No solution NA NA
#> 49 17 6 X1=7, X2=8, X3=7 No solution NA NA
#> 50 17 7 X1=7, X2=8, X3=7 No solution NA NA
#> 51 17 8 X1=7, X2=8, X3=7 No solution NA NA
#> 52 18 6 X1=8, X2=8, X3=7 No solution NA NA
#> 53 18 7 X1=8, X2=8, X3=7 No solution NA NA
#> 54 18 8 X1=8, X2=8, X3=7 No solution NA NA
#> 55 19 6 X1=6, X2=6, X3=8 No solution NA NA
#> 56 19 7 X1=6, X2=6, X3=8 No solution NA NA
#> 57 19 8 X1=6, X2=6, X3=8 No solution NA NA
#> 58 20 6 X1=7, X2=6, X3=8 No solution NA NA
#> 59 20 7 X1=7, X2=6, X3=8 No solution NA NA
#> 60 20 8 X1=7, X2=6, X3=8 No solution NA NA
#> 61 21 6 X1=8, X2=6, X3=8 No solution NA NA
#> 62 21 7 X1=8, X2=6, X3=8 No solution NA NA
#> 63 21 8 X1=8, X2=6, X3=8 No solution NA NA
#> 64 22 6 X1=6, X2=7, X3=8 No solution NA NA
#> 65 22 7 X1=6, X2=7, X3=8 No solution NA NA
#> 66 22 8 X1=6, X2=7, X3=8 No solution NA NA
#> 67 23 6 X1=7, X2=7, X3=8 No solution NA NA
#> 68 23 7 X1=7, X2=7, X3=8 No solution NA NA
#> 69 23 8 X1=7, X2=7, X3=8 No solution NA NA
#> 70 24 6 X1=8, X2=7, X3=8 No solution NA NA
#> 71 24 7 X1=8, X2=7, X3=8 No solution NA NA
#> 72 24 8 X1=8, X2=7, X3=8 No solution NA NA
#> 73 25 6 X1=6, X2=8, X3=8 No solution NA NA
#> 74 25 7 X1=6, X2=8, X3=8 No solution NA NA
#> 75 25 8 X1=6, X2=8, X3=8 No solution NA NA
#> 76 26 6 X1=7, X2=8, X3=8 No solution NA NA
#> 77 26 7 X1=7, X2=8, X3=8 No solution NA NA
#> 78 26 8 X1=7, X2=8, X3=8 No solution NA NA
#> 79 27 6 X1=8, X2=8, X3=8 No solution NA NA
#> 80 27 7 X1=8, X2=8, X3=8 No solution NA NA
#> 81 27 8 X1=8, X2=8, X3=8 No solution NA NAExport:
For more information on TS-QCA methodology, see:
sessionInfo()
#> R version 4.4.1 (2024-06-14 ucrt)
#> Platform: x86_64-w64-mingw32/x64
#> Running under: Windows 11 x64 (build 26200)
#>
#> Matrix products: default
#>
#>
#> locale:
#> [1] LC_COLLATE=C LC_CTYPE=Japanese_Japan.utf8
#> [3] LC_MONETARY=Japanese_Japan.utf8 LC_NUMERIC=C
#> [5] LC_TIME=Japanese_Japan.utf8
#>
#> time zone: Asia/Tokyo
#> tzcode source: internal
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] QCA_3.23 admisc_0.39 TSQCA_0.1.2
#>
#> loaded via a namespace (and not attached):
#> [1] cli_3.6.5 knitr_1.50 rlang_1.1.6 xfun_0.52
#> [5] otel_0.2.0 promises_1.5.0 shiny_1.12.1 jsonlite_2.0.0
#> [9] xtable_1.8-4 htmltools_0.5.9 httpuv_1.6.16 sass_0.4.10
#> [13] lpSolve_5.6.23 rmarkdown_2.29 evaluate_1.0.4 jquerylib_0.1.4
#> [17] fastmap_1.2.0 yaml_2.3.10 lifecycle_1.0.4 compiler_4.4.1
#> [21] Rcpp_1.1.0 rstudioapi_0.17.1 later_1.4.4 digest_0.6.39
#> [25] R6_2.6.1 magrittr_2.0.4 bslib_0.9.0 declared_0.25
#> [29] tools_4.4.1 mime_0.13 venn_1.12 cachem_1.1.0