Получение данных кумулятивной смертности из таблицы в R - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть таблица смертей для разных возрастов в год в этом формате:

Year    Age Deaths
1923    1   30
1923    2   22
1923    3   10
1923    4   12
1923    5   4
1923    1   40
1924    2   11
1924    3   10
1924    4   3
1924    5   5
1924    1   40
1924    2   24
1924    3   32
1924    4   12
1924    5   3

Возрастной диапазон для каждого года фактически увеличивается до 100, а лет go до 2020 года, но я сократил таблица в качестве примера. Я хочу ответить на вопрос: «В каком возрасте X % тех, кто родился в 1923 году, больше не живут?» Я знаю, что Y число людей, родившихся в 1923 году. Поэтому, чтобы отследить эту когорту, я хочу прочитать таблицу и найти, сколько 1-летних умерло в 1924 году, сколько 2-летних умерло в 1925 году, и др c. и остановлюсь, когда найду год, в котором X % из Y людей, родившихся в 1923 году, больше не живут.

Есть ли у кого-нибудь какие-либо предложения о том, как выполнить такой кумулятивный подсчет в R, когда я ищу каждый год, и возраст должен увеличиваться на +1 для строки, которую я хочу, в каждый год при подсчете. Я был бы особенно заинтересован в ответах на вопросы (я предполагаю, что они будут включать использование Purr?), Поскольку это то, что я пытался изучить, но любой совет приветствуется.

Заранее благодарим за помощь и предложения.

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Звучит так, как будто вы, возможно, захотите сначала определить когорту, которую может представлять год рождения. Затем вы можете group_by год рождения и рассчитать совокупную смертность. Я составил несколько примеров данных для этого примера.

library(tidyverse)

df %>%
  mutate(BirthYear = Year - Age) %>%
  group_by(BirthYear) %>%
  mutate(CumDeath = cumsum(Deaths)) %>%
  arrange(BirthYear)

Выход

    Year   Age Deaths BirthYear CumDeath
   <dbl> <int>  <int>     <dbl>    <int>
 1  1923     5     42      1918       42
 2  1923     4      3      1919        3
 3  1924     5     25      1919       28
 4  1923     3     14      1920       14
 5  1924     4     14      1920       28
 6  1925     5     28      1920       56
 7  1923     2     15      1921       15
 8  1924     3     37      1921       52
 9  1925     4     27      1921       79
10  1923     1     31      1922       31
11  1924     2     43      1922       74
12  1925     3      5      1922       79
13  1924     1     50      1923       50
14  1925     2     27      1923       77
15  1925     1     26      1924       26

Данные

df <- structure(list(Year = c(1923, 1923, 1923, 1923, 1923, 1924, 1924, 
1924, 1924, 1924, 1925, 1925, 1925, 1925, 1925), Age = c(1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), Deaths = c(31L, 
15L, 14L, 3L, 42L, 50L, 43L, 37L, 14L, 25L, 26L, 27L, 5L, 27L, 
28L)), class = "data.frame", row.names = c(NA, -15L))
1 голос
/ 17 апреля 2020

Может быть, мы можем сделать группу по совокупной сумме

library(data.table)
setDT(df)[, CumDeath := cumsum(Deaths), .(BirthYear = Year - Age)][]

data

df <- structure(list(Year = c(1923, 1923, 1923, 1923, 1923, 1924, 1924, 
1924, 1924, 1924, 1925, 1925, 1925, 1925, 1925), Age = c(1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), Deaths = c(31L, 
15L, 14L, 3L, 42L, 50L, 43L, 37L, 14L, 25L, 26L, 27L, 5L, 27L, 
28L)), class = "data.frame", row.names = c(NA, -15L))
...