微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

每月对数回报中每日价格的转换

如何解决每月对数回报中每日价格的转换

我正在尝试从“Reproducible Finance with R”一书中复制代码。除了以下部分外,一切都很好。

asset_returns_tbltime <-
prices %>%
tk_tbl(preserve_index = TRUE,rename_index = "date") %>%
as_tbl_time(index = date) %>%
as_period(period = "month",side = "end") %>%
gather(asset,returns,-date) %>%
group_by(asset) %>%
tq_transmute(mutate_fun = periodReturn,type = "log") %>%
spread(asset,monthly.returns) %>%
select(date,symbols)

在字符串之后给了我以下错误 tq_transmute(mutate_fun = periodReturn,type = "log")

Error: Can't subset columns that don't exist. Column "asset" doesn't exist. Run rlang::last_error() to see where the error occurred. In addition: Warning message: "..." must not be empty for ungrouped data frames. Did you want data = everything()?

数据来自以下代码

symbols <- c("SPY","EFA","IJS","EEM","AGG")
prices <-
getSymbols(symbols,src = 'yahoo',from = "2012-12-31",auto.assign = TRUE,warnings = FALSE) %>%
map(~Ad(get(.))) %>%
reduce(merge) %>%
`colnames<-`(symbols)

如果有人能将我的注意力指向代码(或其他东西)的问题,我觉得我已经迷路了,那就太好了。

解决方法

如果您使用更新的 pivot_longerpivot_wider 函数而不是已停用的 gatherspread,这会起作用。

library(tidyverse)
library(tibbletime)
library(tidyquant)
library(quantmod)

prices %>%
  tk_tbl(preserve_index = TRUE,rename_index = "date") %>%
  as_tbl_time(index = date) %>%
  as_period(period = "month",side = "end") %>%
  pivot_longer(cols = -date,names_to = 'asset',values_to = 'returns') %>%
  group_by(asset) %>%
  tq_transmute(mutate_fun = periodReturn,type = "log") %>%
  pivot_wider(names_from = asset,values_from = monthly.returns) %>%
  select(date,symbols)

#   date           SPY     EFA      IJS      EEM       AGG
#   <date>       <dbl>   <dbl>    <dbl>    <dbl>     <dbl>
# 1 2012-12-31  0       0       0        0        0       
# 2 2013-01-31  0.0499  0.0366  0.0521  -0.00294 -0.00623 
# 3 2013-02-28  0.0127 -0.0130  0.0162  -0.0231   0.00589 
# 4 2013-03-28  0.0373  0.0130  0.0403  -0.0102   0.000985
# 5 2013-04-30  0.0190  0.0490  0.00122  0.0121   0.00964 
# 6 2013-05-31  0.0233 -0.0307  0.0420  -0.0495  -0.0202  
# 7 2013-06-28 -0.0134 -0.0271 -0.00140 -0.0547  -0.0158  
# 8 2013-07-31  0.0504  0.0519  0.0635   0.0132   0.00269 
# 9 2013-08-30 -0.0305 -0.0197 -0.0347  -0.0257  -0.00830 
#10 2013-09-30  0.0312  0.0753  0.0639   0.0696   0.0111  
# … with 94 more rows

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。