问题描述
我在 R 中有一个更复杂的问题,希望你能帮助我。我正在尝试在两个数据表和许多不同的时间范围内创建线性回归。
为了更准确地解释我的问题,我将包括我现在拥有的两个数据集
交易编号 | 公告日期 | ... | ... | ... | CUSIP (ID) | ... |
---|---|---|---|---|---|---|
2157920020 | 2010-02-21 | ... | ... | ... | 589499102(=CUSIP ID 3) | ... |
2164370020 | 2010-03-14 | ... | ... | ... | 705573103 | ... |
2166589020 | 2010-03-21 | ... | ... | ... | 46069S109 | ... |
... | ... | ... | ... | ... | ... | ... |
数据集“daily_return”包括来自并购交易收购方股价的每日回报(其中一列是2009-01-05 - 2020-12-31时间段内一只股票的回报):
日期 | CUSIP (ID) 1 (002824100) | CUSIP (ID) 2 (00430U103) | CUSIP (ID) 3 (589499102) | ... | ... | 基准指数 |
---|---|---|---|---|---|---|
2009-01-05 | -0.01717700 | 0.0022422 | -0.038760 | ... | ... | 0.016764 |
2009-01-06 | -0.03267477 | -0.0044743 | 0.016129 | ... | ... | 0.033647 |
2009-01-07 | -0.00549882 | -0.1146067 | 0.031746 | ... | ... | -0.022271 |
2009-01-08 | 0.01105845 | 0.0329949 | 0.0076923 | ... | ... | 0.011896 |
2009-01-09 | -0.00058594 | -0.0491400 | 0.046512 | ... | ... | -0.018748 |
2009-01-12 | -0.02169240 | -0.0051680 | -0.022222 | ... | ... | -0.026589 |
... | ... | ... | ... | ... | ... | ... |
... | ... | ... | ... | ... | ... | ... |
2020-12-31 | 0.03292349 | -0.0031726 | -0.1029381 | ... | ... | 0.0213947 |
我想在基准上创建不同证券的线性回归。但是,回归中使用的估计窗口应始终具有相同的 253 天长度,并且应在单个公告日期之前的 283 天开始。我为 CUSIP ID 3 做了一个例子。回归是从 [3:255] 行开始,因为第 3 行是公告前 283 天,第 255 行是公告前 31 天。
linear_model <- lm(daily_return$`589499102`[3:255] ~ daily_return$`Benchmark Index`[3:255])
我能够通过 which 函数“自动化”行号,所以我自动获得行号:
which(strategic_return$Date == "2010-02-22")-283
--> 返回第 3 行
which(strategic_return$Date == "2010-02-22")-31
--> 返回第 255 行
我现在的问题是梳理和自动化上述步骤:
- 代码应从“交易”数据集的顶部开始,并在表格中标识第一笔交易的公布日期。例如。确认第一行 CUSIP 589499102 的公告日期为 2010-02-21。
- 接下来,它应该在“daily_return”表上确定正确的列,因为它们没有相同的订单,并且一些收购方在过去 11 年内有不止一笔交易(例如,这将是第 4 列)。 “交易”数据集中的列 CUSIP (ID) 包含与“daily_return”数据集的标题完全相同的内容。
- 由于日期已经确定(步骤 1),现在应该能够找出回归的时间范围,即 [公告日 -283 : 公告日 -31 ]i>
- 有了这些信息,应该能够对单个股票进行回归并存储结果
- 对“交易”中的所有行重复这些步骤
还有一个障碍需要解决,因为交易数据框中的公告日期可能是周末,例如2010 年 2 月 21 日,而此日期不在 daily_returns 数据框中(因为它是周末)。在这种情况下,它应该只计算下一个可用日期,例如2010-02-22。
我知道很多,我不确定它是否可行。但也许有人知道如何进行。
非常感谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)