Facilitador: Diego Alburez-Gutierrez (MPIDR); Pre-evento del X Congreso ALAP; Valparaíso, Chile - 6 Dic 2022
- Primera parte: Introducción a la Demografía del Parentesco
- Segunda parte: modelos de parentesco en R
- Ejercicios
Las diapositivas para la primera parte del minicurso están disponibles aquí.
Instale el paquete DemoKin
desde
GitHub (puede tomar ~1 minuto).
# remove.packages("DemoKin")
# install.packages("devtools")
devtools::install_github("IvanWilli/DemoKin", build_vignettes = TRUE)
Cargue algunos paquetes que usaremos para este minicurso:
Nota si alguen paquete no está instalados en su computadora, instálelo usando el comando
install.packages("dplyr")
, etc.
library(DemoKin)
library(dplyr)
library(tidyr)
library(purrr)
library(ggplot2)
library(fields)
Una función para descargar datos de Naciones Unidas (UNWPP2022) usando el API:
MOSTRAR CODIGO
get_UNWPP_inputs <- function(countries, my_startyr, my_endyr, variant = "Median"){
print("Getting API ready...")
print("Make sure you have a working internet connection!")
# Get data from UN using API
base_url <- 'https://population.un.org/dataportalapi/api/v1'
# First, identify which indicator codes we want to use
target <- paste0(base_url,'/indicators/?format=csv')
codes <- read.csv(target, sep='|', skip=1)
qx_code <- codes$Id[codes$ShortName == "qx1"]
asfr_code <- codes$Id[codes$ShortName == "ASFR1"]
# Get location codes
target <- paste0(base_url, '/locations?sort=id&format=csv')
df_locations <- read.csv(target, sep='|', skip=1)
# find the codes for countries
my_location <-
df_locations %>%
filter( Name %in% countries) %>%
pull(Id) %>%
paste(collapse = ",")
# Get px values
print(paste0("Getting mortality data for ", paste(countries, collapse = ", ")))
my_indicator <- qx_code
my_location <- my_location
target <- paste0(base_url,
'/data/indicators/',my_indicator,
'/locations/',my_location,
'/start/',my_startyr,
'/end/',my_endyr,
'/?format=csv')
px <-
read.csv(target, sep='|', skip=1) %>%
filter(Variant %in% variant) %>%
filter(Sex == "Female") %>%
mutate(px = 1- Value) %>%
select(Location, Time = TimeLabel, age = AgeStart, px)
# ASFR
print(paste0("Getting fertility data for ", paste(countries, collapse = ", ")))
my_indicator <- asfr_code
target <- paste0(base_url,
'/data/indicators/',my_indicator,
'/locations/',my_location,
'/start/',my_startyr,
'/end/',my_endyr,
'/?format=csv')
asfr <-
read.csv(target, sep='|', skip=1) %>%
filter(Variant %in% variant) %>%
select(Location, Time = TimeLabel, age = AgeStart, ASFR = Value) %>%
mutate(ASFR = ASFR/1000)
data <-
left_join(px, asfr, by = c("Location", "Time", "age")) %>%
mutate(ASFR = replace(ASFR,is.na(ASFR),0))
data
}
Una función para mostrar nombre de parientes en español (con una ligera
modificaión respecto a DemoKin::rename_kin
:
MOSTRAR CODIGO
# A small hack on the existing rename_kin function to make sure it keeps all columns
rename_kin2 <- function (df, consolidate_column = "no") {
stopifnot(`Argument 'consolidate_column' should be 'no' or a valid column name` = consolidate_column %in%
c("no", colnames(df)))
if (consolidate_column == "no") {
relatives <- c("Primos por tia mayor", "Primos por tia menor",
"Hija", "Nieta", "Bisnieta",
"Bisabuela", "Abuela", "Madre", "Sobrinas por hermana mayor",
"Sobrinas por hermana menor", "Tia mayor que madre",
"Tia menor que madre", "Hermana mayor", "Hermana menor")
names(relatives) <- c("coa", "cya", "d", "gd", "ggd",
"ggm", "gm", "m", "nos", "nys", "oa", "ya", "os",
"ys")
}
else {
consolidate_vec <- c("c", "c", "d", "gd", "ggd", "ggm",
"gm", "m", "n", "n", "a", "a", "s", "s")
names(consolidate_vec) <- c("coa", "cya", "d", "gd",
"ggd", "ggm", "gm", "m", "nos", "nys", "oa", "ya",
"os", "ys")
relatives <- c("Primas", "Hijas", "Nietas",
"Bisnietas", "Bisabuelas", "Abuelas",
"Madres", "Sobrinas", "Tias", "Hermanas")
names(relatives) <- unique(consolidate_vec)
df <- as.data.frame(df)
df$count <- df[, consolidate_column]
df <- df %>% dplyr::mutate(kin = consolidate_vec[kin]) %>%
dplyr::group_by(age_focal, kin, Location) %>%
dplyr::summarise(
count = sum(count)
, Location = unique(Location)
) %>%
dplyr::ungroup()
}
df$kin <- relatives[df$kin]
df
}
Una función que nos permite aproximar parientes masculinos y femeninos usando “factores GKP”:
MOSTRAR CODIGO
# A function to apply GKP factors to a female-only population to approximate kin counts for a two-sex population by multiplying daughters by 2, granddaughters by 4, etc.
approx_two_sex <- function(df){
factors <- c("coa" = 8, "cya" = 8, "d" = 2, "gd" = 4, "ggd" = 8, "ggm" = 8, "gm" = 4, "m" = 2, "nos" = 4, "nys" = 4, "oa" = 4, "ya" = 4, "os" = 2, "ys" = 2)
df <- as.data.frame(df)
factors_vec <- factors[df$kin]
df$count_living <- df$count_living*factors_vec
df$count_dead <- df$count_dead*factors_vec
drop <- c("mean_age", "sd_age", "count_cum_dead", "mean_age_lost")
print("Note: approx_two_sex only keeps columns with data on kin counts!")
print(paste0("Dropping columns: ", paste(drop, collapse = ", ")))
df[,!(names(df) %in% drop)]
}
Vamos a usar el API del World Population Prospects 2022 para descargar los datos que necesitamos para DemoKin.
Para esto, usaremos la función get_UNWPP_inputs
(definida arriba).
Nota: Necesita estar conectado a internet para usar esta función!
Para este ejemplo, usemos datos de Guatemala:
# pick countries
countries <- c("Guatemala")
# Year range
my_startyr <- 1950
my_endyr <- 2020
data <- get_UNWPP_inputs(
countries = countries
, my_startyr = my_startyr
, my_endyr = my_endyr
)
## [1] "Getting API ready..."
## [1] "Make sure you have a working internet connection!"
## [1] "Getting mortality data for Guatemala"
## [1] "Getting fertility data for Guatemala"
Primero, transformamos los datos a matrices, el formato que DemoKin requiere:
gt_px <-
data %>%
select(Time, age, px) %>%
pivot_wider(names_from = Time, values_from = px) %>%
select(-age) %>%
as.matrix()
gt_asfr <-
data %>%
select(Time, age, ASFR) %>%
pivot_wider(names_from = Time, values_from = ASFR) %>%
select(-age) %>%
as.matrix()
Así se ven los datos:
gt_px[1:4, 1:4]
## 1950 1951 1952 1953
## [1,] 0.8357549 0.8365911 0.8383111 0.8401224
## [2,] 0.9579989 0.9569656 0.9574153 0.9584632
## [3,] 0.9765789 0.9764353 0.9767937 0.9773143
## [4,] 0.9785723 0.9792318 0.9796995 0.9799887
Grafiquemos sobre tiempo y edad:
image.plot(
x = as.numeric(colnames(gt_px))
, y = 0:nrow(gt_px)
, z = t(as.matrix(gt_px))
, xlab = "Año"
, ylab = "Probabilidad de supervivencia"
)
Así se ven los datos:
gt_asfr[15:20, 1:4]
## 1950 1951 1952 1953
## [1,] 0.000000 0.000000 0.000000 0.000000
## [2,] 0.066347 0.065141 0.064820 0.064491
## [3,] 0.121295 0.118319 0.117414 0.116737
## [4,] 0.177313 0.175192 0.174600 0.174613
## [5,] 0.228124 0.229831 0.230589 0.232388
## [6,] 0.260996 0.268618 0.271522 0.275600
Grafiquemos sobre tiempo y edad:
image.plot(
x = as.numeric(colnames(gt_asfr))
, y = 0:nrow(gt_asfr)
, z = t(as.matrix(gt_asfr))
, xlab = "Año"
, ylab = "Tasa de fecundidad (f)"
)
DemoKin
permite calcular el número de parientes de Focal y la
distribución etaria de estos parientes (bajo distintas premisas). Esto
incluye parientes vivos y muertos. La función DemoKin::kin()
se
encarga de implemetar los modelos de parentesco. Este es un ejemplo, en
este caso asumiendo estabilidad demográfica (ver el parámetro
time_invariant = TRUE
):
# First, get vectors for a given year
gt_surv_2015 <- gt_px[,"2015"]
gt_asfr_2015 <- gt_asfr[,"2015"]
# Run kinship models
gt_2015 <- kin(U = gt_surv_2015, f = gt_asfr_2015, time_invariant = TRUE)
- U numérico. Un vector o matriz con probabilidades de supervivencia, las edades son files y las columnas años (si es matriz).
- f numérico. Igual que
U
pero para tasas de fecundidad - time_invariant lógico. Asumir tasas estables? Default TRUE.
- output_kin caracter. Tipo de pariente a estimar: “m” para madre, “d” para hija, …
El argumento output_kin
usa códigos únicos para diferenciar tipos de
parientes. Note que los códigos en DemoKin
son distintos a los usados
por Caswell (2019). Esta es la equivalencia de los códigos:
demokin_codes()
## DemoKin Caswell Label
## 1 coa t Cousins from older aunt
## 2 cya v Cousins from younger aunt
## 3 d a Daughter
## 4 gd b Grand-daughter
## 5 ggd c Great-grand-daughter
## 6 ggm h Great-grandmother
## 7 gm g Grandmother
## 8 m d Mother
## 9 nos p Nieces from older sister
## 10 nys q Nieces from younger sister
## 11 oa r Aunt older than mother
## 12 ya s Aunt younger than mother
## 13 os m Older sister
## 14 ys n Younger sister
DemoKin::kin()
produce una lista con dos data frames: kin_full
y
kin_summary
.
str(gt_2015)
## List of 2
## $ kin_full : tibble[,7] [142,814 x 7] (S3: tbl_df/tbl/data.frame)
## ..$ year : logi [1:142814] NA NA NA NA NA NA ...
## ..$ cohort : logi [1:142814] NA NA NA NA NA NA ...
## ..$ age_focal: int [1:142814] 0 1 2 3 4 5 6 7 8 9 ...
## ..$ kin : chr [1:142814] "d" "d" "d" "d" ...
## ..$ age_kin : int [1:142814] 0 0 0 0 0 0 0 0 0 0 ...
## ..$ living : num [1:142814] 0 0 0 0 0 0 0 0 0 0 ...
## ..$ dead : num [1:142814] 0 0 0 0 0 0 0 0 0 0 ...
## $ kin_summary: tibble[,10] [1,414 x 10] (S3: tbl_df/tbl/data.frame)
## ..$ age_focal : int [1:1414] 0 0 0 0 0 0 0 0 0 0 ...
## ..$ kin : chr [1:1414] "coa" "cya" "d" "gd" ...
## ..$ year : logi [1:1414] NA NA NA NA NA NA ...
## ..$ cohort : logi [1:1414] NA NA NA NA NA NA ...
## ..$ count_living : num [1:1414] 0.635 0.22 0 0 0 ...
## ..$ mean_age : num [1:1414] 11.47 5.75 NaN NaN NaN ...
## ..$ sd_age : num [1:1414] 8.39 5.01 NaN NaN NaN ...
## ..$ count_dead : num [1:1414] 0 0 0 0 0 0 0 0 0 0 ...
## ..$ count_cum_dead: num [1:1414] 0 0 0 0 0 0 0 0 0 0 ...
## ..$ mean_age_lost : num [1:1414] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
Esta data frame contiene el número esperado de parientes por tipo de pariente, año/cohorte, edad de Focal y edad del pariente.
head(gt_2015$kin_full)
## # A tibble: 6 x 7
## year cohort age_focal kin age_kin living dead
## <lgl> <lgl> <int> <chr> <int> <dbl> <dbl>
## 1 NA NA 0 d 0 0 0
## 2 NA NA 1 d 0 0 0
## 3 NA NA 2 d 0 0 0
## 4 NA NA 3 d 0 0 0
## 5 NA NA 4 d 0 0 0
## 6 NA NA 5 d 0 0 0
Esta es una data frame que resume el contenido de kin_full
. Para
producirla, sumamos los valores a lo largo de todas las edades de los
parientes. Esto produce una data frame con el número esperado de
parientes por año/cohorte y edad de Focal (pero no por edad del
pariente).
Así derivamos kin_summary
:
MOSTRAR CODIGO
kin_by_age_focal <-
gt_2015$kin_full %>%
group_by(cohort, kin, age_focal) %>%
summarise(count = sum(living)) %>%
ungroup()
# Check that they are identical (for living kin only here)
kin_by_age_focal %>%
select(cohort, kin, age_focal, count) %>%
identical(
gt_2015$kin_summary %>%
select(cohort, kin, age_focal, count = count_living) %>%
arrange(cohort, kin, age_focal)
)
## [1] TRUE
Asumamos una población femenina matrilineal sin migración cuyos miembros experimentan las tasas de mortalidad y fecundidad de Guatemala (reportadas para 2015) a lo largo de su vida (es decir, una población estable). Preguntamos:
Cómo podemos caracterizar la estructura familiar (redes de parentesco) de un miembro promedio de esta poblacion (llamada Focal)?
Para este ejercicio usaremos los datos de Guatemala que hemos venido trabajando.
# First, get vectors for a given year
gt_surv_2015 <- gt_px[,"2015"]
gt_asfr_2015 <- gt_asfr[,"2015"]
# Run kinship models
gt_2015 <- kin(U = gt_surv_2015, f = gt_asfr_2015, time_invariant = TRUE)
Usamos la función plot_diagram
para visualizar el número implícito de
parientes de Focal cuando ella tiene 35 años (Keyfitz and Caswell 2005):
gt_2015$kin_summary %>%
filter(age_focal == 35) %>%
select(kin, count = count_living) %>%
plot_diagram(rounding = 2)
Ahora podemos mostrar la variación en el número esperado de hijas,
hermanas, primas, etc. de Focal a lo largo de su vida. Usamos la función
DemoKin::rename_kin()
para mostrar los nombres de cada tipo de
pariente (en lugar de los códigos de parentesco).
gt_2015$kin_summary %>%
rename_kin() %>%
ggplot() +
geom_line(aes(age_focal, count_living)) +
geom_vline(xintercept = 35, color=2)+
theme_bw() +
labs(x = "Edad de Focal") +
facet_wrap(~kin)
Podemos mostrar todo en una gráfica para visualizar el tamaño absoluto de las redes familiares femeninas de Focal:
counts <-
gt_2015$kin_summary %>%
group_by(age_focal) %>%
summarise(count = sum(count_living)) %>%
ungroup()
gt_2015$kin_summary %>%
select(age_focal, kin, count_living) %>%
rename_kin(., consolidate_column = "count_living") %>%
ggplot(aes(x = age_focal, y = count)) +
geom_area(aes(fill = kin), colour = "black") +
geom_line(data = counts, size = 2) +
labs(x = "Edad de Focal", y = "Número de parientes con vida") +
coord_cartesian(ylim = c(0, 8.5)) +
theme_bw() +
theme(legend.position = "bottom")
Qué edad tienen los parientes de Focal? Usamos la data frame kin_full
para mostrar la distribución etaria de los parientes de Focal a lo largo
de la vida de Focal. Por ejemplo, esta es la edad de los parientes de
Focal cuando ella tiene 35 años:
gt_2015$kin_full %>%
DemoKin::rename_kin() %>%
filter(age_focal == 35) %>%
ggplot() +
geom_line(aes(age_kin, living)) +
geom_vline(xintercept = 35, color=2) +
labs(y = "Número de parientes con vida") +
theme_bw() +
facet_wrap(~kin)
Nos hemos enfocados en parentela vivo, pero qué hay de los pariente que
han muerto ya? La función kin
también incluye información sobre
muertes de parientes experimentadas por Focal.
Exploremos primero el número de pérdidas familiares que Focal experimenta a cada edad de su vida. Es decir, el número de parientes cuya pérdida es sufrida por Focal cuando Focal tiene 0,1,2,… años.
loss1 <-
gt_2015$kin_summary %>%
filter(age_focal>0) %>%
group_by(age_focal) %>%
summarise(count = sum(count_dead)) %>%
ungroup()
gt_2015$kin_summary %>%
filter(age_focal>0) %>%
group_by(age_focal, kin) %>%
summarise(count = sum(count_dead)) %>%
ungroup() %>%
rename_kin(., consolidate_column = "count") %>%
ggplot(aes(x = age_focal, y = count)) +
geom_area(aes(fill = kin), colour = "black") +
geom_line(data = loss1, size = 2) +
labs(x = "Edad de Focal", y = "Numero de muertes en la familia experimentadas cada anio") +
theme_bw() +
theme(legend.position = "bottom")
## `summarise()` has grouped output by 'age_focal'. You can override using the
## `.groups` argument.
La suma de estos valores equivale al número acumulado de pérdidas familiares experimentado por Focal cuando ella tiene 0,1,2,… años.
loss2 <-
gt_2015$kin_summary %>%
group_by(age_focal) %>%
summarise(count = sum(count_cum_dead)) %>%
ungroup()
gt_2015$kin_summary %>%
group_by(age_focal, kin) %>%
summarise(count = sum(count_cum_dead)) %>%
ungroup() %>%
rename_kin(., consolidate = "count") %>%
ggplot(aes(x = age_focal, y = count)) +
geom_area(aes(fill = kin), colour = "black") +
geom_line(data = loss2, size = 2) +
labs(x = "Edad de Focal", y = "Number of kin deaths experienced (cumulative)") +
theme_bw() +
theme(legend.position = "bottom")
## `summarise()` has grouped output by 'age_focal'. You can override using the
## `.groups` argument.
Por ejemplo, cuando Focal alcanza los 15, 50 y 65 años de edad, habrá perdido un promedio de 0.6, 2.8, 4.2 parientes.
Para más detalles sobre DemoKin
, incluyendo una extensión a
poblaciones no estables, y modelos multi-state, ver
vignette("Reference", package = "DemoKin")
. Si la viñeta no carga,
intente instalar el paquete así:
devtools::install_github("IvanWilli/DemoKin", build_vignettes = TRUE)
.
Para una descripción detallada de los modelos de parentesco, ver:
- poblaciones estables (Caswell 2019),
- modelos multistate (Caswell 2020),
- poblaciones no estables (Caswell and Song 2021), and
- modelos con dos sexos (Caswell 2022).
Cómo varían las estructuras de parentesco en varios paises de América Latina? Que tan común es experimentar una pérdida familiar, y como se distribuyen estas pérdidas familiares a lo largo de la vida?
Primero descargamos los datos necesarios usando el API de Naciones Unidas:
# pick countries
countries <- c("Argentina", "Haiti", "Chile", "Guatemala")
# Year range
my_startyr <- 2022
my_endyr <- my_startyr
data <- get_UNWPP_inputs(
countries = countries
, my_startyr = my_startyr
, my_endyr = my_endyr
)
## [1] "Getting API ready..."
## [1] "Make sure you have a working internet connection!"
## [1] "Getting mortality data for Argentina, Haiti, Chile, Guatemala"
## [1] "Getting fertility data for Argentina, Haiti, Chile, Guatemala"
Corramos los modelos de parentesco para estos países, asumiendo una población estable femenina.
period_kin <-
data %>%
split(list(.$Location)) %>%
map_df(function(X){
print(paste(unique(X$Location), unique(X$Time)))
kin(X$px, X$ASFR)$kin_summary %>%
mutate(Location = unique(X$Location))
})
## [1] "Argentina 2022"
## [1] "Chile 2022"
## [1] "Guatemala 2022"
## [1] "Haiti 2022"
Ahora podemos visualizar algunos la estructura de parentesco en estos países. Comenzamos con la estructura familiar:
period_kin %>%
approx_two_sex() %>%
select(age_focal, kin, count = count_living, Location) %>%
rename_kin2(consolidate_column = "count") %>%
ggplot(aes(x = age_focal, y = count)) +
geom_area(aes(fill = kin), colour = "black") +
labs(x = "Edad de Focal", y = "Número de parientes con vida") +
facet_wrap(~Location) +
theme_bw() +
theme(legend.position = "bottom")
## [1] "Note: approx_two_sex only keeps columns with data on kin counts!"
## [1] "Dropping columns: mean_age, sd_age, count_cum_dead, mean_age_lost"
## `summarise()` has grouped output by 'age_focal', 'kin'. You can override using
## the `.groups` argument.
Cuántas pérdidas familiares experimenta una persona a la edad exacta ‘x’ en distintos paises de LATAM?
exact_death <-
period_kin %>%
approx_two_sex() %>%
rename_kin2(consolidate_column = "count_dead")
## [1] "Note: approx_two_sex only keeps columns with data on kin counts!"
## [1] "Dropping columns: mean_age, sd_age, count_cum_dead, mean_age_lost"
## `summarise()` has grouped output by 'age_focal', 'kin'. You can override using
## the `.groups` argument.
exact_death %>%
ggplot(aes(x = age_focal, y = count)) +
geom_area(aes(fill = kin), colour = "black") +
facet_wrap(~Location) +
labs(x = "Edad de Focal", y = "Perdidas familiares experimentadas en cada edad") +
theme_bw() +
theme(legend.position = "bottom")
Para visualiar el número acumulado de pérdidas familiares:
cum_death <-
period_kin %>%
approx_two_sex() %>%
# We estimate the cummulative number of kin deaths by hand
group_by(Location, kin) %>%
arrange(age_focal) %>%
mutate(count_cum_dead = cumsum(count_dead)) %>%
ungroup() %>%
rename_kin2(consolidate_column = "count_cum_dead")
## [1] "Note: approx_two_sex only keeps columns with data on kin counts!"
## [1] "Dropping columns: mean_age, sd_age, count_cum_dead, mean_age_lost"
## `summarise()` has grouped output by 'age_focal', 'kin'. You can override using
## the `.groups` argument.
cum_death %>%
ggplot(aes(x = age_focal, y = count)) +
geom_area(aes(fill = kin), colour = "black") +
facet_wrap(~Location) +
labs(x = "Edad de Focal", y = "Numero acumulado de perdidas familiares") +
theme_bw() +
theme(legend.position = "bottom")
Finalmente, graficamos los resultados sin diferenciar el numero de parientes y comparamos los resultados para cada pais en una misma gráfica:
exact_line <-
exact_death %>%
filter(age_focal>0) %>%
group_by(Location, age_focal) %>%
summarise(count = sum(count)) %>%
ungroup() %>%
mutate(variable = "A cada edad")
## `summarise()` has grouped output by 'Location'. You can override using the
## `.groups` argument.
cum_line <-
cum_death %>%
filter(age_focal>0) %>%
group_by(Location, age_focal) %>%
summarise(count = sum(count)) %>%
ungroup() %>%
mutate(variable = "Acumulado")
## `summarise()` has grouped output by 'Location'. You can override using the
## `.groups` argument.
exact_line %>%
bind_rows(cum_line) %>%
ggplot(aes(x = age_focal, y = count, colour = Location, shape = Location)) +
geom_point(
size = 4
, data = . %>% filter(age_focal %in% seq(0,100,20))
) +
geom_line(size = 1) +
labs(x = "Edad de Focal", y = "Numero de perdidas familiares experimentadas") +
facet_wrap(~variable, scales = "free") +
theme_bw() +
theme(legend.position = "bottom")
# pick countries
countries <- c("Argentina", "Haiti", "Chile", "Guatemala")
# Year range
my_startyr <- 1950
my_endyr <- 2020
data <- get_UNWPP_inputs(
countries = countries
, my_startyr = my_startyr
, my_endyr = my_endyr
)
## [1] "Getting API ready..."
## [1] "Make sure you have a working internet connection!"
## [1] "Getting mortality data for Argentina, Haiti, Chile, Guatemala"
## [1] "Getting fertility data for Argentina, Haiti, Chile, Guatemala"
Explorar cambios a traves del tiempo en una perspectiva de periodo. En este ejemplo, vamos a usar un modelo que no asume estabilidad de tasas demográficas. Los modelos “dinámicos” (es decir, no estables) tardan más tiempo en correr.
# period data for decennial years
period_kin_temp <-
data %>%
split(list(.$Location)) %>%
map_df(function(X){
print(unique(X$Location))
U <-
X %>%
select(Time, age, px) %>%
pivot_wider(names_from = Time, values_from = px) %>%
select(-age) %>% as.matrix()
f <- X %>%
select(Time, age, ASFR) %>%
mutate(ASFR = ASFR/1000) %>%
pivot_wider(names_from = Time, values_from = ASFR) %>%
select(-age) %>% as.matrix()
kin(U, f, time_invariant = FALSE, output_kin = c("gm"), output_period = seq(1950, 2020, 10))$kin_summary %>%
mutate(Location = unique(X$Location), .before = 1)
})
## [1] "Argentina"
## Stable assumption was made for calculating pi on each year because no input data.
## Warning: replacing previous import 'lifecycle::last_warnings' by
## 'rlang::last_warnings' when loading 'hms'
## Assuming stable population before 1950.
## [1] "Chile"
## Stable assumption was made for calculating pi on each year because no input data.
## Assuming stable population before 1950.
## [1] "Guatemala"
## Stable assumption was made for calculating pi on each year because no input data.
## Assuming stable population before 1950.
## [1] "Haiti"
## Stable assumption was made for calculating pi on each year because no input data.
## Assuming stable population before 1950.
# Aproximemos valores para dos sexos usando GKP factors:
period_kin <-
period_kin_temp %>%
approx_two_sex()
## [1] "Note: approx_two_sex only keeps columns with data on kin counts!"
## [1] "Dropping columns: mean_age, sd_age, count_cum_dead, mean_age_lost"
Ahora podemos graficar cambio a travel del tiempo, por ejemplo, en el numero promedio de abuelos que tiene un niño recién nacido:
period_kin %>%
filter(age_focal %in% 0) %>%
select(Location, kin, year, age_focal, count_living) %>%
ggplot(aes(year,count_living,color=Location, shape = Location)) +
geom_line(size = 1) +
geom_point(size = 4) +
labs(x = "Año", y = "Número de abuelos vivos al nacer") +
theme_bw() +
theme(legend.position = "bottom")
Finalmente, que tan común es perder a un abuelo y a qué edad se experimenta la pérdida de un abuelo en los distintos paises? Cómo ha cambiado esto a través del tiempo?
period_kin %>%
filter(
between(age_focal, 1, 50)
, year %in% c(1950, 1980, 2020)
) %>%
mutate(year = as.factor(year)) %>%
ggplot(aes(x = age_focal, y = count_dead, colour = year, group = year, shape = year)) +
geom_line(size = 1) +
geom_point(size = 4, data = . %>% filter(age_focal %in% c(1, seq(0, 50, 10)))) +
labs(x = "Edad de Focal", y = "Número de abuelos que mueren a cada edad", shape = "Año", colour = "Año") +
facet_wrap(~Location) +
theme_bw() +
theme(legend.position = "bottom")
Use DemoKin
(asumiendo una población estable femenina con las tasas
argentinas de 2010) para explorar el número de parientes vivos y muertos
de Focal (un miembro promedio de la población).
Responda: Cuántos hijos tiene Focal a sus 65 años?
# Escriba su código aquí
Responda: Cuántos hijos ha perdido Focal al cumplir 65 años (en total)?
# Escriba su código aquí
La función DemoKin::kin
provee información sobre la edad promedio de
los parientes de Focal (en las columnas kin_summary$mean_age
y
kin_summary$$sd_age
). Por ejemplo, esta es la edad promedio de las
hermanas de Focal:
gt_2015$kin_summary %>%
filter(kin %in% c("os", "ys")) %>%
rename_kin() %>%
select(kin, age_focal, mean_age, sd_age) %>%
pivot_longer(mean_age:sd_age) %>%
ggplot(aes(x = age_focal, y = value, colour = kin)) +
geom_line() +
facet_wrap(~name, scales = "free") +
labs(y = "Edad promedio de hermanas") +
theme_bw()
## Warning: Removed 1 row(s) containing missing values (geom_path).
Instrucciones
Use DemoKin, asumiendo una población estable femenina con las tasas
argentinas de 2010. Estime la edad promedio y la desviación estándar de
las hermanas de Focal a mano (es decir, a partir de los datos en la
data frame kin_full
). Grafique por separado para (1) hermanas menores
y mayores y (2) para todas las hermanas juntas.
Primero, la edad promedio de hermanas menores y mayores por separado:
# Escriba su código aquí
Segundo, la edad promedio de todas las hermanas sin importar su paridad:
# Escriba su código aquí
Cuál es la probabilidad de que Focal (una mujer Argentina promedio) tenga una madre con vida, a lo largo de la vida de Focal?
Instrucciones
Use DemoKin, asumiendo una población estable femenina con las tasas argentinas de 2010, para obtener , la probabilidad de que Focal tenga una madre con vida a la edad de Focal en una población estable. Si Focal sobrevive, es análoga a la probabilidad de sobrevivor en una tabla de mortalidad: deber ser 1 cuando es 0 (la madre esta viva al dar a luz) y luego disminuye de forma monotónica hasta llegar a 0.
Responda: Cuál es la probabilidad de que la madre de Focal sobreviva hasta el cumpleaños 70 de Focal?
# Escriba su código aquí
La ‘Generación Sandwich’ se refiere a personas que se encuentran ‘ensanguchadas’ entre padres mayores e hijos jóvenes que requiren cuidado y atención. Asumimos que esto representa una doble carga de cuidado hacia miembros de ambas generaciones. En demografía, este es un proceso intergeneracional que depende de la posición genealógica de un individuo respecto a la generación superior e inferior.
En este ejercicio, una persona estará ensanguchada si tiene al menos un hijo de edad o menor y (al mismo tiempo) un padre que morirá en los próximos años. Alburez‐Gutierrez, Mason, y Zagheni (2021) defineron la probabilidad de que Focal estuviera ensanguchada a la edad en una población estable así:
donde
- es la fecunidad en la edad y
- es la probabilidad de tener una madre viva a la edad en una población estable.
Este cálculo se refiere a una mujer promedio en una población femenina estable e ignora la mortalidad infantil.
Instrucciones
Use DemoKin para estimar la probabilidad de que Focal esté ensanguchada, , entre las edades 15 y 70. Asuma una población femenina estable usando las tasas de Argentina.
Responda: A qué edad es más probable que Focal esté ensanguchada?
# Escriba su código aquí
sessionInfo()
## R version 4.0.2 (2020-06-22)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19044)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=English_United Kingdom.1252
## [2] LC_CTYPE=English_United Kingdom.1252
## [3] LC_MONETARY=English_United Kingdom.1252
## [4] LC_NUMERIC=C
## [5] LC_TIME=English_United Kingdom.1252
##
## attached base packages:
## [1] grid stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] fields_11.6 spam_2.6-0 dotCall64_1.0-1 ggplot2_3.3.3
## [5] purrr_0.3.4 tidyr_1.1.3 dplyr_1.0.5 DemoKin_1.0.0
##
## loaded via a namespace (and not attached):
## [1] highr_0.8 pillar_1.5.1 compiler_4.0.2 prettyunits_1.1.1
## [5] progress_1.2.2 tools_4.0.2 digest_0.6.28 evaluate_0.17
## [9] lifecycle_1.0.0 tibble_3.1.0 gtable_0.3.0 pkgconfig_2.0.3
## [13] rlang_1.0.2 igraph_1.2.6 cli_3.2.0 DBI_1.1.1
## [17] rstudioapi_0.13 yaml_2.2.1 xfun_0.21 fastmap_1.1.0
## [21] withr_2.5.0 stringr_1.4.0 knitr_1.31 hms_1.0.0
## [25] maps_3.3.0 generics_0.1.0 vctrs_0.4.1 tidyselect_1.1.0
## [29] glue_1.6.2 R6_2.5.0 fansi_0.4.2 rmarkdown_2.7
## [33] farver_2.1.0 magrittr_2.0.1 scales_1.1.1 ellipsis_0.3.2
## [37] htmltools_0.5.2 assertthat_0.2.1 colorspace_2.0-0 labeling_0.4.2
## [41] utf8_1.2.1 stringi_1.5.3 munsell_0.5.0 crayon_1.4.1
Alburez‐Gutierrez, Diego, Carl Mason, and Emilio Zagheni. 2021. “The ‘Sandwich Generation’ Revisited: Global Demographic Drivers of Care Time Demands.” Population and Development Review 47 (4): 997–1023. https://doi.org/10.1111/padr.12436.
Caswell, Hal. 2019. “The Formal Demography of Kinship: A Matrix Formulation.” Demographic Research 41 (September): 679–712. https://doi.org/10.4054/DemRes.2019.41.24.
———. 2020. “The Formal Demography of Kinship II: Multistate Models, Parity, and Sibship.” Demographic Research 42 (June): 1097–1146. https://doi.org/10.4054/DemRes.2020.42.38.
———. 2022. “The Formal Demography of Kinship IV: Two-Sex Models and Their Approximations.” Demographic Research 47 (September): 359–96. https://doi.org/10.4054/DemRes.2022.47.13.
Caswell, Hal, and Xi Song. 2021. “The Formal Demography of Kinship. III. Kinship Dynamics with Time-Varying Demographic Rates.” Demographic Research 45: 517–46.
Keyfitz, Nathan, and Hal Caswell. 2005. Applied Mathematical Demography. New York: Springer.