Я хочу выбрать людей из контрольного пула, которые будут действовать в качестве контроля для рассматриваемого случая.Лица для контроля отбираются, если их активность / неактивность в течение года соответствует характеру активности обработанного.
Например.Рассмотренный случай имеет: активность в 2009, 2011, но нет активности в 2010 году (поэтому нет записей за этот год).Этот обработанный контроль должен состоять только из лиц, которые также имели активность в 2009 и 2011 годах и не имели активности в 2010 году.
Я смотрю только на 3-летние блоки в схеме обработанной активности.Таким образом, начиная с максимального года, в котором была активность, до 2-х лет до этого.
Если у меня есть отдельные data.tables для обработанного и контрольного пула, как бы мне их сопоставить?
Обработановыглядело бы так:
treated <- data.table(id = c(1, 1, 1, 2, 2, 3, 3, 4),
yr = c(2010, 2011, 2012, 2011, 2012, 2010, 2012, 2013))
id yr
1 2010
1 2011
1 2012
2 2011
2 2012
3 2010
3 2012
4 2013
Контроль
control <- data.table(id = c(rep(5, 6), rep(6, 3), 7, 7, 8, 8, 8),
yr = c(2009:2014, 2011, 2012, 2013, 2010, 2012, 2009, 2013, 2014))
id yr
5 2009
5 2010
5 2011
5 2012
5 2013
5 2014
6 2011
6 2012
6 2013
7 2010
7 2012
8 2009
8 2013
8 2014
Я пытался перевести оба формата в широкий, чтобы можно было создавать NA за недостающие годы, но не смогНе могу понять, как найти соответствие оттуда.
dcast(treated, id ~ yr, value.var = "yr")
id 2010 2011 2012 2013
-----------------------------------
1 2010 2011 2012 NA
2 NA 2011 2012 NA
3 2010 NA 2012 NA
4 NA NA NA 2013
Таким образом, картина активности / неактивности для каждого из обработанных будет:
id pattern
=====================
1 2010 2011 2012
2 NA 2011 2012
3 2010 NA 2012
4 NA NA 2013
dcast(control, id ~ yr, value.var = "yr")
id 2009 2010 2011 2012 2013 2014
----------------------------------------------------
5 2009 2010 2011 2012 2013 2014
6 NA NA 2011 2012 2013 NA
7 NA 2010 NA 2012 NA NA
8 2009 NA NA NA 2013 2014
Так 1
должно совпадать с 5
2
с 6
3
с 7
4
с 8
Может кто-нибудь указатьменя в правильном направлении?
(Не уверен насчет лучшего способа справиться с этим, но сейчас у меня есть функция, которая берет обработанный случай, выбирает индивидуумов для элемента управления и вычисляет эффекты. Поэтому я был бы счастлив со списком идентификаторов элементов управления, которыесопоставить конкретный обработанный случай. Затем я использовал бы эти идентификаторы для подстановки основного управляющего data.table.)
Для ожидаемого вывода , скажем, метод сопоставления был в этой функции:
get_control_ids <- function(treated_id){
...
return(vector_of_control_ids)
}
Тогда выполнение этой функции с идентификатором 1
get_control_ids(1)
приведет к вектору, содержащему идентификаторы управления, соответствующие ему.Поэтому, используя мой крошечный пул управления, функция вернула бы вектор, содержащий всего 5
.
Редактировать: я не уверен, как должен выглядеть вывод.Так что любые советы по этому вопросу тоже пригодятся.Может быть, data.table вроде:
treated_id control_ids
-----------------------------------
1 5, 10, 13
2 6, 22, 23
Для большего контекста у меня есть функция calculate_effects(treated_key)
, которая работает следующим образом:
У меня есть 3 data.tables:
treated
- идентификаторы повторяются с каждым годом активности (плюс другие столбцы)
treated_keys
- уникальные идентификаторы (в моих реальных данных у меня есть два столбца для идентификации конкретного обработанного)
control
Я использую свою функцию calculate_effects(treated_key)
следующим образом:
results <- treated_keys[, calculate_effects(.SD), by = 1:nrow(treated_keys)]
Внутри функции treated
подмножество использует конкретный treated_key
, который будет извлекать все записи, относящиеся к этой конкретной обработаннойcase.
Также внутри функции control
подмножество в соответствии с некоторыми правилами соответствия, а затем используется в вычислениях.
Я хотел бы добавить код в мой calculate_effects(treated_key)
, который будет правильновыберите элемент управления для этого конкретного treated_key
.