時間序列

將每日簡單回報轉化為每週

  • December 16, 2015

我正在嘗試將每日簡單收益轉換為每週收益。我正在使用以下 R 程式碼:

library(zoo)
tt <- seq(Sys.Date(), by='day', length=365)
vals <- data.frame(A=runif(365), B=rnorm(365), C=1:365)
z <- zoo(vals, tt)
week <- function(x)format(x, '%Y.%W')
dailytoweekly <- function(x) (prod(x+1)-1)
aggregate(z, by=week, FUN=dailytoweekly)

基於這篇文章:https ://stackoverflow.com/questions/16442396/convert-daily-to-weekly-monthly-data-with-r 。

該函式dailytoweekly是根據簡單返回的時間加性屬性編寫的。令我困惑的是結果:

2015.50 19.7687016 -0.88561787 5.039000e+03
2015.51 19.8390703 -1.21981217 1.729728e+07
2015.52  4.9931289 -1.76381705 7.343900e+04
2016.00  2.2251422  2.98725821 7.979000e+03
2016.01 15.9745238 -1.33997280 5.967562e+09
2016.02 15.3588303 -0.91805535 3.389158e+10

為什麼結果中有第 0 週,它應該代表什麼?因為總共有 53 週,指數從 0 到 52(含)。對此問題的任何幫助將不勝感激:)

為什麼結果中有第 0 週,它應該代表什麼?

答案在?strptime

‘%W’ 以十進制數 (00-53) 表示的一年中的一周,使用星期一作為一周的第一天(通常將一年中的第一個星期一作為第 1 週的第 1 天)。英國公約。

也許您期待其他格式之一的輸出?

‘%U’ 以十進制數 (00-53) 表示的一年中的星期,使用星期日作為一周的第一天(通常將一年中的第一個星期日作為第一周的第一天)。美國公約。

‘%V’ 按照 ISO 8601 中定義的十進制數 (01-53) 表示一年中的第幾週。如果包含 1 月 1 日的那一周(從星期一開始)在新年中有四天或更多天,則將其視為第 1 週。否則,它是上一年的最後一周,下一周是第 1 週。(接受但在輸入時忽略。)


你可以試試看xts::apply.weekly能否解決你的問題。使用它將避免您的問題中的問題。

引用自:https://quant.stackexchange.com/questions/22346