我们正在研究由于更换公司经理而导致的公司回报变化。到目前为止,我们已经编译了一个数据表,看起来像这样:
公司 | 经理 | 月 | Eventwindow | 返回 |
---|---|---|---|---|
1 | 1 | 2015-05-31 | -3 | 83.1 |
1 | 1 | 2015-06-30 | -2 | 82.5 |
1 | 1 | 2015-07-31 | -1 | 82.7 |
1 | 2 | 2015-08-31 | 0 | 81.4 |
1 | 2 | 2015-09-30 | 1 | 78.0 |
1 | 2 | 2015-10-31 | 2 | 75.2 |
1 | 2 | 2015-11-30 | 3 | 75.1 |
1 | 2 | 2015-12-31 | -3 | 74.3 |
1 | 2 | 2016-01-31 | -2 | 78.2 |
1 | 2 | 2016-02-29 | -1 | 69.4 |
1 | 3 | 2016-03-31 | 0 | 63.1 |
1 | 3 | 2016-04-30 | 1 | 62.3 |
1 | 3 | 2016-05-31 | 2 | 60.5 |
1 | 3 | 2016-06-30 | 3 | 46.7 |
1 | 3 | 2016-07-31 | -3 | 43.9 |
1 | 3 | 2016-08-31 | -2 | 39.2 |
1 | 3 | 2016-09-30 | -1 | 38.4 |
1 | 4 | 2016-10-31 | 0 | 35.6 |
1 | 4 | 2016-11-30 | 1 | 31.8 |
1 | 4 | 2016-12-31 | 2 | 40.0 |
1 | 4 | 2017-01-31 | 3 | 44.1 |
在 this 线程中 Gregor Thomas 和 Wimpel 的大力帮助下,我们使用此代码实现了上述数据表:
DT <- fread("Firm Manager Month Eventdate Change
1 1 2015-05-31
1 1 2015-06-30
1 1 2015-07-31
1 2 2015-08-31 0
1 2 2015-09-30
1 2 (...) "
#add id 列
DT <- DT[, id := .I ]
#set key 加入
setkey(DT, id)
#perform 滚动连接到最近的 Change == 0,获取 id 并减去
DT <- DT[, change2 := id - DT[Eventdate == 0, ] [DT, x.id, roll = "nearest"]]
,其中 change2
是具有滚动连接的列。
从第一个表中,您可能会看到我们有多个处理日期,即同一公司在多个时间点 Eventwindow
= 0。因此,当我们绘制回报时,我们有例如83.1、74.9 和 43.9 作为“-3”的观测值,依此类推。
在运行 ggplot 时是否有可能以某种方式将这三种效果彼此分开?到目前为止,我们已经使用以下代码进行绘图,但似乎由于每个事件日期在公司内部和公司之间都有许多“重复”,因此只返回了一条非常平坦的线。使用“facet_wrap = (~Firm)”时,回报差异更大。
frame <- data.frame(DT$change2, DT$Return)
as.numeric(frame$DT.Active_Share)
final <- ggplot(data = frame) +
geom_smooth(mapping = aes(x = DT$change2,
y = DT$Return)) +
ylab("Return") +
xlab("Time") +
xlim(-12, 12) +
ylim(-100.0000, 100.00000) +
ggtitle("Return before and after change")
final
编辑 1: 根据要求,这里有一些可重现的数据:
structure(list(Group_Investment = c("Firm 1", "Firm 1",
"Firm 1", "Firm 1", "Firm 1", "Firm 1"
),
ISIN = c("NO123", "NO123", "NO123", "NO123",
"NO123", "NO123"), FundId = c("FS321", "FS321",
"FS321", "FS321", "FS321", "FS321"),
SecId = c("FS231",
"FS231", "FS231", "FS231", "FS231", "FS231"
),
ManagerName = c("John Doe", "John Doe", "John Doe",
"Don Joe", "Don Joe", "Don Joe"),
change2 = -3:2,
Month = structure(c(16586, 16616, 16647, 16678, 16708,
16739), class = c("IDate", "Date")),
Return = c(83.10196,
80.62931, 80.36999, 73.73783, 75.22196, 73.36678),
Manager_Status = c("sole_manager",
"sole_manager", "sole_manager", "sole_manager", "sole_manager",
"sole_manager")),
.internal.selfref = <pointer: 0x000001b14db01ef0>, row.names = c(NA,
-6L), class = c("data.table", "data.frame"))
欢迎任何帮助,因为我们对 R 的使用还很陌生。