事件 ID - PRE 和 POST Window - 在 R 中
Event ID - PRE and POST Window - in R
我正在使用市场模型进行事件研究。每个 ISIN 有多个事件。如果“Rating_Change”为“非零”,则有一个事件。我需要的是每个 ISIN 的每个事件的“ID”,以及事件数据的前 window 和 post window。
每个事件都有一个 ID 来标识前事件和 post 事件 windows 应该是 -2:+2 是理想的(在这个例子中,在“真实”中它应该是 -5 :+5).
目前我试过这个......:[=16=]
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)
})
这有一个类似的输出,但是,它只需要前 windows 而不是 window “围绕”事件 - 至少我不知道如何制定语法让 windows 围绕 (-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 个事件(加上前和 post window 数据)。非常感谢任何帮助和支持!!
非常感谢你提前。如果我要澄清任何事情或提供更多细节,请告诉我。
我认为这应该可以解决问题
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,0,0,1,0,0,0,2,0,0,0,4)) %>%
dplyr::mutate(event=cumsum(dplyr::lead(Rating_Change, 2)!=0 & !is.na(dplyr::lead(Rating_Change, 2))))
我正在使用市场模型进行事件研究。每个 ISIN 有多个事件。如果“Rating_Change”为“非零”,则有一个事件。我需要的是每个 ISIN 的每个事件的“ID”,以及事件数据的前 window 和 post window。 每个事件都有一个 ID 来标识前事件和 post 事件 windows 应该是 -2:+2 是理想的(在这个例子中,在“真实”中它应该是 -5 :+5).
目前我试过这个......:[=16=]
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)
})
这有一个类似的输出,但是,它只需要前 windows 而不是 window “围绕”事件 - 至少我不知道如何制定语法让 windows 围绕 (-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 个事件(加上前和 post window 数据)。非常感谢任何帮助和支持!! 非常感谢你提前。如果我要澄清任何事情或提供更多细节,请告诉我。
我认为这应该可以解决问题
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,0,0,1,0,0,0,2,0,0,0,4)) %>%
dplyr::mutate(event=cumsum(dplyr::lead(Rating_Change, 2)!=0 & !is.na(dplyr::lead(Rating_Change, 2))))