3.7. Script 7: Immigration

Immigration is modeled by total number by sex and year, age distribution by sex, and destination district by age and sex. Distributional pattern are assumed to be time-invariant, the total number is assumed to increase at a fixed rate.

3.7.1. File Output

The code below generates 4 model parameters stored in a Modgen .dat file

  • Number of immigrants by year and sex
  • Age distribution of immigrants by sex
  • Destination district of immigrants by age and sex
  • Switch module on/off

../../_images/ParaImmigration.pngFigure: Immigration Parameters

3.7.2. Code

####################################################################################################
#
#  DYNAMIS-POP Parameter Generation File 7 - Immigration
#  This file is generic and works for all country contexts.
#  Input file: globals_for_analysis.RData (To generate such a file run the setup script)
#  Last Update: Martin Spielauer 2018-06-29
#
####################################################################################################

####################################################################################################
# Clear work space, load required packages and the input object file
####################################################################################################

rm(list=ls())

library(haven)
library(dplyr)
library(data.table)
library(sp)
library(maptools)
library(survival)
library(fmsb)
library(eha)

load(file="globals_for_analysis.RData")
dat <-  g_residents_dat

# Set Parameter Output File
parafile <- file(g_para_immigration, "w")

# Remove those in the country 12 months ago
n_abroad <- max(dat$M_DOB)
dat <- dat[dat$M_PDIST==n_abroad,]

# Add an integer variable for age a year ago
dat$M_AGE[dat$M_AGE>100] <- 100
dat$m_ageago <- as.integer(dat$M_AGE-0.5)
dat[dat$m_ageago<0,] <- 0



####################################################################################################
# Create and append a dataset of all possible immigrations for each age
# This is to avoid empty cells in matrices
# The records have very low weights which do not affect overall immigration
####################################################################################################

umale <- unique(dat$M_MALE)
udist <- 0:(n_abroad-1)
uage  <- 0:100

# Keep only what's needed
dat <- dat[,c("M_WEIGHT", "M_MALE", "M_DOR", "m_ageago" )]

allmigs <- expand.grid(M_MALE=umale, M_DOR=udist, m_ageago=uage)
allmigs$M_WEIGHT <- 0.0000001
dat <- rbind(dat, allmigs)

# Age groups 5 years ago, up to 60+

dat$m_agegr5 <- as.integer(dat$m_ageago/5) * 5
dat$m_agegr5[dat$m_agegr5>60] <- 60

####################################################################################################
# Calculate the parameter NumberImmigrants[SIM_YEAR_RANGE][SEX]
# Immigrants last year and a growth rate scenario with growth "yearlygrowth" to be specified here
####################################################################################################

yearlygrowth <- g_immigration_number_growth

# Create the parameter for total immigration past year
immigrants <- as.data.frame(xtabs(dat$M_WEIGHT ~ dat$M_MALE))
immigrants <- immigrants[order(immigrants$dat.M_MALE),]

####################################################################################################
# Write the parameter MigrationProbability[SEX][AGE5_PART][DISTRICT_NAT]
####################################################################################################

cat("parameters { \n  //EN Number of immigrants\ndouble	NumberImmigrants[SIM_YEAR_RANGE][SEX] = {\n", file=parafile)

for (pos in c(1:101))
{
  cat(format(round(immigrants$Freq * yearlygrowth^pos,5),scientific=FALSE),"\n", file=parafile, sep=", ", append=TRUE)
}
cat("\n}; \n\n", file=parafile, append=TRUE)

####################################################################################################
# Calculate the parameter cumrate	AgeImmigrants[SEX][AGE_RANGE]            
####################################################################################################

immibyage           <- as.data.frame(xtabs(dat$M_WEIGHT ~ dat$M_MALE + dat$m_ageago))
immibyage$groupsum  <- ave(immibyage$Freq, immibyage$dat.M_MALE, FUN=sum)
immibyage$paravalue <- immibyage$Freq / immibyage$groupsum
immibyage           <- immibyage[order(immibyage$dat.M_MALE, immibyage$dat.m_ageago),]

####################################################################################################
# Write the parameter AgeImmigrants[SEX][AGE_RANGE]
####################################################################################################

cat("\n\n//EN Age distribution of immigrants\ncumrate AgeImmigrants[SEX][AGE_RANGE] = {\n", file=parafile, append=TRUE)
cat(format(round(immibyage$paravalue,10),scientific=FALSE), file=parafile, sep=", ", append=TRUE)
cat("\n}; \n\n", file=parafile, append=TRUE)

####################################################################################################
# Calculate the parameter DestinationImmigrants[SEX][AGE5_PART][DISTRICT_NAT]            
####################################################################################################

immidest            <- as.data.frame(xtabs(dat$M_WEIGHT ~ dat$M_MALE + dat$m_agegr5 + dat$M_DOR))
immidest$groupsum   <- ave(immidest$Freq, immidest$dat.M_MALE, immidest$dat.m_agegr5, FUN=sum)
immidest$paravalue  <- immidest$Freq / immidest$groupsum
immidest            <- immidest[order(immidest$dat.M_MALE, immidest$dat.m_agegr5, immidest$dat.M_DOR),]

####################################################################################################
# Write the parameter DestinationImmigrants[SEX][AGE5_PART][DISTRICT_NAT]            
####################################################################################################

cat("\n\n//EN Destination of immigrants\ncumrate DestinationImmigrants[SEX][AGE5_PART][DISTRICT_NAT] = {\n", file=parafile, append=TRUE)
cat(format(round(immidest$paravalue,10),scientific=FALSE), file=parafile, sep=", ", append=TRUE)
cat("\n  }; \n", file=parafile, append=TRUE)

####################################################################################################
# Write the parameter ModelImmigration
####################################################################################################

cat("  logical ModelImmigration = TRUE; //EN Switch immigration on/off\n", file=parafile, append=TRUE)
cat("\n};\n", file=parafile, append=TRUE)
close(parafile)