我是R的新手,对ts对象更是新手。我尝试在数据框(df)的矢量上使用PerformanceAnalytics包。
我有以下数据框:
row.names Date PnL
1 22 1992-01-02 -1.751133e-02
2 23 1992-01-03 -1.586737e-02
3 24 1992-01-06 -2.898982e-02
我试过了:
TestS=SharpeRatio.annualized(df[,"PnL"],Rf=0,scale=252)
TestS=SharpeRatio.annualized(as.ts(df[,"PnL"]),Rf=0,scale=252)
它分别返回对象中的错误:
checkData(R,method =“xts”)出错: 数据无法转换为时间序列。如果您尝试从具有一列的数据对象传入名称,则应使用“data [rows,columns,drop = FALSE]”形式。 Rownames应具有标准日期格式,例如'1985-03-15'
dput(df[,"PnL")=0.00994504296273811, 0.00156467225423175, 0.00976137048829638, etc.
dputdf[,"Date")=8036, 8037, 8040, 8041,etc.
包的帮助说该函数适用于vector。我没有任何NA,因此我不明白为什么它不起作用。
答案 0 :(得分:8)
首先,您需要将数据框转换为xts
对象:
dfx = xts(df$PnL, order.by=as.Date(df$Date))
然后你可以这样做:
TestS = SharpeRatio.annualized(dfx, Rf=0, scale=252)
或者你需要做的其他事情。
答案 1 :(得分:3)
PerformanceAnalytics尝试将您的数据转换为更易于在内部使用的表单。要使用data.frame
进行此操作,data.frame
必须rownames
格式为Date
s。所以,这会起作用
rownames(df) <- df[, 2]
(TestS=SharpeRatio.annualized(df[, "PnL", drop=FALSE], Rf=0, scale=252))
# PnL
#Annualized Sharpe Ratio (Rf=0%) -8.767439
虽然PerformanceAnalytics声称可以处理许多数据类型,但作者广泛使用xts
。因此,如果不使用xts
,他们可能错过了代码无法正常工作的几个地方,例如将vector
传递给此函数。
我认为SharpeRatio.annualized
中的问题是它调用Return.excess
和Return.excess
尝试将此向量转换为xts
此行
xR = coredata(as.xts(R) - as.xts(Rf))
但是,如果不添加时间索引,则无法将矢量转换为xts
。 (另外,下一行使用apply
,这不适用于矢量)