2012-12-03 14 views
2

當我嘗試運行PerformanceAnalytics參考的第22頁中的示例時,出現錯誤消息。見下文。PerformanceAnalytics中的CAPM.alpha錯誤

PS我是一個初學者&這從來沒有爲我工作。此外,我的根本問題是,當我嘗試使用table.CAPM與我自己的數據時,我得到完全相同的錯誤。

感謝您的任何幫助。

> search() 
[1] ".GlobalEnv"     "package:PerformanceAnalytics" 
[3] "package:xts"     "package:zoo"     
[5] "package:stats"    "package:graphics"    
[7] "package:grDevices"   "package:utils"    
[9] "package:datasets"    "package:methods"    
[11] "Autoloads"     "package:base"     
> version 
      _        
platform  x86_64-w64-mingw32   
arch   x86_64      
os    mingw32      
system   x86_64, mingw32    
status          
major   2        
minor   15.2       
year   2012       
month   10       
day   26       
svn rev  61015       
language  R        
version.string R version 2.15.2 (2012-10-26) 
nickname  Trick or Treat    
> data(managers) 
> CAPM.alpha(managers[,1,drop=FALSE], managers[,8,drop=FALSE], Rf=.035/12) 
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
    0 (non-NA) cases 
> 
+0

這在R-Forge版本的代碼中已經修復了很長一段時間。 –

+0

@布萊恩我看到它是固定的[這裏](https://r-forge.r-project.org/scm/viewvc.php/pkg/PerformanceAnalytics/R/Return.excess.R?root=returnanalytics&r1=2163&r2= 2296) - 你計劃推出更新嗎? – orizon

回答

1

該錯誤不在您的代碼中,它在R程序包本身。它,它被示出在封裝驗證檢查here,它可以與被再現:

library(PerformanceAnalytics) 
example(CAPM.alpha) 

的誤差似乎是Return.excess.R的管線40。

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

在實踐中解決這個的最簡單的方法是運行:

require(utils) 
assignInNamespace(
    "Return.excess", 
    function (R, Rf = 0) 
    { # @author Peter Carl 
    # edited by orizon 
     # .. additional comments removed 
     R = checkData(R) 
     if(!is.null(dim(Rf))){ 
      Rf = checkData(Rf) 
      indexseries=index(cbind(R,Rf)) 
      columnname.Rf=colnames(Rf) 
     } 
     else { 
      indexseries=index(R) 
      columnname.Rf=Rf 
      Rf=xts(rep(Rf, length(indexseries)),order.by=indexseries) 
     } 
     return.excess <- function (R,Rf) 
     { 
      xR = coredata(as.xts(R))-coredata(as.xts(Rf)) #fixed 
     } 
     result = apply(R, MARGIN=2, FUN=return.excess, Rf=Rf) 
     colnames(result) = paste(colnames(R), ">", columnname.Rf) 
     result = reclass(result, R) 
     return(result) 
    }, 
    "PerformanceAnalytics" 
) 

然後你原來的命令作品:

> data(managers) 
> CAPM.alpha(managers[,1,drop=FALSE], managers[,8,drop=FALSE], Rf=.035/12) 
[1] 0.005960609 

要知道,我應該被替換沒有證實該功能是做它聲稱做的事。

+0

謝謝 - 非常有幫助 – user1871635

+0

接受。 (我首先錯過了這個選項。)我以前嘗試+1的答案,但排名新手(少於15分)不能。無論如何,你對我表示感謝。 – user1871635

相關問題