forked from alburezg/ALAP2022_taller_parentesco
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.Rmd
829 lines (624 loc) · 25.8 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
---
title: "Demografía del parentesco: introducción a temas y métodos"
author: "Facilitador: Diego Alburez-Gutierrez (MPIDR);"
date: "Pre-evento del X Congreso ALAP; Valparaíso, Chile - 6 Dic 2022"
output:
github_document:
pandoc_args: --webtex
toc: true
toc_depth: 2
bibliography: kinship.bib
---
<!-- Collapse code chunks: -->
<!-- https://gist.github.com/joyrexus/16041f2426450e73f5df9391f7f7ae5f#file-readme-md -->
# Primera parte: Introducción a la Demografía del Parentesco
Las diapositivas para la primera parte del minicurso están disponibles [aquí](diapositivas/alap_presentacion_parentesco.pdf).
# Segunda parte: modelos de parentesco en R
<img src="DemoKin-Logo.png" align="right" width="200" />
## 1. Instalación
### 1.1 Instalación de DemoKin
Instale el paquete `DemoKin` [desde GitHub](https://github.com/IvanWilli/DemoKin) (puede tomar ~1 minuto).
```{r, eval=FALSE}
# remove.packages("DemoKin")
# install.packages("devtools")
devtools::install_github("IvanWilli/DemoKin", build_vignettes = TRUE)
```
### 1. 2. Otros paquetes
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.
```{r, warning=F, message=FALSE}
library(DemoKin)
library(dplyr)
library(tidyr)
library(purrr)
library(ggplot2)
library(fields)
```
### 1.3. Defina algunas funciones para los ejercicios
Una función para descargar datos de Naciones Unidas (UNWPP2022) usando el API:
<details><summary><b>MOSTRAR CODIGO</b></summary>
<p>
```{r}
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
}
```
</p>
</details>
Una función para mostrar nombre de parientes en español (con una ligera modificaión respecto a `DemoKin::rename_kin`:
<details><summary><b>MOSTRAR CODIGO</b></summary>
<p>
```{r}
# 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
}
```
</p>
</details>
Una función que nos permite aproximar parientes masculinos y femeninos usando "factores GKP":
<details><summary><b>MOSTRAR CODIGO</b></summary>
<p>
```{r}
# 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)]
}
```
</p>
</details>
## 2. Cómo descargar datos de Naciones Unidas para este taller
Vamos a usar el API del [World Population Prospects 2022](https://population.un.org/wpp/) 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:
```{r}
# 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
)
```
### 2. Visualizar los datos
Primero, transformamos los datos a matrices, el formato que DemoKin requiere:
```{r}
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()
```
#### 2.1. `px` matriz; probabilidades de supervicencia por edad (argumento *U* en DemoKin)
Así se ven los datos:
```{r}
gt_px[1:4, 1:4]
```
Grafiquemos sobre tiempo y edad:
```{r}
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"
)
```
#### 2.2. `gt_asfr` matriz; tasas específicas de fecundidad (argumento *f* en DemoKin)
Así se ven los datos:
```{r}
gt_asfr[15:20, 1:4]
```
Grafiquemos sobre tiempo y edad:
```{r}
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)"
)
```
## 3. La función `kin()`
`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`):
```{r}
# 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)
```
### 3.1. Argumentos de la función
- **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, ...
### 3.2. Tipos de parientes
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 [-@caswell_formal_2019].
Esta es la equivalencia de los códigos:
```{r}
demokin_codes()
```
### 3.4. Valor
`DemoKin::kin()` produce una lista con dos data frames: `kin_full` y `kin_summary`.
```{r}
str(gt_2015)
```
#### `kin_full`
Esta data frame contiene el número esperado de parientes por tipo de pariente, año/cohorte, edad de Focal y edad del pariente.
```{r}
head(gt_2015$kin_full)
```
#### `kin_summary`
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`:
<details><summary>MOSTRAR CODIGO</summary>
<p>
```{r, message=F}
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)
)
```
</p>
</details>
## 4. Demostración: tamaño de redes familiares en Guatemala (poblaciones estables)
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.
```{r}
# 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)
```
### 4.1. Diagrama de parentesco al estilo 'Keyfitz'
Usamos la función `plot_diagram` para visualizar el número implícito de parientes de Focal cuando ella tiene 35 años [@Keyfitz2005]:
```{r, fig.height=10, fig.width=12}
gt_2015$kin_summary %>%
filter(age_focal == 35) %>%
select(kin, count = count_living) %>%
plot_diagram(rounding = 2)
```
### 4.2. Parentela viva
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).
```{r, fig.height=6, fig.width=8}
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:
```{r}
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")
```
### 4.3. Distribución etaria de la parentela con vida
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:
```{r, fig.height=6, fig.width=8}
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)
```
### 4.4. Pérdidas familiares
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.
```{r}
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")
```
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.
```{r}
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")
```
Por ejemplo, cuando Focal alcanza los 15, 50 y 65 años de edad, habrá perdido un promedio de `r loss2 %>% filter(age_focal %in% c(15, 50, 65)) %>% pull(count) %>% round(1) %>% paste(., collapse = ", ")` parientes.
## 5. Viñeta y extensiones
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_formal_2019],
- modelos multistate [@caswell_formal_2020],
- poblaciones no estables [@caswell_formal_2021], and
- modelos con dos sexos [@caswell_formal_2022].
# Ejercicios
## Ejercicio 1: Parentesco en América Latina (poblaciones estables)
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:
```{r}
# 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
)
```
Corramos los modelos de parentesco para estos países, asumiendo una población estable femenina.
```{r}
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))
})
```
Ahora podemos visualizar algunos la estructura de parentesco en estos países. Comenzamos con la estructura familiar:
```{r}
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")
```
Cuántas pérdidas familiares experimenta una persona a la edad exacta 'x' en distintos paises de LATAM?
```{r}
exact_death <-
period_kin %>%
approx_two_sex() %>%
rename_kin2(consolidate_column = "count_dead")
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:
```{r}
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")
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:
```{r}
exact_line <-
exact_death %>%
filter(age_focal>0) %>%
group_by(Location, age_focal) %>%
summarise(count = sum(count)) %>%
ungroup() %>%
mutate(variable = "A cada edad")
cum_line <-
cum_death %>%
filter(age_focal>0) %>%
group_by(Location, age_focal) %>%
summarise(count = sum(count)) %>%
ungroup() %>%
mutate(variable = "Acumulado")
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")
```
## Ejercicio 2: Abuelos en poblaciones no estables
```{r}
# 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
)
```
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.
```{r}
# 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)
})
# Aproximemos valores para dos sexos usando GKP factors:
period_kin <-
period_kin_temp %>%
approx_two_sex()
```
Ahora podemos graficar cambio a travel del tiempo, por ejemplo, en el numero promedio de abuelos que tiene un niño recién nacido:
```{r}
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?
```{r}
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")
```
## Ejercicio 3. Parientes vivos y muertos
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?
```{r}
# Escriba su código aquí
```
**Responda**: Cuántos hijos ha perdido Focal al cumplir 65 años (en total)?
```{r}
# Escriba su código aquí
```
## Ejercicio 4. Edad promedio de los parientes
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:
```{r}
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()
```
**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:
```{r}
# Escriba su código aquí
```
Segundo, la edad promedio de todas las hermanas sin importar su paridad:
```{r}
# Escriba su código aquí
```
## Ejercicio 5. Madres
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 $M_1(a)$, la probabilidad de que Focal tenga una madre con vida a la edad $a$ de Focal en una población estable. Si Focal sobrevive, $M_1{(a)}$ es análoga a la probabilidad de sobrevivor en una tabla de mortalidad: deber ser 1 cuando $a$ 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?
```{r}
# Escriba su código aquí
```
## Ejercicio 6. Generación Sandwich
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 $15$ o menor y (al mismo tiempo) un padre que morirá en los próximos $5$ años. Alburez‐Gutierrez, Mason, y Zagheni [-@alburezgutierrez_sandwich_2021] defineron la probabilidad de que Focal estuviera ensanguchada a la edad $a$ en una población estable así:
$$
S(a) = \underbrace{\left(1 - \prod_{x=1}^{15} [1 - m_{a-x})] \right)}_{\substack{\text{fecundidad en los}\\ \text{$15$ anios antes de edad 'a'}}} \times \underbrace{M_1(a)}_{\substack{\text{Prob. que madre de Focal}\\ \text{este viva cuando Focal tiene 'a' anios}}} \times \underbrace{\left(1- \frac{M_1(a+5)}{M_1(a)}\right)}_{\substack{\text{Prob. que madre de Focal}\\ \text{muera en proximos $5$ anios}}}
$$
donde
- $m_{a-x}$ es la fecunidad en la edad $a-x$ y
- $M_1(a)$ es la probabilidad de tener una madre viva a la edad $a$ 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, $S(a)$, 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?
```{r}
# Escriba su código aquí
```
## Session info
```{r}
sessionInfo()
```
## References