library(Hmisc)
library(survey)
library(data.table)
library(knitr)
library(kableExtra)
Load district survey data
# df = mdb.get("~/Downloads/SADC_2017_District.MDB", tables=c('SADCQN'))
# fwrite(df, '~/Downloads/SADCQN_2017_District.csv')
dt = fread('~/Downloads/SADCQN_2017_District.csv')
svy_qn <- svydesign(id = ~PSU, weight = ~weight, strata = ~stratum,
data = dt, nest = TRUE)
Verify that I can recreate reported statistics on YRBSS website with raw data.
Will try to replicate San Diego % reported non-condom use split by whether they have had sex with same sex only, or with other sex only / both sexes. NOTE: Found that San Francisco is included on their website but not in raw data!
# non-use among those with opposite-sex partners only
svyciprop(~I(qn64 == 2), subset(svy_qn, year == 2017 & sexpart2 == 2 & sitename == "San Diego, CA (SA)"), na.rm=TRUE)
## 2.5% 97.5%
## I(qn64 == 2) 0.437 0.376 0.5
Point estimate matches but CI reported on website is slightly different. Might be due to estimation method.
# non-use among those with same-sex partners
svyciprop(~I(qn64 == 2), subset(svy_qn, year == 2017 & sexpart2 == 3 & sitename == "San Diego, CA (SA)"), na.rm=TRUE)
## 2.5% 97.5%
## I(qn64 == 2) 0.488 0.337 0.64
Point estimate matches but CI reported on website is slightly different. Might be due to estimation method.
sitenames = unique(dt$sitename)
sitenames = sitenames[order(sitenames)]
get_pct_in_sitename_w_var_val = function(site, var, val, data, yr) {
# break if no data
dt = as.data.table(data$variables)[sitename == site & year == yr]
n_responses = dt[!is.na(get(var)), .N]
if(n_responses == 0) {
return(data.table(
sitename = site,
year = yr,
variable = var,
value = val,
responses = n_responses,
proportion = NA,
lb = NA,
ub = NA
))
}
# otherwise, get results
res = svyciprop(as.formula(sprintf("~I(%s == %d)", var, val)), subset(data, year == yr & sitename == site), na.rm=TRUE)
prop = unname(res[1])
ci = unname(attr(res, "ci"))
return(data.table(
sitename = site,
year = yr,
variable = var,
value = val,
responses = n_responses,
proportion = round(prop,3),
lb = round(ci[1],3),
ub = round(ci[2],3)
))
}
rbindlist(lapply(sitenames, function(x) get_pct_in_sitename_w_var_val(x, var = 'sexid2', val = 2, data = svy_qn, yr = 2017))) %>% kable() %>% kable_styling(bootstrap_options = c("striped", "hover"))
| sitename | year | variable | value | responses | proportion | lb | ub |
|---|---|---|---|---|---|---|---|
| Borough of Bronx (NYG) | 2017 | sexid2 | 2 | 1988 | 0.116 | 0.094 | 0.142 |
| Borough of Brooklyn (NYH) | 2017 | sexid2 | 2 | 2823 | 0.093 | 0.082 | 0.106 |
| Borough of Manhattan (NYI) | 2017 | sexid2 | 2 | 2348 | 0.125 | 0.099 | 0.155 |
| Borough of Queens (NYJ) | 2017 | sexid2 | 2 | 1506 | 0.093 | 0.078 | 0.111 |
| Borough of Staten Island (NYK) | 2017 | sexid2 | 2 | 1195 | 0.101 | 0.077 | 0.130 |
| Broward County, FL (FT) | 2017 | sexid2 | 2 | 907 | 0.122 | 0.094 | 0.158 |
| Charlotte-Mecklenburg County, NC (CM) | 2017 | sexid2 | 2 | 0 | NA | NA | NA |
| Chicago, IL (CH) | 2017 | sexid2 | 2 | 1752 | 0.134 | 0.110 | 0.162 |
| Dallas, TX (DA) | 2017 | sexid2 | 2 | 0 | NA | NA | NA |
| Duval County, FL (DU) | 2017 | sexid2 | 2 | 3296 | 0.165 | 0.150 | 0.180 |
| Fort Worth, TX (FW) | 2017 | sexid2 | 2 | 3251 | 0.100 | 0.089 | 0.111 |
| Miami-Dade County, FL (MM) | 2017 | sexid2 | 2 | 2752 | 0.115 | 0.100 | 0.132 |
| Milwaukee, WI (ML) | 2017 | sexid2 | 2 | 0 | NA | NA | NA |
| New Orleans, LA (NO) | 2017 | sexid2 | 2 | 0 | NA | NA | NA |
| New York City, NY (NYC) | 2017 | sexid2 | 2 | 9860 | 0.104 | 0.095 | 0.114 |
| Orange County, FL (OL) | 2017 | sexid2 | 2 | 1321 | 0.122 | 0.102 | 0.145 |
| San Bernardino, CA (SB) | 2017 | sexid2 | 2 | 0 | NA | NA | NA |
| San Diego, CA (SA) | 2017 | sexid2 | 2 | 2420 | 0.094 | 0.078 | 0.115 |
| Seattle, WA (SE) | 2017 | sexid2 | 2 | 0 | NA | NA | NA |
rbindlist(lapply(sitenames, function(x) get_pct_in_sitename_w_var_val(x, var = 'sexpart2', val = 3, data = svy_qn, yr = 2017))) %>% kable() %>% kable_styling(bootstrap_options = c("striped", "hover"))
| sitename | year | variable | value | responses | proportion | lb | ub |
|---|---|---|---|---|---|---|---|
| Borough of Bronx (NYG) | 2017 | sexpart2 | 3 | 1612 | 0.093 | 0.071 | 0.122 |
| Borough of Brooklyn (NYH) | 2017 | sexpart2 | 3 | 2183 | 0.086 | 0.067 | 0.109 |
| Borough of Manhattan (NYI) | 2017 | sexpart2 | 3 | 1935 | 0.088 | 0.057 | 0.134 |
| Borough of Queens (NYJ) | 2017 | sexpart2 | 3 | 1189 | 0.063 | 0.048 | 0.081 |
| Borough of Staten Island (NYK) | 2017 | sexpart2 | 3 | 1037 | 0.060 | 0.046 | 0.078 |
| Broward County, FL (FT) | 2017 | sexpart2 | 3 | 836 | 0.112 | 0.085 | 0.147 |
| Charlotte-Mecklenburg County, NC (CM) | 2017 | sexpart2 | 3 | 0 | NA | NA | NA |
| Chicago, IL (CH) | 2017 | sexpart2 | 3 | 1587 | 0.093 | 0.073 | 0.118 |
| Dallas, TX (DA) | 2017 | sexpart2 | 3 | 0 | NA | NA | NA |
| Duval County, FL (DU) | 2017 | sexpart2 | 3 | 2908 | 0.156 | 0.141 | 0.173 |
| Fort Worth, TX (FW) | 2017 | sexpart2 | 3 | 2983 | 0.068 | 0.058 | 0.080 |
| Miami-Dade County, FL (MM) | 2017 | sexpart2 | 3 | 2552 | 0.098 | 0.084 | 0.114 |
| Milwaukee, WI (ML) | 2017 | sexpart2 | 3 | 0 | NA | NA | NA |
| New Orleans, LA (NO) | 2017 | sexpart2 | 3 | 0 | NA | NA | NA |
| New York City, NY (NYC) | 2017 | sexpart2 | 3 | 7956 | 0.079 | 0.069 | 0.092 |
| Orange County, FL (OL) | 2017 | sexpart2 | 3 | 1217 | 0.098 | 0.080 | 0.120 |
| San Bernardino, CA (SB) | 2017 | sexpart2 | 3 | 0 | NA | NA | NA |
| San Diego, CA (SA) | 2017 | sexpart2 | 3 | 2293 | 0.078 | 0.064 | 0.096 |
| Seattle, WA (SE) | 2017 | sexpart2 | 3 | 0 | NA | NA | NA |
rbindlist(lapply(sitenames, function(x) get_pct_in_sitename_w_var_val(x, var = 'qntransgender', val = 1, data = svy_qn, yr = 2017))) %>% kable() %>% kable_styling(bootstrap_options = c("striped", "hover"))
| sitename | year | variable | value | responses | proportion | lb | ub |
|---|---|---|---|---|---|---|---|
| Borough of Bronx (NYG) | 2017 | qntransgender | 1 | 1985 | 0.016 | 0.010 | 0.026 |
| Borough of Brooklyn (NYH) | 2017 | qntransgender | 1 | 2828 | 0.017 | 0.010 | 0.030 |
| Borough of Manhattan (NYI) | 2017 | qntransgender | 1 | 2361 | 0.012 | 0.008 | 0.019 |
| Borough of Queens (NYJ) | 2017 | qntransgender | 1 | 1507 | 0.015 | 0.009 | 0.023 |
| Borough of Staten Island (NYK) | 2017 | qntransgender | 1 | 1190 | 0.016 | 0.009 | 0.030 |
| Broward County, FL (FT) | 2017 | qntransgender | 1 | 888 | 0.033 | 0.019 | 0.057 |
| Charlotte-Mecklenburg County, NC (CM) | 2017 | qntransgender | 1 | 0 | NA | NA | NA |
| Chicago, IL (CH) | 2017 | qntransgender | 1 | 0 | NA | NA | NA |
| Dallas, TX (DA) | 2017 | qntransgender | 1 | 0 | NA | NA | NA |
| Duval County, FL (DU) | 2017 | qntransgender | 1 | 0 | NA | NA | NA |
| Fort Worth, TX (FW) | 2017 | qntransgender | 1 | 0 | NA | NA | NA |
| Miami-Dade County, FL (MM) | 2017 | qntransgender | 1 | 0 | NA | NA | NA |
| Milwaukee, WI (ML) | 2017 | qntransgender | 1 | 0 | NA | NA | NA |
| New Orleans, LA (NO) | 2017 | qntransgender | 1 | 0 | NA | NA | NA |
| New York City, NY (NYC) | 2017 | qntransgender | 1 | 9871 | 0.015 | 0.012 | 0.019 |
| Orange County, FL (OL) | 2017 | qntransgender | 1 | 0 | NA | NA | NA |
| San Bernardino, CA (SB) | 2017 | qntransgender | 1 | 0 | NA | NA | NA |
| San Diego, CA (SA) | 2017 | qntransgender | 1 | 2432 | 0.012 | 0.007 | 0.019 |
| Seattle, WA (SE) | 2017 | qntransgender | 1 | 0 | NA | NA | NA |
sort(dt[year<2017 & !is.na(sexid2), unique(sitename)])
## [1] "Borough of Bronx (NYG)"
## [2] "Borough of Brooklyn (NYH)"
## [3] "Borough of Manhattan (NYI)"
## [4] "Borough of Queens (NYJ)"
## [5] "Borough of Staten Island (NYK)"
## [6] "Broward County, FL (FT)"
## [7] "Charlotte-Mecklenburg County, NC (CM)"
## [8] "Chicago, IL (CH)"
## [9] "Duval County, FL (DU)"
## [10] "Fort Worth, TX (FW)"
## [11] "Miami-Dade County, FL (MM)"
## [12] "Milwaukee, WI (ML)"
## [13] "New York City, NY (NYC)"
## [14] "Orange County, FL (OL)"
## [15] "San Bernardino, CA (SB)"
## [16] "San Diego, CA (SA)"
## [17] "Seattle, WA (SE)"
sort(dt[year<2017 & !is.na(sexpart2), unique(sitename)])
## [1] "Borough of Bronx (NYG)" "Borough of Brooklyn (NYH)"
## [3] "Borough of Manhattan (NYI)" "Borough of Queens (NYJ)"
## [5] "Borough of Staten Island (NYK)" "Broward County, FL (FT)"
## [7] "Chicago, IL (CH)" "Duval County, FL (DU)"
## [9] "Fort Worth, TX (FW)" "Miami-Dade County, FL (MM)"
## [11] "Milwaukee, WI (ML)" "New York City, NY (NYC)"
## [13] "Orange County, FL (OL)" "San Diego, CA (SA)"
## [15] "Seattle, WA (SE)"