【发布时间】:2021-02-21 04:50:32
【问题描述】:
大家!
我将尝试解释我的问题。这对我来说非常困难。我希望你能帮助我:
我有一个数据框,我们称之为 DF1,它看起来像下一个:
|Symbol | Date | Volume | Price|
|----------------------------|-------|
|A |2014-01-01 | 0 | 4 |
|A |2014-01-02 | 7 | 7 |
|A |2014-01-03 | 8 | 9 |
|A |2014-01-04 | 1 | 5 |
|B |2014-01-01 |45 | 6 |
|B |2014-01-02 |0 | 11 |
|B |2014-01-03 |34 | 8 |
|B |2014-01-04 |45 | 5 |
|C |2014-01-01 |4 | 6 |
|C |2014-01-02 |0 | 5 |
|C |2014-01-03 |14 | 25 |
|D |2014-01-01 |31 | 4 |
|D |2014-01-02 |7 | 6 |
|D |2014-01-03 |18 | 3 |
|D |2014-01-04 |15 | 7 |
|E |2014-01-01 |13 | 8 |
|E |2014-01-02 |0 | 9 |
有了这个数据框,我通过以下代码行创建了一个新的数据框,我们称之为 DF2:
RM <- DF1 %>% group_by(Date) %>%
mutate(weight = Volume/sum(Volume),
R_i = weight*(log(Price)-log(lag(Price)))) %>%
summarise(RM = sum(R_i, na.rm = TRUE))
从 RM 中,我只选择我感兴趣的日期:
RM_reg <- subset(RM, date >= "2014-03-05" & date<="2014-09-03")
最后,RM_reg 看起来像这样:
| Date | RM |
|2014-03-05 | 0 |
|2014-03-06 | 7 |
|2014-03-07 | 8 |
|2014-03-08 | 1 |
|2014-03-09 | 45 |
|2014-03-10 | 0 |
|2014-03-11 | 34 |
|2014-03-12 | 45 |
|2014-03-13 | 4 |
|2014-03-14 | 0 |
|2014-03-15 | 14 |
|2014-03-16 | 31 |
需要注意的是,RM_reg 列中的值不是实际值,而只是示例。从我的原始数据框开始,RM_reg 有 125 行。
然后,从数据框 DF1 中,我通过以下代码提取 Company 列等于 A 的行:
DF_A <- DF_1%>%
filter(Symbol=="A")
我通过以下代码向数据框 DF_A 添加一列返回:
RA <- DF_A %>% group_by(Symbol)%>%
mutate(Ret_i = log(Price) - lag(log(Price)))
我消除了第一行,也就是NA:
AR <- na.omit(RA)
从 AR 中,我只选择我感兴趣的日期:
AR_reg <- subset(AR, date >= "2014-03-05" & date<="2014-09-03")
AR_reg 看起来像这样:
|Symbol | Date | volume |price | Ret_i |
|--------------------------------------------|
|A |2014-03-05 | 1 | 5 | 2 |
|A |2014-03-06 | 3 | 8 | 3 |
|A |2014-03-07 | 7 | 4 | 4 |
|A |2014-03-08 |3 | 6 | 5 |
|A |2014-03-09 |34 | 7 | 1 |
|A |2014-03-10 |45 | 34 | 4 |
|A |2014-03-11 |4 | 5 | 3 |
|A |2014-03-12 |9 | 7 | 5 |
|A |2014-03-13 |8 | 6 | 6 |
|A |2014-03-14 |4 | 4 | 1 |
|A |2014-03-15 |0 | 7 | 4 |
|A |2014-03-16 |4 | 7 | 7 |
需要注意的是,AR_reg 列中的值不是实际值,而只是示例。从我的原始数据框开始,AR_reg 也有 125 行。
最后,因为 RM_reg 和 AR_reg 我可以通过以下代码在 RM_reg 的 RM 列上回归 AR_reg 的 Ret_i 列:
mod <- lm(AR_reg$Ret_i ~ RM_reg$RM)
我需要对数据帧 DF1 中的所有符号执行与上述相同的操作,在本例中为“B”、“C”、“D”、“E”。问题是我们没有相同数量的条目,或者对应于所有符号的相同数量的行,这是能够进行回归的必要条件。要进行回归,我需要对每个符号的回报进行 125 次观察。
我的想法是消除生成的类似于 AR_reg 的数据帧没有 125 个条目或行的符号;但事实是我不知道该怎么做,我认为必须提出一个功能,但这是一个我仍然不主导的主题。
非常感谢您阅读我的内容,希望您能理解我。任何帮助或建议将不胜感激
翻译为www.DeepL.com/Translator(免费版)
【问题讨论】:
-
您能否在示例
df1的情况下也包括所需的输出?
标签: r function dataframe for-loop linear-regression