Распределение данных из одной географии в другую - PullRequest
3 голосов
/ 07 мая 2019

У нас есть две географии: участки переписи и квадратная сетка . Набор данных сетки содержит только информацию о численности населения. У нас есть информация об общем доходе каждого переписного участка. Что мы хотели бы сделать, так это распределить эти данные о доходах из переписных участков в ячейки сетки.

Это очень распространенная проблема в географическом анализе, и, вероятно, существует множество способов ее решения. Мы хотим сделать это с учетом не только пространственного перекрытия между участками переписи и ячейками сетки, но также с учетом популяции каждой ячейки. Это главным образом для того, чтобы избежать проблем, когда существует большой переписной участок, который может содержать людей, живущих только на небольшой территории.

Ниже мы приводим воспроизводимый пример (с использованием R и пакета sf ) и решение, которое мы нашли для этой проблемы до сих пор, используя образец, который мы извлекли из наших географических регионов. Мы были бы признательны, если бы у других были альтернативные (более эффективные) решения для проверки правильности наших результатов.

library(sf)
library(dplyr)
library(readr)

# Files
download.file("https://github.com/ipeaGIT/acesso_oport/raw/master/test/shapes.RData", "shapes.RData")
load("shapes.RData")

# Open tracts and calculate area
tract <- tract %>%
  mutate(area_tract = st_area(.))

# Open grid squares and calculate area
square <- square %>%
  mutate(area_square = st_area(.))


ui <-
  # Create spatial units for all intersections between the tracts and the squares (we're calling these "piece")
  st_intersection(square, tract) %>%
  # Calculate area for each piece
  mutate(area_piece = st_area(.)) %>%
  # Compute the proportion of each tract that's inserted in that piece
  mutate(area_prop_tract = area_piece/area_tract) %>%
  # Compute the proportion of each square that's inserted in that piece
  mutate(area_prop_square =  area_piece/area_square) %>%
  # Based on the square's population, compute the population that lives in that piece
  mutate(pop_prop_square = square_pop * area_prop_square) %>%
  # Compute the population proportion of each square that is within the tract
  group_by(id_tract) %>%
  mutate(sum = sum(pop_prop_square)) %>%
  ungroup() %>%
  # Compute population of each piece whitin the tract
  mutate(pop_prop_square_in_tract =  pop_prop_square/sum) %>%
  # Compute income within each piece
  mutate(income_piece = tract_incm* pop_prop_square_in_tract)

# Final agreggation by squares
ui_fim <- ui %>%
  # Group by squares and population and sum the income for each piece
  group_by(id_square, square_pop) %>%
  summarise(square_income = sum(income_piece, na.rm = TRUE))

Спасибо!

1 Ответ

1 голос
/ 07 мая 2019

В зависимости от подхода к интерполяции, который вы хотите использовать, у меня может быть решение для вас, которое я помогал разработать. В пакете areal реализована взвешенная интерполяция, и я использую ее в своем собственном исследовании от интерполяции между географией переписи США и квадратами сетки. Вы можете проверить веб-сайт пакета (и связанные виньетки) здесь . Надеюсь, это полезно!

...