Hi, I am trying to run code to calculate weighted prevalence for tobacco smoking from DHS dataset. I have managed to come up with the variables to using code below
MRdata <- MRdata %>%
mutate(rc_tobc_cig = case_when(
(mv464a > 0 & mv464a <= 888) | (mv464b > 0 & mv464b <= 888) | (mv464c > 0 & mv464c <= 888) |
(mv484a > 0 & mv484a <= 888) | (mv484b > 0 & mv484b <= 888) | (mv484c > 0 & mv484c <= 888) ~ 1,
TRUE ~ 0),
rc_tobc_cig = add_labels(rc_tobc_cig, labels = c("No"=0, "Yes"=1)),
rc_tobc_cig = set_label(rc_tobc_cig, label = "Smokes cigarettes"))
MRdata <- MRdata %>%
mutate(rc_tobc_other = case_when(
(mv464d > 0 & mv464d <= 888) | (mv464e > 0 & mv464e <= 888) | (mv464f > 0 & mv464f <= 888) | (mv464g > 0 & mv464g <= 888) |
(mv484d > 0 & mv484d <= 888) | (mv484e > 0 & mv484e <= 888) | (mv484f > 0 & mv484f <= 888) | (mv484g > 0 & mv484g <= 888) ~ 1,
TRUE ~ 0),
rc_tobc_other = add_labels(rc_tobc_other, labels = c("No"=0, "Yes"=1)),
rc_tobc_other = set_label(rc_tobc_other, label = "Smokes other type of tobacco"))
my challenge now is if I try run the weighted prevalence using the survey command everything is coming out with frequencies of zero. I am stuck. The survey command is below
svy_design <- svydesign(ids = ~1, strata = ~mv022, weights = ~mv005, data = MRdata)
Define the prevalence function using svytable() to handle missing values
calculate_prevalence <- function(data, variable) {
svytable(as.formula(paste("~", variable)), design = data) / sum(data$weights) * 100
}
List of tobacco variables
tobacco_vars <- c("rc_tobc_cig", "rc_tobc_other", "rc_tobc_smk_any", "rc_tobc_snuffm", "rc_tobc_snuffn", "rc_tobc_chew", "rc_tobv_betel", "rc_tobc_osmkless", "rc_tobc_anysmkless", "rc_tobc_any")
Calculate the overall weighted prevalence for each tobacco variable
prevalence_overall <- lapply(tobacco_vars, function(var) calculate_prevalence(svy_design, var))
Print the results
for (i in seq_along(prevalence_overall)) {
print(paste("Overall Weighted Prevalence for", tobacco_vars[i]))
print(prevalence_overall[[i]])
cat("\n")
}