Генерация переменной времени наблюдения от возраста в наборе продольных данных? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть набор данных, который состоит из различных непрерывных и категориальных переменных. Однако у меня нет последующей переменной времени, которую я хотел бы создать. Мой набор данных в настоящее время находится в широком формате, и есть 8 волн возраста и 8 волн, записывающих рассматриваемое событие, которое составляет dementia_1. Переменные деменции двоично закодированы как 1 и 0. Как бы я использовал их для переменных два генерировать переменную время до события?

Вот как выглядят данные:

'data.frame':   18528 obs. of  1365 variables:
 $ idauniq             : int  100001 100005 100006 100007 100009 100010 100012 100016 100018 100021 ...
 $ age_1               : int  NA NA NA NA NA NA NA NA NA NA ...
 $ age_2               : int  52 NA NA 56 NA NA NA NA 50 54 ...
 $ age_3               : int  54 NA NA 58 66 NA 58 55 52 56 ...
 $ age_4               : int  56 NA 57 60 68 NA 60 57 NA NA ...
 $ age_5               : int  58 64 59 62 70 NA 62 NA NA 60 ...
 $ age_6               : int  NA NA 61 64 72 NA NA NA NA 62 ...
 $ age_7               : int  63 NA NA 66 74 NA NA NA NA NA ...
 $ age_8               : int  NA NA NA 68 NA NA 69 NA NA NA ...
 $ sex                 : int  1 1 1 1 1 1 1 2 1 2 ...
 $ education           : int  1 1 1 1 1 1 2 NA 3 2 ...
 $ dementia_1          : ini  1 0 1 1 1 1 2 NA 1 NA ...

Я бы ожидал, что у меня будет переменная, обозначающая время, за которое каждый человек получает слабоумие.

1 Ответ

0 голосов
/ 11 июня 2019

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

library(tidyverse)

# Generate Sample Data

dat <- tibble(id = 1:50,
              age_1 = rnorm(50, 50, 2)) %>%
  mutate(
    age_2 =  age_1 + 5,
    age_3 =  age_2 + 5,
    age_4 =  age_3 + 5,
    age_5 =  age_4 + 5
  ) %>%
  add_column(dementia = rbinom(50, 1, .1))

# Now get data in long format to do the calculations
dat_2 <- dat %>% 
  gather(wave, age, contains("age"))


dat_2 %>% 
  group_by(id, dementia) %>% 
  filter(dementia==1) %>% # Diagnoses
  filter(age == min(age)) %>% 
  rename(age_at_diagnosis = age)# Age first appeared

Это предоставит вам следующее:

# A tibble: 5 x 4
# Groups:   id, dementia [5]
     id dementia wave  age_at_diagnosis
  <int>    <int> <chr>            <dbl>
1     7        1 age_1             52.3
2    13        1 age_1             50.6
3    24        1 age_1             50.8
4    34        1 age_1             52.5
5    35        1 age_1             50.3

Теоретически вы можете взять этот фрейм данных и затем присоединить его к умершему времени или с минимальным возрастом в наборе данных.

first_diagnosis <- dat_2 %>% 
  group_by(id, dementia) %>% 
  filter(dementia==1) %>% # Diagnoses
  filter(age == min(age)) %>% 
  ungroup() %>% 
  rename(age_at_diagnosis = age)# Age first appeared

age_first_age <- dat_2 %>% 
  group_by(id, dementia) %>% 
  filter(age == min(age)) # Age first appeared

age_first_age %>% 
  left_join(first_diagnosis %>% 
              select(id, age_at_diagnosis), by = "id") %>% 
  mutate(time_to_event = age_at_diagnosis - age)

Что даст вам что-то похожее на это:

# A tibble: 50 x 6
# Groups:   id, dementia [50]
      id dementia wave    age age_at_diagnosis time_to_event
   <int>    <int> <chr> <dbl>            <dbl>         <dbl>
 1     1        0 age_1  45.8             NA              NA
 2     2        0 age_1  46.7             NA              NA
 3     3        0 age_1  49.0             NA              NA
 4     4        0 age_1  53.4             NA              NA
 5     5        0 age_1  47.4             NA              NA
 6     6        0 age_1  49.1             NA              NA
 7     7        1 age_1  52.3             52.3             0
 8     8        0 age_1  49.6             NA              NA
 9     9        0 age_1  52.1             NA              NA
10    10        0 age_1  54.4             NA              NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...