Как применять фоверлапы, когда небольшой интервал находится не в той таблице - PullRequest
1 голос
/ 29 апреля 2019

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

Настройка

Настройка выглядит следующим образом: DT1 включаетдва уникальных идентификатора (gvkey, iid), установленные даты перебалансировки портфеля (RDt) и набор фиктивных переменных на основе предыдущих расчетов / ранжирования.

DT2 включает полный список ежедневных возвратов акций для каждого gvkey иiid комбинация

DT1 <- data.table(gvkey = rep(LETTERS[1:20],20), 
                  RDt = rep(ymd("1998-06-30") + years(0:19),each=20), 
                  indicator_1 = sample(0:1,400,replace = TRUE), 
                  indicator_k = sample(0:1,400,replace = TRUE))
DT2 <- data.table(gvkey = rep(LETTERS[1:20],20,length.out=7275),
                  datadate = seq(ymd("1998-01-30"), ymd("2017-12-30"), by="days"), 
                  log_ret = rlnorm(7275))
#Note for laziness I have left weekends in and have excluded second identifier (iid) 

Я хочу скопировать все фиктивные переменные в DT1 в DT2 на основе 6-месячного окна вокруг RDt, так что, учитывая:

DT1[gvkey=="A" & RDt =="1998-06-30"]

   gvkey        RDt indicator_1 indicator_k
1:     A 1998-06-30           1           0

Подмножествообъединенная таблица (DT3):

DT3[gvkey=="A" & between(datadate,"1998-01-01", "1998-06-30")]

В результате получается что-то похожее на результат:

DT3 <- data.table(gvkey = rep("A",181), "datadate" = seq(ymd("1998-01-01"), ymd("1998-06-30"), by="days"), log_ret = rlnorm(181),indicator_1=1, indicator_k=0 )

Чтобы достичь этого, я попробовал следующее:

Попытка первая:

#(only pre-event window is included here)
DT1[, ":=" ('reg_pre_start' = Last.Day(RDt - month(6)),
            'reg_pre_end' = Last.Day(RDt - month(1)),
            'RDt_Dummy' = RDt)]
DT2[, 'Datadate_Dummy' := datadate] #Daily dates

setkey(DT1, gvkey, iid, reg_pre_start, reg_pre_end) #6 month interval
setkey(DT2, gvkey, iid, datadate, Datadate_Dummy) #Zero day interval


DT3 <- foverlaps(DT1, DT2, type='within', nomatch=0L)

Попытка вторая:

Я дополнительно попробовал следующее объединение:

DT3 <- DT1[DT2, on = c("gvkey", "iid", "reg_pre_start<=datadate", "reg_pre_end>=datadate"), .SD, by = .EACHI, nomatch = 0, allow.cartesian = TRUE]

Оба результата приводятся в таблице слияния только в дни RDt = datadate

Я подозреваю, что проблема имеет что-тов соответствии с интервалами, установленными в нетрадиционной таблице

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...