Learn R Programming

migest (version 1.7.3)

ffs: Flows from Stocks Methodology

Description

Estimates migrant transitions flows between two sequential migrant stock tables.

Usage

ffs(P1, P2, d, b, m = NULL, method = "stocks", b.mat = NULL, d.mat = NULL, b.deduct="native.gt0", ...)

Arguments

P1
Matrix of migrant stock totals at time t. Rows in the matrix correspond to place of birth and columns to place of residence at time t
P2
Matrix of migrant stock totals at time t+1. Rows in the matrix correspond to place of birth and columns to place of residence at time t+1.
d
Number of deaths between time t and t+1 in each region.
b
Number of births between time t and t+1 in each region.
m
Array of auxiliary data. By default set to 1 for all origin-destination-migrant type combinations.
method
Method used to adjust row margin totals of P1 and P2 to equal. By default method="stocks". Can also take values method="outside" or method="deaths". See details for explanation on each method.
b.mat
A matrix containing the number of births during the period in each birthplace (rows) by place of residence (columns) combination created by the user. By default, this argument is NULL, and hence within the function a b.mat is formed as a diagonal matrix of b (i.e. all births happen in their respective place of residence at the end of the period, there are no infant migrants.)
d.mat
A matrix containing the number of deaths during the period in each birthplace (rows) by place of residence (columns) combination created by the user. By default, this argument is NULL, and hence within the function a d.mat is formed as a proportional allocation of d over all populations (i.e. the mortality rate in each place of birth sub-group (native born and all foreign born stocks) is the same.)
b.deduct
Method used to deduct births. By default b.deduct="native.gt0" deducts births from diagonals of stock table (i.e. the native born populations) with the exception of regions where this would lead to a negative adjusted population. In these select regions, births are spread over all population stocks (both native and foreign) thus avoiding potential negative flows. Can also take b.deduct="native.only" in which all births are deducted from the diagonals of stock table (i.e. native born populations only).
...
Additional arguments passes to ipf3.qi.

Value

Returns a list object with:

Details

Estimates migrant transitions flows between two sequential migrant stock tables as shown in Abel (2013), when method="outside". The length of b and d must equal the number of rows in P1 and number of columns in P2.

Setting method="stocks" estimates migration flows using an alternative demographic accounting method to adjusted stock tables to match the row totals of the stock table after demographic accounting. Setting method="deaths" uses the calculation of the deaths by place of residence table to match the row totals of the stock table after demographic accounting. Note, when b and d are equal, the same estimated flows from stocks are obtained regardless of the method argument. Both of these options maintain the net migration flow implied by the population, birth and death data. I still need to write up these methods.

Setting b.deduct="native.gt0" allows estimates to correct for cases where the number of births far exceeds the change in the native born population. Such cases potentially occur where place of birth stock data imply a change in native born population which directly conflict with changes in demographic data unless there is mass migration of all new borns.

References

Abel, G. J. (2016). Estimates of Global Bilateral Migration Flows by Gender between 1960 and 2015. Vienna Institute of Demography Working Papers 2/2016.

Abel, G. J. and Sander, N. (2014). Quantifying Global International Migration Flows. Science, 343 (6178) 1520-1522

Abel, G. J. (2013). Estimating Global Migration Flow Tables Using Place of Birth. Demographic Research 28, (18) 505-546

See Also

ipf3.qi, fm

Examples

Run this code
## create P1 and P2 stock tables
dn <- LETTERS[1:4]
P1 <- matrix(c(1000, 100, 10, 0, 55, 555, 50, 5, 80, 40, 800, 40, 20, 25, 20, 200), 4, 4, 
        dimnames = list(pob = dn, por = dn), byrow = TRUE)
P2 <- matrix(c(950, 100, 60, 0, 80, 505, 75, 5, 90, 30, 800, 40, 40, 45, 0, 180), 4, 4, 
        dimnames = list(pob = dn, por = dn), byrow = TRUE)
# display with row and col totals
addmargins(P1)
addmargins(P2)

# no births and deaths
b <- rep(0, 4)
d <- rep(0, 4)

y <- ffs(P1, P2, d, b)
# display with row, col and table totals
round(addmargins(y$mu), 1)
# display with row and col totals
round(fm(y$mu), 1)

## alternative offset term
dis <- array(c(1, 2, 3, 4, 2, 1, 5, 6, 3, 4, 1, 7, 4, 6, 7, 1), c(4, 4, 4))
y <- ffs(P1, P2, d, b, dis)
# display with row, col and table totals
round(addmargins(y$mu), 1)
# display with row and col totals
round(fm(y$mu), 1)

## alternative P2 and changes in population from natural increase
P2 <- matrix(c(1060, 60, 10, 10, 45, 540, 40, 0, 70, 75, 770, 70, 30, 30, 20, 230), 4, 4, 
        dimnames = list(pob = dn, por = dn), byrow = TRUE)
# display with row and col totals
addmargins(P2)
b <- c(80, 20, 40, 60)
d <- c(70, 30, 50, 10)

y <- ffs(P1, P2, d, b, method="outside")
# display with row, col and table totals
round(addmargins(y$mu), 1)
# display with row and col totals
round(fm(y$mu), 1)

Run the code above in your browser using DataLab