2

我的数据集有 140 个月的 1000 次对冲基金回报,我试图计算在 PerformanceAnalytics 包中使用命令 VaR 的风险价值 (VaR)。但是,我在使用此功能时提出了许多问题。我创建了一个示例数据框来显示我的问题。

df=data.frame(matrix(rnorm(24),nrow=8))
df$X1<-c('2007-01','2007-02','2007-03','2007-04','2007-05','2007-06','2007-07','2007-08')
df[2,2]<-NA
df[2,3]<-NA
df[1,3]<-NA
df

我有一个数据框:

           X1         X2          X3
    1 2007-01 -1.4420195          NA
    2 2007-02         NA          NA
    3 2007-03 -0.4503824 -0.78506597
    4 2007-04  1.4083746  0.02095307
    5 2007-05  0.9636549  0.19584430
    6 2007-06  1.1935281 -0.14175623
    7 2007-07 -0.3986336  1.58128683
    8 2007-08  0.8211377 -1.13347168

然后我跑

apply(df,2,FUN=VaR, na.rm=TRUE)

并收到一条警告消息:

数据无法转换为时间序列。如果您尝试从具有一列的数据对象中传递名称,则应使用“data[rows, columns, drop = FALSE]”形式。行名应具有标准日期格式,例如“1985-03-15”。

我试图将我的数据框转换为时间序列的组合,zoo()但它没有帮助。有人可以帮助弄清楚我现在应该做什么吗?

4

2 回答 2

1

@user2893255,在使用 apply 函数之前,您应该将数据框转换为 xts 对象:

df.xts <- as.xts(df[,2:3],order.by=as.Date(df$X1,"%Y-%m"))

接着

apply(df.xts,2,FUN=VaR, na.rm=TRUE)

为您提供没有警告或错误消息的结果。

于 2013-10-31T07:05:44.237 回答
0

尝试删除Date列:

 apply(df[,-1L], 2, FUN=VaR, na.rm=TRUE)
于 2013-10-30T02:23:23.110 回答