I think I want to use interpolate_pw from the tidycensus R package to interpolate data from 2000 to 2010 county boundaries. The R documentation describes this as population-weighted interpolation. The documentation describes the process as:

The approach implemented here is based on Esri's data apportionment algorithm, in which an "apportionment layer" of points (referred to here as the weights) is used to determine how to weight areas of overlap between origin and target zones. Users must supply a "from" dataset as an sf object (the dataset from which numeric columns will be interpolated) and a "to" dataset, also of class sf, that contains the target zones. A third sf object, the "weights", may be an object of geometry type POINT or polygons from which points will be derived using sf::st_point_on_surface().

An intersection is computed between from and to, and a spatial join is computed between the intersection layer and the weights layer, represented as points. A specified weight_column in weights will be used to determine the relative influence of each point on the allocation of values between from and to; if no weight column is specified, all points will be weighted equally.

The extensive parameter (logical) should reflect the values being interpolated correctly. If TRUE, the function returns a weighted sum for each zone. If FALSE, a weighted mean will be returned. For Census data, extensive = TRUE should be used for transferring counts / estimated counts between zones. Derived metrics (e.g. population density, percentages, etc.) should use extensive = FALSE. Margins of error in the ACS will not be transferred correctly with this function, so please use with caution.

However, I read in this article (Hallisey et al. 2017) that combined population-areal weighting is best. This article describes this process as:

enter image description here

Combined population and areal weighting. The geographic area of the tract within the zone, the areal weight (A zt /A t ), is multiplied by population-weighted mortality estimate for the tract (E mt ). The output for each tract is then summed to estimate the number of deaths for the zone. We demonstrate, in this example, how estimates for portions of zones A and B are calculated. Note: As illustrated in Figs. 3 and 4, except for two counties, with two deaths each, the remaining counties within zones A and B recorded zero deaths for the population of interest; to simplify the illustration, we omitted counties with zero deaths. Also, because we show only portions of zones A and B, the estimates are technically only a portion of M z for zones A and B

In the interpoalte_pw, I use population counts at the block level to weight the data when interpolating. From my understanding, that should count as population-areal weighting per the Hallisey article, however they specifically call it population-weighting in the R documentation. What differentiates the process happening in interpolate_pw from the process described in Hallisey?

  • 2
    One question per Question, please, as per the Tour.
    – Vince
    Commented Feb 3, 2023 at 22:07
  • Where does interpolate_pw come from? What package? What does it say it does? Where do you get your definitions of (A) and (B) from? (A) is based on an assumption of uniform population density over tracts, (B) over uniform density of counties. Maybe you don't have tract pops and can't do (A)?
    – Spacedman
    Commented Feb 7, 2023 at 9:25
  • I will rewrite the question to hopefully make more sense
    – tchoup
    Commented Feb 7, 2023 at 16:57
  • Have you looked at ESRI's description of the algorithm? pro.arcgis.com/en/pro-app/latest/help/analysis/business-analyst/… Commented Feb 7, 2023 at 19:34

1 Answer 1


The algorithm works as described in the Esri docs. If you want a more detailed explanation with images and examples, I'd encourage you to read this section of my book: https://walker-data.com/census-r/spatial-analysis-with-us-census-data.html#small-area-time-series-analysis

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.