每月日志中每日价格的转换 returns
Transformation of daily prices in monthly log returns
我正在尝试复制一本书“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_longer
和 pivot_wider
函数而不是停用的 gather
和 spread
函数,则此方法有效。
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
我正在尝试复制一本书“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_longer
和 pivot_wider
函数而不是停用的 gather
和 spread
函数,则此方法有效。
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