2012-07-12 2 views
3

님의 새 소개입니다. 필자는 PerformanceAnalytics 패키지를 데이터 프레임 (df)의 벡터에서 사용하려고합니다. 오류 : order.by에 적절한 시간 기반 개체가 필요합니다. 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) 
그것은 객체에 각각 오류를 반환

과 :

Error in checkData(R, method = "xts") : The data cannot be converted into a time series. If you are trying to pass in names from a data object with one column, you should use the form 'data[rows, columns, drop = FALSE]'. Rownames should have standard date formats, such as '1985-03-15'

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

패키지의 도움말이 함수가 작동 함을 알립니다. 벡터에. 나는 NA가 없기 때문에 왜 작동하지 않는지 알지 못합니다.

+0

'dput'을 사용하는 것은 그리 좋지 않습니다. 'dput'의 목적은 데이터의 구조와 속성을 보존하는 방식으로 데이터를 공유하는 것입니다.이 경우 데이터가 처리되는 방식에 영향을 줄 수 있습니다. 에러로부터 여러분의 객체는 함수가 기대하는'xts' 시계열이 아니라는 것을 알 수 있습니다. – A5C1D2H2I1M1N2O1R2T1

답변

8

먼저, 당신은 xts 객체에 데이터 프레임을 변환해야합니다

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

그런 다음 당신이 할 수 있습니다

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

또는 어떤 다른 사람이 당신이 할 필요가있다.

3

PerformanceAnalytics는 데이터를 내부적으로 작업하기가 더 쉬운 형식으로 변환하려고 시도합니다. 이 작업을 data.frame으로하려면 은 Date과 같은 형식 인 rownames이어야합니다. PerformanceAnalytics 많은 데이터 유형에서 작동하도록 주장하지만 그래서,이

rownames(df) <- df[, 2] 
(TestS=SharpeRatio.annualized(df[, "PnL", drop=FALSE], Rf=0, scale=252)) 
#          PnL 
#Annualized Sharpe Ratio (Rf=0%) -8.767439 

을 일하는 것이, 저자는 광범위하게 xts를 사용합니다. 따라서 vector을이 함수에 전달하는 것과 같이 xts을 사용하지 않고 코드가 제대로 작동하지 않는 곳을 놓칠 수 있습니다.

나는 SharpeRatio.annualized에서 문제가 한 번 인덱스를 추가하지 않고이 선 그러나, 벡터 xts로 변환 할 수 없습니다

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

와 함께 xts로 벡터를 설정하는 Return.excessReturn.excess 시도를 호출하는 것으로 생각합니다. (또한 다음 줄은 apply을 사용하는데 이는 벡터 용이 아닙니다.