14.3 Create census rasters

The x and y from the input file correspond to a 1000 x 1000 square meter unit grid.

(input_ras <- terra::rast(input_tidy, type = "xyz", crs = "EPSG:3035"))
## class       : SpatRaster 
## dimensions  : 868, 642, 4  (nrow, ncol, nlyr)
## resolution  : 1000, 1000  (x, y)
## extent      : 4031000, 4673000, 2684000, 3552000  (xmin, xmax, ymin, ymax)
## coord. ref. : ETRS89-extended / LAEA Europe (EPSG:3035) 
## source(s)   : memory
## names       : pop, women, mean_age, hh_size 
## min values  :   1,     1,        1,       1 
## max values  :   6,     5,        5,       5
ger <- geodata::gadm(country = "DEU", level = 0, path = tempdir())

ger <- st_as_sf(terra::project(ger, crs(input_ras)))

tm_shape(input_ras) +
  tm_raster(style = "cat", palette = "GnBu", title = "Class") +
  tm_facets(nrow = 1) +
  tm_shape(ger) +
  tm_borders() +
  tm_layout(panel.labels = c("population", "women", "mean age", "household size"),
            legend.outside.size = 0.08)

The next stage is to reclassify the values of the rasters stored in input_ras in accordance with the survey mentioned above, using the terra function classify()

In the case of the population data, we convert the classes into a numeric data type using class means.

Raster cells are assumed to have a population of 127 if they have a value of 1 (the middle of the categorical bin)

The remaining variables are re-classified as weights corresponding with weights used in the survey.

Class 1 in the variable women represents areas in which 0 to 40% of the population is female; these are reclassified with a comparatively high weight of 3 because the target demographic is predominantly male. Similarly, the classes containing the youngest people and highest proportion of single households are reclassified to have high weights.

rcl_pop <- matrix(c(1, 1, 127, 2, 2, 375, 3, 3, 1250, 
                   4, 4, 3000, 5, 5, 6000, 6, 6, 8000), 
                 ncol = 3, byrow = TRUE)

rcl_women <- matrix(c(1, 1, 3, 2, 2, 2, 3, 3, 1, 4, 5, 0), 
                   ncol = 3, byrow = TRUE)

rcl_age <- matrix(c(1, 1, 3, 2, 2, 0, 3, 5, 0),
                 ncol = 3, byrow = TRUE)

rcl_hh <- rcl_women

rcl <- list(rcl_pop, rcl_women, rcl_age, rcl_hh)

reclass <- input_ras

for (i in seq_len(terra::nlyr(reclass))) {
  reclass[[i]] = terra::classify(x = reclass[[i]], rcl = rcl[[i]], right = NA)
}

names(reclass) <- names(input_ras)

reclass
## class       : SpatRaster 
## dimensions  : 868, 642, 4  (nrow, ncol, nlyr)
## resolution  : 1000, 1000  (x, y)
## extent      : 4031000, 4673000, 2684000, 3552000  (xmin, xmax, ymin, ymax)
## coord. ref. : ETRS89-extended / LAEA Europe (EPSG:3035) 
## source(s)   : memory
## names       :  pop, women, mean_age, hh_size 
## min values  :  127,     0,        0,       0 
## max values  : 8000,     3,        3,       3