问题描述
我正在使用市场模型进行事件研究。每个 ISIN 有几个事件。如果“rating_Change”为“非零”,则有一个事件。我需要的是每个 ISIN 的每个事件以及事件数据的前窗口和后窗口的“ID”。 理想情况下,每个事件都有一个 ID 来标识事件前和事件后窗口,该窗口应该是 -2:+2(在示例中,在“真实”中,它应该是 -5:+5)。
目前我尝试了这个......:
testing1 <- testing %>%
group_by(ISIN) %>%
mutate(event=cumsum(rating_Change!=0 & !is.na(rating_Change)))
...并收到以下输出:
Date ISIN R STOXX_Return rating_Change rating event
<date> <fct> <dbl> <dbl> <dbl> <fct> <int>
3 2016-10-01 CH00 0.0175 -0.000375 0 A 0
4 2016-11-01 CH00 -0.0734 -0.0221 0 A 0
5 2016-12-01 CH00 -0.0107 0.0183 0 A 0
6 2017-01-01 CH00 0.0457 0.0642 1.9 A 1
7 2017-02-01 CH00 0.0208 0.000647 0 A 1
8 2017-03-01 CH00 0.0352 0.0364 0 A 1
...
15 2017-11-01 CH00 -0.0780496 0.0179349 0 A 1
16 2017-12-01 CH00 0.0688210 -0.0312227 0 A 1
17 2018-01-01 CH00 -0.0064685 0.0144049 -0.90 A 2
18 2018-02-01 CH00 -0.0997418 0.0119439 0 A 2
19 2018-03-01 CH00 -0.0203781 -0.0463974 0 A 2
...
45 2017-02-01 GB00 0.0056672 0.0006471 0 B+ 1
46 2017-03-01 GB00 0.0028146 0.0364348 0 B+ 1
47 2017-04-01 GB00 0.0366418 0.0144673 3.66 B+ 2
48 2017-05-01 GB00 0.0745412 0.0242931 0 B+ 2
49 2017-06-01 GB00 0.1555046 0.0222243 0 B+ 2
...
我也用以下方法试过了:
filter_lmco_<- within(testing,{
event <- if_else(rating_Change!=0,1,0)
event <- ave(event,lag(ISIN),FUN=cumsum)
event <- ifelse(rating_Change != 0,event-1,event)
})
这有一个类似的输出,但是,它只需要前窗口而不是窗口“围绕”事件 - 至少我不知道如何制定语法来让窗口围绕(-2:+ 2) 事件。
在这里,我向您展示我真正需要的东西:
Date ISIN R STOXX_Return rating_Change rating event
<date> <fct> <dbl> <dbl> <dbl> <fct> <int>
3 2016-10-01 CH00 0.0175 -0.000375 0 A 0
4 2016-11-01 CH00 -0.0734 -0.0221 0 A 1
5 2016-12-01 CH00 -0.0107 0.0183 0 A 1
6 2017-01-01 CH00 0.0457 0.0642 1.9 A 1
7 2017-02-01 CH00 0.0208 0.000647 0 A 1
8 2017-03-01 CH00 0.0352 0.0364 0 A 1
...
15 2017-11-01 CH00 -0.0780496 0.0179349 0 A 2
16 2017-12-01 CH00 0.0688210 -0.0312227 0 A 2
17 2018-01-01 CH00 -0.0064685 0.0144049 -0.90 A 2
18 2018-02-01 CH00 -0.0997418 0.0119439 0 A 2
19 2018-03-01 CH00 -0.0203781 -0.0463974 0 A 2
...
45 2017-02-01 GB00 0.0056672 0.0006471 0 B+ 1
46 2017-03-01 GB00 0.0028146 0.0364348 0 B+ 1
47 2017-04-01 GB00 0.0366418 0.0144673 3.66 B+ 1
48 2017-05-01 GB00 0.0745412 0.0242931 0 B+ 1
49 2017-06-01 GB00 0.1555046 0.0222243 0 B+ 1
...
有没有人有解决这个问题的想法或方法?总而言之,我有大约 1600 个事件(加上窗口前和窗口后数据)。非常感谢任何帮助和支持!! 非常感谢你。如果我要澄清任何事情或提供更多细节,请告诉我。
解决方法
我认为这应该可以解决问题
testing1 <- testing %>%
group_by(ISIN) %>%
mutate(event=cumsum(lead(Rating_Change,2)!=0 & !is.na(lead(Rating_Change,2))))
在这种情况下它适用于一些虚拟数据
tibble::tibble(
Rating_Change = c(0,1,2,4)) %>%
dplyr::mutate(event=cumsum(dplyr::lead(Rating_Change,2)!=0 & !is.na(dplyr::lead(Rating_Change,2))))