Return.portfolio 和 Return.rebalancing 如何在 R 的性能分析中工作?
我對R 中 Performance Analytics 包中的函式
Return.portfolio
/有疑問。Return.rebalancing
我以包中描述的範例為例:
> data(edhec) > data(weights) > Return.portfolio(edhec,weights = weights) portfolio.returns 2000-01-31 0.0115135339 2000-02-29 0.0218963077 2000-03-31 0.0093379014 2000-04-30 0.0037485690 2000-05-31 0.0056601357 2000-06-30 0.0140301727 2000-07-31 0.0043295816 2000-08-31 0.0190997787 2000-09-30 0.0014645727 2000-10-31 0.0014264155 2000-11-30 0.0061304707 2000-12-31 0.0201417025 2001-01-31 0.0150594011 2001-02-28 0.0066011872 2001-03-31 0.0131395159 2001-04-30 0.0007491561 2001-05-31 0.0091626407 2001-06-30 -0.0000527803 2001-07-31 0.0020738201 2001-08-31 0.0102713727 2001-09-30 0.0002531717 2001-10-31 0.0142380976 2001-11-30 -0.0048429083 2001-12-31 0.0061645640 2002-01-31 0.0093372403 2002-02-28 -0.0011217258 2002-03-31 0.0063415238 2002-04-30 0.0082130861 2002-05-31 0.0058782220 2002-06-30 0.0007565192 2002-07-31 -0.0059246865 2002-08-31 0.0072696705 2002-09-30 0.0026434591 2002-10-31 0.0014298494 2002-11-30 0.0105008400 2002-12-31 0.0127186414 2003-01-31 0.0159481947 2003-02-28 0.0092381495 2003-03-31 0.0001639493 2003-04-30 0.0113937775 2003-05-31 0.0199355028 2003-06-30 0.0020659339 2003-07-31 -0.0039260851 2003-08-31 0.0035691334 2003-09-30 0.0114224214 2003-10-31 0.0116788871 2003-11-30 0.0069773935 2003-12-31 0.0117366500 2004-01-31 0.0137408298 2004-02-29 0.0086731496 2004-03-31 0.0030241495 2004-04-30 -0.0031369461 2004-05-31 -0.0006375207 2004-06-30 0.0039463036 2004-07-31 0.0010463350 2004-08-31 0.0022005523 2004-09-30 0.0065116125 2004-10-31 0.0042086646 2004-11-30 0.0164591318 2004-12-31 0.0094498415 2005-01-31 0.0030113644 2005-02-28 0.0103238498 2005-03-31 0.0008083756 2005-04-30 -0.0052241413 2005-05-31 0.0020622011 2005-06-30 0.0081079582 2005-07-31 0.0118744372 2005-08-31 0.0073621313 2005-09-30 0.0101843734 2005-10-31 -0.0012149988 2005-11-30 0.0076005987 2005-12-31 0.0089111835 2006-01-31 0.0193600000 2006-02-28 0.0050290768 2006-03-31 0.0122895863 2006-04-30 0.0161541728 2006-05-31 0.0028728086 2006-06-30 0.0008591674 2006-07-31 0.0029350825 2006-08-31 0.0061800530 2006-09-30 0.0020263120 2006-10-31 0.0128266559 2006-11-30 0.0129600658 2006-12-31 0.0126486355 2007-01-31 0.0106456451 2007-02-28 0.0105816673 2007-03-31 0.0082080685 2007-04-30 0.0120657529 2007-05-31 0.0130340469 2007-06-30 0.0054403426 2007-07-31 -0.0001698053 2007-08-31 -0.0096513313 2007-09-30 0.0156251014 2007-10-31 0.0171940678 2007-11-30 -0.0113391902 2007-12-31 0.0030447149 2008-01-31 -0.0120408215 2008-02-29 0.0045617517 2008-03-31 -0.0188804492 2008-04-30 0.0121140702 2008-05-31 0.0127356881 2008-06-30 -0.0003266534 2008-07-31 -0.0118233426 2008-08-31 -0.0064733095 2008-09-30 -0.0478450597 2008-10-31 -0.0630740252 2008-11-30 -0.0354050961 2008-12-31 -0.0046962342 2009-01-31 0.0089404911 2009-02-28 -0.0027223978 2009-03-31 0.0050820481 2009-04-30 0.0229829814 2009-05-31 0.0374323984 2009-06-30 0.0111071893 2009-07-31 0.0255805068 2009-08-31 0.0179835194 Warning message: In Return.portfolio(edhec, weights = weights) : number of assets in beginning_weights is less than number of columns in returns, so subsetting returns. > sum(as.numeric(edhec[151,1:11])*as.numeric(weights[8,])) [1] 0.02614121 >
這些回報是如何計算的
Return.portfolio
?與 edhec 相比,權重缺失了兩列。這就是我拍的原因edhec[151,1:11]
此外,我們看到 weights 是一個
xts
只有 8 行的對象。是否Return.portfolio
檢查日期並在該期間採用正確的權重?此外,與 有什麼區別Return.rebalancing
?是否正確,如果我們總結前 10 個元素
Return.portfolio(edhec,weights = weights)
我們會及時得到總回報 $ t=10 $ ?
參考:使用的軟體包是R程式語言,用於數據分析和視覺化,包括統計和圖形。R 是一套用於數據處理、計算和圖形顯示的集成軟體設施。R 項目是開源的,可在
http://www.r-project.org/
此外,R 統計程序有大量可供整個社區使用的項目儲存庫,
https://r-forge.r-project.org/
其中一個項目是**ReturnAnalytics——**金融時間序列的績效和風險分析,包括 PerformanceAnalytics 和 PortfolioAnalytics 包。該項目可通過匿名訪問獲得:svn checkout svn://svn.r-forge.r-project.org/svnroot/returnanalytics/
我要把你的問題一分為二。
您要問的關鍵是 Return.rebalancing 如何處理您的不同頻率和數量的資產收益和權重對象。
數據:
它對 R 的第一個 ncol(weight) 列進行子集化(如 ncol(edhec) > ncol(weights)
ncol R 現在是 11。檢查 R 中的第一個日期是否小於 W 中的第一個日期如果為 true,則從 2000-01-02/" 開始將 R 子集 nrow(R) 現在是 116,因為您不能有返回系列在初始權重之前。
數據處理:
然後它呼叫 Return.portfolio.geometric,它只是將收益乘以這兩個矩陣的權重。
因為權重是每年一次,而 edhec 是每月一次。
它需要計算中間年份
所以它抓住了中間時期的回歸系列。
循環遍歷所有返回子系列,計算權重 * 返回期間的前一個數量(本質上是浮動它並在權重矩陣上重新平衡)。它取收益序列中每個週期的總值,然後除以該週期的起始值,計算出週期收益。
一個簡單的展示如下。
- 取初始權益值 (1)
- 取再平衡年初始權重
- 計算期末權益(初始權益權重回報)
- 計算期間的回報
- 在權重矩陣中指定的每個重新平衡日期重複兩次。
eop_value
$$ k, $$= (1 + coredata(返回$$ j, $$)) * bop_value$$ k, $$ eop_value_total$$ k $$=總和(eop_value$$ k, $$) 對
$$ k $$= eop_value_total$$ k $$/end_value - 1 end_value = eop_value_total$$ k $$
上面的程式碼計算每個倉位的新總淨值並將其相加。
因此,它類似於您的權重浮動,然後在權重矩陣中的每個日期重置。