## ----include=FALSE------------------------------------------------------------ knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----------------------------------------------------------------------------- library(TSQCA) library(QCA) ## ----------------------------------------------------------------------------- # Adjust the file name as needed library(TSQCA) data("sample_data") dat <- sample_data # Outcome and conditions outcome <- "Y" conditions <- c("X1", "X2", "X3") # Quick inspection str(dat) summary(dat) ## ----------------------------------------------------------------------------- thrY_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 ## ----------------------------------------------------------------------------- # Example: Three solution types at single threshold thrX <- c(X1 = 7, X2 = 7, X3 = 7) # Complex (default) res_comp <- otSweep(dat, "Y", c("X1", "X2", "X3"), sweep_range = 7, thrX = thrX) cat("Complex:", res_comp$summary$expression, "\n") # Parsimonious res_pars <- otSweep(dat, "Y", c("X1", "X2", "X3"), sweep_range = 7, thrX = thrX, include = "?") cat("Parsimonious:", res_pars$summary$expression, "\n") # Intermediate res_int <- otSweep(dat, "Y", c("X1", "X2", "X3"), sweep_range = 7, thrX = thrX, include = "?", dir.exp = c(1, 1, 1)) cat("Intermediate:", res_int$summary$expression, "\n") ## ----error=TRUE--------------------------------------------------------------- try({ 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) # Default: Complex solution (include = "", dir.exp = NULL) res_cts <- ctSweepS( dat = dat, outcome = "Y", conditions = c("X1", "X2", "X3"), sweep_var = "X3", sweep_range = 6:9, thrY = 7, thrX_default = 7, return_details = TRUE ) summary(res_cts) }) ## ----error=TRUE--------------------------------------------------------------- try({ # Intermediate solution: specify include = "?" and dir.exp res_cts_int <- ctSweepS( dat = dat, outcome = "Y", conditions = c("X1", "X2", "X3"), sweep_var = "X3", sweep_range = 6:9, thrY = 7, thrX_default = 7, include = "?", dir.exp = c(1, 1, 1), return_details = TRUE ) summary(res_cts_int) }) ## ----eval=FALSE--------------------------------------------------------------- # write.csv(res_cts$summary, file = "TSQCA_CTS_results.csv", row.names = FALSE) ## ----error=TRUE--------------------------------------------------------------- try({ # Create a sweep list specifying thresholds for each condition sweep_list <- list( X1 = 6:7, X2 = 6:7, X3 = 6:7 ) # Default: Complex solution res_mcts <- ctSweepM( dat = dat, outcome = "Y", conditions = c("X1", "X2", "X3"), sweep_list = sweep_list, thrY = 7, return_details = TRUE ) summary(res_mcts) }) ## ----error=TRUE--------------------------------------------------------------- try({ # Intermediate solution: specify include = "?" and dir.exp res_mcts_int <- ctSweepM( dat = dat, outcome = "Y", conditions = c("X1", "X2", "X3"), sweep_list = sweep_list, thrY = 7, include = "?", dir.exp = c(1, 1, 1), return_details = TRUE ) summary(res_mcts_int) }) ## ----eval=FALSE--------------------------------------------------------------- # write.csv(res_mcts$summary, file = "TSQCA_MCTS_results.csv", row.names = FALSE) ## ----------------------------------------------------------------------------- sweep_range_ots <- 6:8 # Default: Complex solution res_ots <- otSweep( dat = dat, outcome = "Y", conditions = c("X1", "X2", "X3"), sweep_range = sweep_range_ots, thrX = thrX_vec, return_details = TRUE ) summary(res_ots) ## ----------------------------------------------------------------------------- # Intermediate solution: specify include = "?" and dir.exp res_ots_int <- otSweep( dat = dat, outcome = "Y", conditions = c("X1", "X2", "X3"), sweep_range = sweep_range_ots, thrX = thrX_vec, include = "?", dir.exp = c(1, 1, 1), return_details = TRUE ) summary(res_ots_int) ## ----eval=FALSE--------------------------------------------------------------- # write.csv(res_ots$summary, file = "TSQCA_OTS_results.csv", row.names = FALSE) ## ----------------------------------------------------------------------------- sweep_list_dts_X <- list( X1 = 6:7, X2 = 6:7, X3 = 6:7 ) sweep_range_dts_Y <- 6:7 # Default: Complex solution res_dts <- dtSweep( dat = dat, outcome = "Y", conditions = c("X1", "X2", "X3"), sweep_list_X = sweep_list_dts_X, sweep_range_Y = sweep_range_dts_Y, dir.exp = c(1, 1, 1), return_details = TRUE ) summary(res_dts) ## ----------------------------------------------------------------------------- # Intermediate solution: specify include = "?" and dir.exp res_dts_int <- dtSweep( dat = dat, outcome = "Y", conditions = c("X1", "X2", "X3"), sweep_list_X = sweep_list_dts_X, sweep_range_Y = sweep_range_dts_Y, include = "?", dir.exp = c(1, 1, 1), return_details = TRUE ) summary(res_dts_int) ## ----eval=FALSE--------------------------------------------------------------- # write.csv(res_dts$summary, file = "TSQCA_DTS_results.csv", row.names = FALSE) ## ----eval=FALSE--------------------------------------------------------------- # res_all <- otSweep( # dat = dat, # outcome = "Y", # conditions = c("X1", "X2", "X3"), # sweep_range = 6:8, # thrX = thrX_vec, # include = "?", # Include logical remainders # dir.exp = c(1, 1, 1), # Intermediate solution # extract_mode = "all", # return_details = TRUE # ) # # # View results with n_solutions column # head(res_all$summary) ## ----eval=FALSE--------------------------------------------------------------- # res_essential <- otSweep( # dat = dat, # outcome = "Y", # conditions = c("X1", "X2", "X3"), # sweep_range = 6:8, # thrX = thrX_vec, # include = "?", # Include logical remainders # dir.exp = c(1, 1, 1), # Intermediate solution # extract_mode = "essential", # return_details = TRUE # ) # # # View results with essential prime implicants, selective terms, and unique terms # head(res_essential$summary) ## ----eval=FALSE--------------------------------------------------------------- # generate_report(res_ots, "TSQCA_OTS_report_full.md", dat = dat, format = "full") ## ----eval=FALSE--------------------------------------------------------------- # generate_report(res_ots, "TSQCA_OTS_report_simple.md", dat = dat, format = "simple") ## ----eval=FALSE--------------------------------------------------------------- # # Standard: conditions for Y >= threshold (intermediate solution) # res_Y <- otSweep( # dat = dat, # outcome = "Y", # conditions = c("X1", "X2", "X3"), # sweep_range = 6:8, # thrX = thrX_vec, # include = "?", # Include logical remainders # dir.exp = c(1, 1, 1) # Intermediate solution # ) # # # Negated: conditions for Y < threshold (intermediate solution) # res_negY <- otSweep( # dat = dat, # outcome = "~Y", # conditions = c("X1", "X2", "X3"), # sweep_range = 6:8, # thrX = thrX_vec, # include = "?", # Include logical remainders # dir.exp = c(1, 1, 1) # Intermediate solution # ) # # # Compare results # res_Y$summary # res_negY$summary # # # Check negation flag # res_negY$params$negate_outcome # # [1] TRUE ## ----eval=FALSE--------------------------------------------------------------- # # View stored parameters # res_ots$params # # # Example output: # # $outcome # # [1] "Y" # # $conditions # # [1] "X1" "X2" "X3" # # $thrX # # X1 X2 X3 # # 7 7 7 # # $incl.cut # # [1] 0.8 # # $n.cut # # [1] 1 # # $pri.cut # # [1] 0 ## ----------------------------------------------------------------------------- # From path strings paths <- c("A*B*~C", "A*D") chart <- config_chart_from_paths(paths) cat(chart) ## ----eval=FALSE--------------------------------------------------------------- # # Charts are included by default # generate_report(result, "report.md", dat = dat, format = "full") # # # Use LaTeX symbols for academic papers # generate_report(result, "report.md", dat = dat, chart_symbol_set = "latex") ## ----eval=FALSE--------------------------------------------------------------- # # Requires: include = "?", dir.exp specified, return_details = TRUE # # res_ots_int was created in Section 6 above. # # res_fiss <- compute_fiss_core( # res_ots_int, # conditions = c("X1", "X2", "X3") # ) # # # Inspect available thresholds # names(res_fiss$fiss_core) ## ----eval=FALSE--------------------------------------------------------------- # # English # print_fiss_summary(res_fiss, thr_key = "7") # # # Japanese # print_fiss_summary(res_fiss, thr_key = "7", language = "ja") ## ----eval=FALSE--------------------------------------------------------------- # # Unicode (Markdown / screen) # cat(generate_fiss_chart(res_fiss, symbol_set = "unicode")) # # # LaTeX (for PDF/journal submission) # cat(generate_fiss_chart(res_fiss, symbol_set = "latex")) # # # ASCII (maximum compatibility) # cat(generate_fiss_chart(res_fiss, symbol_set = "ascii")) ## ----eval=FALSE--------------------------------------------------------------- # # Full report with Fiss four-symbol charts # generate_report( # res_fiss, # output_file = "TSQCA_Fiss_report.md", # format = "full", # dat = dat, # include_fiss_core = TRUE, # activates four-symbol charts # chart_symbol_set = "unicode", # include_raw_output = TRUE # ) ## ----eval=FALSE--------------------------------------------------------------- # # Access raw classification data frame for a given threshold # classif_7 <- res_fiss$fiss_core[["7"]]$classification # classif_7 # # # Filter core conditions only # classif_7[classif_7$type == "core" & classif_7$status != "dontcare", ] # # # Filter peripheral conditions only # classif_7[classif_7$type == "peripheral" & classif_7$status != "dontcare", ] # # # Parsimonious and intermediate expressions # res_fiss$fiss_core[["7"]]$parsim_expression # res_fiss$fiss_core[["7"]]$interm_expression ## ----------------------------------------------------------------------------- sessionInfo()