The fate of young families in Vancouver is a frequent news topic. And as Vancouver is growing it is important to understand how families navigate the sometime challenging environment and what choices and compromises they make.
So we decided to take a closer look at where families and their children live in Vancouver over the last decade and how they fit into the rest of Vancouver. I had most of scripts already assembled over the long weekend to provide some data for a story by Mike Hager, so I decided to tidy things up and add some visuals. Using our new
cancensus R package this blog post is an R notebook that can be found in the github repo of this blog, which makes the analysis fully reproducible and easily adaptable to e.g. re-run it for other regions.
As we can see in the graphs, the total number of children in the City of Vancouver declined between each of the census periods. But that trend has reversed in the central areas, here taken to be the area west of Victoria, north of 16th and east of Trafalgar. Quite remarkably, in the central area even the share of children in the population increased 2011-2016, contrary to the national trend. Overall, the share of children in the central areas is still lower than in the outlying areas, but they are moving in opposite directions.
Exploring the data
CensusMapper is a great tool for exploratory analysis. Let’s get a quick overview over how the landscape of children and young families is changing.First up, the change in under 15 year olds between the 2011 and 2016 censuses in the Vancouver area, shown as the percentage change in the total number on the left and the percentage point change as a share of the total population on the right.
As expected, population change is a strong confounding variable. For example, Surrey saw in overall increase in the number of children whereas the City of Vancouver experienced a slight drop, but the share of children in the total population dropped more in Surrey than it did in Vancouver. Both views address different questions.
Next we can look at where young families with children live, where we call families “young” if the older parent is below 40 years old.
This captures the geographic split of families with children at home by age of the older parent, and we can clearly see how young families are much more prevalent in the central areas and the skytrain corridors, with another cluster further out in Langley.
This sets the stage for a deeper dive into the data on children under 15 in the City of Vancouver.
cancensus for more detailed analysis
Let’s load the relevant census numbers,
cancensus makes this easy, although we are hiding some prep work for clarity in this post, download the R notebook for full details.
library(cancensus) regions <- list(CSD="5915022") age_groups=c("0-4","5-9","10-14") data_2016 <- get_census(dataset='CA16', regions=regions, vectors=vectors_2016, level='CT', labels = 'short', geo_format="sf", quiet = TRUE) %>% prep_2016 data_2011 <- get_census(dataset='CA11', regions=regions, vectors=vectors_2011, level='CT', labels = 'short', geo_format="sf", quiet = TRUE) %>% prep_2011 data_2006 <- get_census(dataset='CA06', regions=regions, vectors=vectors_2006, level='CT', labels = 'short', geo_format="sf", quiet = TRUE) %>% prep_2006 # and all into one data frame vs=c("Population","0-4","5-9","10-14","0-14","year","central","GeoUID") data=rbind(rbind(data_2016 %>% select(vs), data_2011 %>% select(vs)), data_2006 %>% select(vs))
Of note here is that the 2011 data has one CT with suppressed data on the number of children. There are several routes we can take moving forward, we could set the NA numbers to zero, we could exclude the offending CT from the analysis or we could estimate the number of children from the overall City of Vancouver counts. There is no perfect answer to this, for the purpose of our analysis that separates different regions within CoV we think it’s best to omit the CT.
Let’s inspect the number of children in the offending CT to get an idea how it will effect our analysis and define a convenience function that drops it from the analysis if needed.
# Check to make sure we got good data for all regions (we don't for in 2011) na_rows <- data %>% as.data.frame %>% filter(is.na(`0-4`) | is.na(`5-9`) | is.na(`10-14`)) %>% select(c("GeoUID","year",age_groups)) all_na <- na_rows %>%pull("GeoUID") data[data$GeoUID %in% all_na,] %>% as.data.frame %>% select(c("year",age_groups, "0-14")) ## year 0-4 5-9 10-14 0-14 ## 1 2016 65 50 60 180 ## 2 2011 NA NA NA NA ## 3 2006 75 75 55 205 data <- data %>% filter(!data$GeoUID %in% all_na)
We see that there aren’t many kids in this census tract, and there is not much movement in the total numbers between 2006 and 2016. Excluding this CT will not have much impact on the overall analysis.
This can serve as a good reminder that census numbers are just estimates, the relevant global response rate for the City of Vancouver has been around 5% for all three censuses. That’s pretty good, but the response rate is not unbiased and may have a small effect on the analysis.
As alluded to in the introduction, we have split CoV into two areas, which we refer to as “central” and “outer” regions. Census tracts change over time, so it’s always good to do a quick visual check what we got the split consistent over time, as well as remind ourselves what they are.
With the data all prepared and the suppressed census counts taken care of, let’s check the development of children in the central and outer regions.
If we are interested in different regions, it is now easy to adapt the analysis. Let’s look at Vancouver School Board, who is struggling to deal with changing enrollment patterns in their schools. The above analysis of central vs outer regions in the City of Vancouver touches on some of the problems, but overall the City of Vancouver does not match the geography of SD 39. To remedy this, let’s just re-run the overview analysis using the correct region.
vsb_regions=list(CT=c("9330069.01","9330069.02","9330069.00"),CSD=c("5915022","5915803")) vsb_2016 <- get_census(dataset='CA16', regions=vsb_regions, vectors=vectors_2016, level='Regions', labels = 'short', geo_format="sf") %>% prep_2016 vsb_2011 <- get_census(dataset='CA11', regions=vsb_regions, vectors=vectors_2011, level='Regions', labels = 'short', geo_format="sf") %>% prep_2011 vsb_2006 <- get_census(dataset='CA06', regions=vsb_regions, vectors=vectors_2006, level='Regions', labels = 'short', geo_format="sf") %>% prep_2006 vsb_data=rbind(rbind(vsb_2016 %>% select(vs), vsb_2011 %>% select(vs)), vsb_2006 %>% select(vs) )
It’s always good to get a visual confirmation we got the regions right, especially in a case like this one where the geographic regions changed over time. And we missed this an earlier version of this post!
With the data at hand, let’s see how it plays out for VSB. Here we notice that the trend of declining population of 5 to 14 year olds
has been reversed is continuing on at a slower pace. We see that the 5-9 year old age group has increased slightly by 2.9%, but that’s not enough to make up for the continued drop in the 10-14 population by 4.5%, adding up to an overall decline by 1%. One word of caution is that the UCB census numbers are quite problematic, the census has been missing significant portions of the newer developments in the 2011 and 2016 censuses and it is difficult to estimate the relative effects of this. For completeness, the table of the counts:
vsb_summary ## # A tibble: 3 x 6 ## year `0-4` `5-9` `10-14` `0-14` Population ## <chr> <dbl> <dbl> <dbl> <dbl> <int> ## 1 2006 25390 24490 26115 75995 590243 ## 2 2011 25610 23130 25030 73770 617848 ## 3 2016 25480 23790 23895 73175 649028
The bigger picture
The variations that we see locally in Vancouver also exist on much larger scales across the country. There are many factors influencing the growth and decline of children, and it requires more analysis to better understand what drives this. We wrap this up with a quick overview of the Country and Provincial level.
The underlying trend in Canada, as our population ages, is toward a declining share of children under 15. Between 2011 and 2016 the share declined by 0.1 percentage points. But at the same time our population is growing, which lead to an overall increase in the number of children by 4.1% over that time frame. As you can explore in the online map the number of children under 15 has increased most in Alberta (by 13.8%), with the Maritimes registering a drop in the total number of children under 15. The overall share of children in the population also increased in Alberta, Manitoba and Quebec.
Other directions that are worth exploring is to better understand family formation and family migration. We have already dug into migration patterns to visualize net migration by age groups. It’s good to remember that net migration is a different point of view compared to looking at change in the size, or relative size, of age brackets as we have done in this post. As an example consider the two maps below that show net migration on the left and change in size of an age cohort on the right. Click through for live maps.