【问题标题】:Calculating yearly log return from daily closing price in R for a panel of companies计算一组公司的 R 中每日收盘价的年对数回报
【发布时间】:2021-05-22 05:59:01
【问题描述】:

我有 34 家银行从 2007 年到 2020 年的面板数据集。我需要根据这些银行的每日调整收盘价计算年度对数回报。数据结构如下:

导入到 R 后的日期为 POSIXct 格式,而价格为数字格式。总共有 121323 个观测值。

谁能帮我用代码来计算每日价格的年回报率?其中一个问题是考虑面板数据结构,银行 A 的收益计算必须在最后一个日期结束,而该过程必须对银行 B 重复并在最后一个日期结束,依此类推。在上述数据结构中,银行 A 的回报计算必须在 07-01-2007 结束。我尝试使用 quantmod 但不成功。非常感谢任何帮助。

谢谢

【问题讨论】:

标签: r return panel-data


【解决方案1】:

如果数据采用发布格式,这是一个可行的解决方案。

library(dplyr)

df1 %>%
  mutate(year = format(date, "%Y")) %>%
  group_by(bank, year) %>%
  summarize(LogReturns = log(last(price)) - log(first(price)))

测试数据

library(quantmod)

from <- as.Date("2010-01-01")
to <- Sys.Date()

getSymbols("GOOGL", from = from, to = to)
getSymbols("MSFT", from = from, to = to)

df1 <- data.frame(date = index(GOOGL), price = GOOGL[,4])
df2 <- data.frame(date = index(MSFT), price = MSFT[,4])
names(df1)[2] <- "price"
names(df2)[2] <- "price"
df1$bank <- "GOOGL"
df2$bank <- "MSFT"
df1 <- rbind(df1, df2)
rm(GOOGL, MSFT, df2)

【讨论】:

  • 运行代码后,出现以下错误 - 视图中的错误:mutate()Year 出现问题。 ℹYear = format(Date, "%Y")。未找到 x 对象“日期”
  • 数据结构如下 tibble [88,315 × 3] (S3: tbl_df/tbl/data.frame) $bank : chr [1:88315] "Citi Bank" "Citi Bank" "Citi银行”“花旗银行”...$ 日期:POSIXct[1:88315],格式:“2007-01-02”“2007-01-03”...$ 价格:num [1:88315] 89.2 90 89.2 88.5 89.7 ...
  • @learning_r 您应该将该数据结构发布在更具可读性的问题中,但谢谢。问题是你有小写date,而我的例子有大写DateBank 也是如此。我的模型数据中名为Close 的列是您的price。现已更正,看看是否有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 2019-10-13
  • 2020-09-02
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多