有没有办法在一个事件研究中控制同一组的多种治疗?

时间:2021-04-07 10:17:43

标签: r ggplot2

我们正在研究由于更换公司经理而导致的公司回报变化。到目前为止,我们已经编译了一个数据表,看起来像这样:

<头>
公司 经理 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 的使用还很陌生。

0 个答案:

没有答案