Skip to contents

Generates a Venn Diagram and an Upset diagram from selected categorical variables. This function converts specified variables to logical values based on a chosen "true" level. Two visual outputs are produced: a Venn diagram (via ggvenn) and an Upset plot (via UpSetR or ComplexUpset). Additionally, a summary table of "true" counts for each variable is provided.

ComplexUpset features include advanced styling, statistical annotations, custom sorting, and enhanced theming options for publication-ready figures.

Value

The function produces a Venn diagram and an Upset diagram.

Super classes

jmvcore::Analysis -> ClinicoPath::vennBase -> vennClass

Examples

if (FALSE) { # \dontrun{
# Example 1: Basic 2-variable Venn diagram
data("mtcars")
mtcars$vs <- factor(mtcars$vs, levels = c(0, 1), labels = c("V-shaped", "Straight"))
mtcars$am <- factor(mtcars$am, levels = c(0, 1), labels = c("Automatic", "Manual"))

# Create Venn diagram showing overlap between V-shaped engines and Manual transmission
venn(data = mtcars, var1 = "vs", var1true = "V-shaped",
     var2 = "am", var2true = "Manual")

# Example 2: 3-variable Venn diagram with penguins data
library(palmerpenguins)
data("penguins")
penguins$large_bill <- factor(ifelse(penguins$bill_length_mm > 45, "Large", "Small"))
penguins$heavy_weight <- factor(ifelse(penguins$body_mass_g > 4000, "Heavy", "Light"))
penguins$adelie_species <- factor(ifelse(penguins$species == "Adelie", "Adelie", "Other"))

venn(data = penguins,
     var1 = "large_bill", var1true = "Large",
     var2 = "heavy_weight", var2true = "Heavy",
     var3 = "adelie_species", var3true = "Adelie")

# Example 3: Variable names with spaces and numbers (requires careful handling)
# jamovi GUI automatically handles most problematic names
# When calling directly in R, variable names with spaces/numbers need backticks:
# venn(data = mydata, var1 = "`Rater 1`", var1true = "Positive",
#      var2 = "`Score 2A`", var2true = "High")

# Note: Names like "Rater 1", "Score 2A", "Item 3B" may cause parsing issues
# at the jamovi interface level. Solutions:
# 1. Use jamovi GUI for variable selection (recommended)
# 2. Rename variables to avoid spaces + numbers: "Rater1", "Score2A", "Item3B"
# 3. In R console, use backticks: `Rater 1` or quote properly

# Example 4: Clinical biomarker analysis
data("biomarkers")  # Hypothetical clinical dataset
venn(data = biomarkers,
     var1 = "ER_positive", var1true = "Positive",
     var2 = "PR_positive", var2true = "Positive",
     var3 = "HER2_amplified", var3true = "Amplified",
     show_ggVennDiagram = TRUE,
     regionLabels = "both",
     clinicalSummary = TRUE)

# Example 5: Medical/Clinical comorbidity analysis
# Create sample clinical data
clinical_data <- data.frame(
  patient_id = 1:100,
  diabetes = sample(c("Yes", "No"), 100, replace = TRUE, prob = c(0.3, 0.7)),
  hypertension = sample(c("Yes", "No"), 100, replace = TRUE, prob = c(0.4, 0.6)),
  obesity = sample(c("Yes", "No"), 100, replace = TRUE, prob = c(0.25, 0.75))
)

# Analyze comorbidity patterns
venn(data = clinical_data,
     var1 = "diabetes", var1true = "Yes",
     var2 = "hypertension", var2true = "Yes",
     var3 = "obesity", var3true = "Yes")

# Example 4: Using ComplexUpset for advanced features
venn(data = clinical_data,
     var1 = "diabetes", var1true = "Yes",
     var2 = "hypertension", var2true = "Yes",
     var3 = "obesity", var3true = "Yes",
     show_complexUpset = TRUE,
     sortBy = "freq",
     minSize = 5,
     showAnnotations = TRUE)

# Example 5: Advanced customization using ggVennDiagram
venn(data = clinical_data,
     var1 = "diabetes", var1true = "Yes",
     var2 = "hypertension", var2true = "Yes",
     var3 = "obesity", var3true = "Yes",
     show_ggVennDiagram = TRUE,
     regionLabels = "both",
     colorPalette = "Set1",
     labelSize = 3.5,
     setNameSize = 4.5)

# Example 6: 5-variable Venn diagram using ggVennDiagram
# Add more clinical variables
clinical_data$smoking <- sample(c("Yes", "No"), 100, replace = TRUE, prob = c(0.2, 0.8))
clinical_data$family_history <- sample(c("Yes", "No"), 100, replace = TRUE, prob = c(0.35, 0.65))

venn(data = clinical_data,
     var1 = "diabetes", var1true = "Yes",
     var2 = "hypertension", var2true = "Yes",
     var3 = "obesity", var3true = "Yes",
     var4 = "smoking", var4true = "Yes",
     var5 = "family_history", var5true = "Yes",
     show_ggVennDiagram = TRUE,
     regionLabels = "percent",
     colorPalette = "viridis")
} # }