【问题标题】:reading monthly returns in R在 R 中读取月度回报
【发布时间】:2012-03-09 18:14:07
【问题描述】:

我在“equity.dat”文件中有以下每月净值数据:

2010-03,1e+06
2010-03,1.00611e+06
2010-04,998465
2010-05,1.00727e+06
2010-06,1.00965e+06

我正在尝试使用以下代码计算每月回报:

library(PerformanceAnalytics)
y = Return.read(filename="equity.dat", frequency = "m", sep=",", header=FALSE)
y

z = Return.calculate(y)
z
z[1]=0 #added this to remove the NA in first return

但我收到以下错误:

Error in read.zoo(filename, sep = sep, format = format, FUN = FUN, header = header,  : 
  index has bad entries at data rows: 1 2 3 4 5

我在使用 as.mon 时检查了 Return.read 的格式,这就是我使用 yyyy-mm 的原因。我应该使用其他格式吗?

【问题讨论】:

    标签: r time-series


    【解决方案1】:

    根据?Return.read,这里的默认format.in= 是"%F",这不是您的数据格式,因此必须指定。此外,索引必须是唯一的(在这种情况下不是唯一的),否则它必须按照 ?zoo 和 ?read.zoo 进行聚合,后者在内部使用:

    Return.read(filename = "equity.dat", frequency = "m", sep = ",", header = FALSE, 
      aggregate = function(x) tail(x, 1), format = "%Y-%m")
    

    我们使用tail 来定义聚合函数——您可能希望也可能不希望使用其他东西。

    【讨论】:

    • 感谢您提供更正的代码。我还将查找tail(),因为我以前没有使用过它。通过使用上述聚合,它不会产生 3 月份的回报,这是我试图通过包括初始股权来实现的目标
    • 将初始资产标记为二月,这样您就没有两个三月条目。在这种情况下,您将不需要 aggregate= 。
    猜你喜欢
    • 1970-01-01
    • 2015-06-18
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2021-03-12
    相关资源
    最近更新 更多