4

's私は 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") のエラー: データを時系列に変換できません。1 つの列を持つデータ オブジェクトから名前を渡そうとする場合は、'data[rows, columns, drop = FALSE]' の形式を使用する必要があります。行名には、「1985-03-15」などの標準の日付形式を使用する必要があります

dput(df[,"PnL")=0.00994504296273811, 0.00156467225423175, 0.00976137048829638, etc.
dputdf[,"Date")=8036, 8037, 8040, 8041,etc.

パッケージのヘルプによると、関数はベクトルで動作します。私は NA を持っていないので、なぜ機能しないのかわかりません。

4

2 に答える 2

8

xtsまず、データ フレームをオブジェクトに変換する必要があります。

dfx = xts(df$PnL, order.by=as.Date(df$Date))

次に、次のことができます。

TestS = SharpeRatio.annualized(dfx, Rf=0, scale=252)

または、他に必要なことは何でも。

于 2012-07-12T10:03:42.863 に答える
3

PerformanceAnalytics は、データを内部で操作しやすい形式に変換しようとします。これを で機能させるにはdata.frame、が のようにフォーマットさdata.frameれている必要があります。だから、これはうまくいくでしょうrownamesDate

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したがって、この関数にa を渡すなど、 を使用しないとコードが正しく機能しないいくつかの場所を見落としている可能性がありvectorます。

問題は、この行でベクトルをSharpeRatio.annualized呼び出しReturn.excessReturn.excessに変換しようとすることだと思いますxts

xR = coredata(as.xts(R) - as.xts(Rf))

xtsただし、時間インデックスを追加せずにベクトルを変換することはできません。(また、次の行では を使用していますapplyが、これはベクトル用ではありません)

于 2012-07-12T13:12:58.053 に答える