From 7e4faf3042dff53d9386f1227e686e842c962028 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 4 Nov 2026 17:52:07 +0000 Subject: [PATCH] docs: a sheriff-contract city is not a real zero for Police (#80) The coverage docs said a city that contracts policing to the county sheriff has no Police rows and that its Police spending "is a real zero". Checked against the published corpus (build of 2026-10-26) through the public API for 34 cities with documented sheriff contracts (Los Angeles, San Diego and Orange counties, CA; King County, WA) in FY2012, FY2017 and FY2022: all 102 city-years carry Police spending. 93 have direct Police rows (E62/F62/G62) and so count as reporting. The other nine report the contract payment only as intergovernmental Police expenditure (M62), which the "primary" and "direct" concepts leave out, so they land among the collected governments with no Police rows while paying for policing. The vignette's three-group list, the n_units_collected and n_units_reporting bullets in cog_peer_compare(), cog_geographic_rollup() and .coverage_table(), and the FY2022 Georgia paragraphs now say that a collected government with no rows in a category can still spend on it, and that a contract city lands in that group only when it reports no direct Police spending. man/ regenerated with roxygen2 7.3.3. No code changed. Closes #80 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qbe6u2h83wgZdTgJgE4Xh5 --- R/coverage.R | 20 ++++++++++++-------- R/peers.R | 24 +++++++++++++++--------- R/rollup.R | 24 +++++++++++++++--------- man/cog_geographic_rollup.Rd | 24 +++++++++++++++--------- man/cog_peer_compare.Rd | 24 +++++++++++++++--------- vignettes/coverage-counters.Rmd | 21 +++++++++++++++++---- 6 files changed, 89 insertions(+), 48 deletions(-) diff --git a/R/coverage.R b/R/coverage.R index 516bd25..3f18fb1 100644 --- a/R/coverage.R +++ b/R/coverage.R @@ -93,17 +93,21 @@ #' that year, in ANY category. This is a statement about survey collection, #' independent of what was asked for: "of the governments you named, how #' many did Census actually collect data from this year?" It separates -#' sampling (not collected) from real zeros (collected but spends nothing -#' in your category). +#' sampling (not collected) from collected governments with no rows in +#' your category. #' * `n_units_reporting` -- how many of those appear with rows for the -#' SPECIFIC category you requested. This is always <= n_units_collected: -#' a government can be collected but have no rows for "Police" because it -#' contracts policing to the county sheriff, not because it wasn't -#' surveyed. +#' SPECIFIC category you requested. This is always <= n_units_collected. +#' A collected government can have no "Police" rows and still pay for +#' policing: the rows leave out intergovernmental expenditure, so a city +#' that pays the county sheriff and reports the payment as +#' intergovernmental (code `M62`) has none. Of 34 cities with documented +#' sheriff contracts, nine of 102 city-years (FY2012, FY2017 and FY2022; +#' corpus build of 2026-10-26) looked like this, and the other 93 reported +#' direct Police spending (uscogdata#80). #' #' `n_units_reporting` therefore conflates two very different things: a unit -#' that was not collected (sampling) and a unit that was collected but spends -#' nothing in that category. The ratio n_units_collected / n_units_expected is +#' that was not collected (sampling) and a unit that was collected but has no +#' rows in that category, which need not mean it spends nothing there. The ratio n_units_collected / n_units_expected is #' the true collection rate; n_units_reporting / n_units_collected measures #' category participation among collected units. #' diff --git a/R/peers.R b/R/peers.R index a4dc888..3b4f762 100644 --- a/R/peers.R +++ b/R/peers.R @@ -247,24 +247,30 @@ cog_find_peers <- function(target_govid, #' #' * `n_units_expected` -- how many governments you asked about. #' * `n_units_collected` -- how many of those appear in the corpus at all -#' that year (in ANY category), separating sampling from real zeros. +#' that year (in ANY category), separating governments Census did not +#' collect from governments it did. #' * `n_units_reporting` -- how many have rows for the SPECIFIC category you -#' requested. This is always <= n_units_collected: a government can be -#' collected but have no rows for "Police" because it contracts policing -#' to the county sheriff, not because it wasn't surveyed. +#' requested. This is always <= n_units_collected. A collected government +#' can have no "Police" rows and still pay for policing: the rows leave out +#' intergovernmental expenditure, so a city that pays the county sheriff +#' and reports the payment as intergovernmental (code `M62`) has none. Of +#' 34 cities with documented sheriff contracts, nine of 102 city-years +#' (FY2012, FY2017 and FY2022; corpus build of 2026-10-26) looked like +#' this, and the other 93 reported direct Police spending. #' #' **`n_units_reporting` is category-conditional** and therefore **not a #' response rate**: `n_units_reporting / n_units_expected` conflates sampling -#' (never collected) with real zeros (collected but spends nothing in your -#' category). Use `n_units_collected / n_units_expected` for the true +#' (never collected) with collected governments that have no rows in your +#' category. Use `n_units_collected / n_units_expected` for the true #' collection rate, and `n_units_reporting / n_units_collected` for category #' participation among collected units. #' #' In FY2022, a census year, 393 of Georgia's 567 cities report #' `category = "Police"`. Of the other 174, 32 were not collected and 142 were -#' collected with no Police rows. Contracting policing to the county sheriff is -#' one reason a city lands in the second group; the counters do not say how many -#' of the 142 do. +#' collected with no Police rows. A city that contracts with the county sheriff +#' lands in the second group only when it reports no direct Police spending, for +#' example when it files the payment as intergovernmental expenditure; the +#' counters do not say how many of the 142 do. #' #' A census year and a sample year collect different sets of governments, so #' participation across the two mixes a change in which governments were diff --git a/R/rollup.R b/R/rollup.R index aa1b6bb..ac9e068 100644 --- a/R/rollup.R +++ b/R/rollup.R @@ -67,24 +67,30 @@ #' #' * `n_units_expected` -- how many governments you asked about. #' * `n_units_collected` -- how many of those appear in the corpus at all -#' that year (in ANY category), separating sampling from real zeros. +#' that year (in ANY category), separating governments Census did not +#' collect from governments it did. #' * `n_units_reporting` -- how many have rows for the SPECIFIC category you -#' requested. This is always <= n_units_collected: a government can be -#' collected but have no rows for "Police" because it contracts policing -#' to the county sheriff, not because it wasn't surveyed. +#' requested. This is always <= n_units_collected. A collected government +#' can have no "Police" rows and still pay for policing: the rows leave out +#' intergovernmental expenditure, so a city that pays the county sheriff +#' and reports the payment as intergovernmental (code `M62`) has none. Of +#' 34 cities with documented sheriff contracts, nine of 102 city-years +#' (FY2012, FY2017 and FY2022; corpus build of 2026-10-26) looked like +#' this, and the other 93 reported direct Police spending. #' #' **`n_units_reporting` is category-conditional** and therefore **not a #' response rate**: `n_units_reporting / n_units_expected` conflates sampling -#' (never collected) with real zeros (collected but spends nothing in your -#' category). Use `n_units_collected / n_units_expected` for the true +#' (never collected) with collected governments that have no rows in your +#' category. Use `n_units_collected / n_units_expected` for the true #' collection rate, and `n_units_reporting / n_units_collected` for category #' participation among collected units. #' #' In FY2022, a census year, 393 of Georgia's 567 cities report #' `category = "Police"`. Of the other 174, 32 were not collected and 142 were -#' collected with no Police rows. Contracting policing to the county sheriff is -#' one reason a city lands in the second group; the counters do not say how many -#' of the 142 do. +#' collected with no Police rows. A city that contracts with the county sheriff +#' lands in the second group only when it reports no direct Police spending, for +#' example when it files the payment as intergovernmental expenditure; the +#' counters do not say how many of the 142 do. #' #' A census year and a sample year collect different sets of governments, so #' participation across the two mixes a change in which governments were diff --git a/man/cog_geographic_rollup.Rd b/man/cog_geographic_rollup.Rd index e1191ea..aa38128 100644 --- a/man/cog_geographic_rollup.Rd +++ b/man/cog_geographic_rollup.Rd @@ -92,24 +92,30 @@ by design — see `vignette('population-denominators')`. * `n_units_expected` -- how many governments you asked about. * `n_units_collected` -- how many of those appear in the corpus at all - that year (in ANY category), separating sampling from real zeros. + that year (in ANY category), separating governments Census did not + collect from governments it did. * `n_units_reporting` -- how many have rows for the SPECIFIC category you - requested. This is always <= n_units_collected: a government can be - collected but have no rows for "Police" because it contracts policing - to the county sheriff, not because it wasn't surveyed. + requested. This is always <= n_units_collected. A collected government + can have no "Police" rows and still pay for policing: the rows leave out + intergovernmental expenditure, so a city that pays the county sheriff + and reports the payment as intergovernmental (code `M62`) has none. Of + 34 cities with documented sheriff contracts, nine of 102 city-years + (FY2012, FY2017 and FY2022; corpus build of 2026-10-26) looked like + this, and the other 93 reported direct Police spending. **`n_units_reporting` is category-conditional** and therefore **not a response rate**: `n_units_reporting / n_units_expected` conflates sampling -(never collected) with real zeros (collected but spends nothing in your -category). Use `n_units_collected / n_units_expected` for the true +(never collected) with collected governments that have no rows in your +category. Use `n_units_collected / n_units_expected` for the true collection rate, and `n_units_reporting / n_units_collected` for category participation among collected units. In FY2022, a census year, 393 of Georgia's 567 cities report `category = "Police"`. Of the other 174, 32 were not collected and 142 were -collected with no Police rows. Contracting policing to the county sheriff is -one reason a city lands in the second group; the counters do not say how many -of the 142 do. +collected with no Police rows. A city that contracts with the county sheriff +lands in the second group only when it reports no direct Police spending, for +example when it files the payment as intergovernmental expenditure; the +counters do not say how many of the 142 do. A census year and a sample year collect different sets of governments, so participation across the two mixes a change in which governments were diff --git a/man/cog_peer_compare.Rd b/man/cog_peer_compare.Rd index b02c708..1c5d4c8 100644 --- a/man/cog_peer_compare.Rd +++ b/man/cog_peer_compare.Rd @@ -115,24 +115,30 @@ them. * `n_units_expected` -- how many governments you asked about. * `n_units_collected` -- how many of those appear in the corpus at all - that year (in ANY category), separating sampling from real zeros. + that year (in ANY category), separating governments Census did not + collect from governments it did. * `n_units_reporting` -- how many have rows for the SPECIFIC category you - requested. This is always <= n_units_collected: a government can be - collected but have no rows for "Police" because it contracts policing - to the county sheriff, not because it wasn't surveyed. + requested. This is always <= n_units_collected. A collected government + can have no "Police" rows and still pay for policing: the rows leave out + intergovernmental expenditure, so a city that pays the county sheriff + and reports the payment as intergovernmental (code `M62`) has none. Of + 34 cities with documented sheriff contracts, nine of 102 city-years + (FY2012, FY2017 and FY2022; corpus build of 2026-10-26) looked like + this, and the other 93 reported direct Police spending. **`n_units_reporting` is category-conditional** and therefore **not a response rate**: `n_units_reporting / n_units_expected` conflates sampling -(never collected) with real zeros (collected but spends nothing in your -category). Use `n_units_collected / n_units_expected` for the true +(never collected) with collected governments that have no rows in your +category. Use `n_units_collected / n_units_expected` for the true collection rate, and `n_units_reporting / n_units_collected` for category participation among collected units. In FY2022, a census year, 393 of Georgia's 567 cities report `category = "Police"`. Of the other 174, 32 were not collected and 142 were -collected with no Police rows. Contracting policing to the county sheriff is -one reason a city lands in the second group; the counters do not say how many -of the 142 do. +collected with no Police rows. A city that contracts with the county sheriff +lands in the second group only when it reports no direct Police spending, for +example when it files the payment as intergovernmental expenditure; the +counters do not say how many of the 142 do. A census year and a sample year collect different sets of governments, so participation across the two mixes a change in which governments were diff --git a/vignettes/coverage-counters.Rmd b/vignettes/coverage-counters.Rmd index a3ef1c2..1f591d1 100644 --- a/vignettes/coverage-counters.Rmd +++ b/vignettes/coverage-counters.Rmd @@ -71,13 +71,25 @@ The counters split the governments you named into three groups each year: in years ending in 2 or 7 and from a sample in other years, so in a sample year this group includes every government outside that year's sample. 2. `n_units_collected - n_units_reporting` governments were collected that year but - have no rows in your category. A city that contracts its policing to the county - sheriff lands here for `category = "Police"`. Its Police spending is a real zero. + have no rows in your category. The rows come from the concept you asked for, and + the default `"primary"` concept leaves out intergovernmental expenditure. A city + that pays the county sheriff to police it and reports the payment as + intergovernmental expenditure lands here for `category = "Police"`, although it + spends money on policing. 3. `n_units_reporting` governments have rows in your category. A government in the first group and a government in the second group look the same in the result: neither has a row. Only `n_units_collected` tells them apart. +A government in the second group does not necessarily spend nothing in your category. +The published corpus, as of its 2026-10-26 build, has Police spending for every one of +34 cities with documented county sheriff contracts in California and Washington, in +each of FY2012, FY2017 and FY2022. In 93 of those 102 city-years the city reports +direct Police spending and counts as reporting. In the other nine it reports the +payment only as intergovernmental Police expenditure, code `M62`, and lands in the +second group. For a single government, `cog_spending()` with +`expenditure_concept = "total"` adds the intergovernmental rows. + # Georgia cities and Police spending Build the list of Georgia cities with `cog_gov_search()` and roll their Police @@ -216,8 +228,9 @@ attr(police_2022, "provenance")$coverage On the published corpus, as of its 2026-10-26 build, the chunk returns 567 expected, 535 collected and 393 reporting. The 174 cities without Police rows split into 32 that Census did not collect and 142 that were collected and have no Police rows. -Contracting policing to the county sheriff is one reason a city lands in the second -group; the counters do not say how many of the 142 do. +A city that contracts with the county sheriff lands in the second group only when it +reports no direct Police spending, for example when it files the payment as +intergovernmental expenditure. The counters do not say how many of the 142 do. # Peer comparisons count peers only