# Import
df <- read_excel(here("df.xlsx"))
# Remove row with "#NULL!"
df <- df %>%
filter(!if_any(everything(), ~ . == "#NULL!"))
# Numeric continuous variables
numeric_vars <- c("Age", "Duration", "Age_Difference", "Duration_Dating")
# Ordinal Likert-scale variables (1–5), others convert to factor for now
likert_vars <- c(
"Lack_Trust", "Enhance_Pleasure", "Decrease_Pleasure", "Beautiful_Girls",
"No_love", "Suggest_Use", "Morally_wrong", "Messy", "Unprotected_sex",
"Heightened_excitement", "Responsible_sexual_behaviour", "Women_perception",
"Embarrassed_Purchasing", "Confident_putting_on", "Regret_Later",
"Religion_and_Culture", "Less_masculine", "Woman_Resposibility", "Promiscuity",
"Taboo", "Personal_Choice", "Prevent_STIs", "Effective_Contraception", "Easy_Use",
"Expensive", "Easily_Available", "Poor_Quality", "Comfortable", "Dry_out",
"Breakage", "Bad_smell"
)
# Convert variables to appropriate types
df <- df %>%
mutate(
# Convert numeric vars to numeric
across(all_of(numeric_vars), ~ as.numeric(.)),
# Convert Likert vars to ordered factors
across(all_of(likert_vars), ~ factor(as.numeric(.),
levels = 1:5,
ordered = TRUE)),
# Everything else becomes unordered factor
across(-c(all_of(numeric_vars), all_of(likert_vars)), as.factor)
)
# Outcome variable and reasons for non-use
df <- df %>%
mutate(
Condom_use = as.numeric(Condom_use),
Disuse = as.numeric(Disuse)
) %>%
mutate(
Condom_use = factor(
Condom_use,
levels = c(1, 2),
labels = c("Used Condom", "Did Not Use Condom")
),
Disuse = factor(
Disuse,
levels = 1:8,
labels = c(
"Alcohol",
"Use condoms?",
"Trust partner",
"Uncomfortable",
"Did not think much about",
"Unavailable",
"Decrease pleasure",
"Never used a condom"
)
)
)
# Prepare plot data incl. percentages
cds_use <- df %>%
count(Condom_use) %>%
mutate(percent = n / sum(n) * 100) %>%
arrange(desc(n))
reason_counts <- df %>%
filter(Condom_use == "Did Not Use Condom") %>%
count(Disuse) %>%
mutate(percent = n / sum(n) * 100) %>%
arrange(desc(n))
# Plot: Condom use
ggplot(cds_use, aes(x = reorder(Condom_use, percent), y = percent)) +
geom_col(fill = "steelblue") +
geom_text(aes(label = n), # counts inside bar
hjust = 1.5, color = "white", size = 3.5) + # moved left
geom_text(aes(y = percent + 3, # percentages outside bar
label = paste0(round(percent, 1), "%")),
hjust = 0, size = 3.5) +
coord_flip() +
labs(
title = "Condom Use",
subtitle = "Among all respondents (n=93)",
x = "",
y = "Percentage displayed (count in white)"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold"),
plot.subtitle = element_text(color = "gray40")
) +
expand_limits(y = max(cds_use$percent) * 1.2)