Ошибка из CAPM.alpha в PerformanceAnalytics
Когда я пытаюсь запустить пример со страницы 22 справочника PerformanceAnalytics, я получаю сообщение об ошибке. Увидеть ниже.
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
>
1 ответ
Решение
Ошибка не в вашем коде, а в самом пакете R. Это показано на проверке пакета здесь и может быть воспроизведено с помощью:
library(PerformanceAnalytics)
example(CAPM.alpha)
Похоже, ошибка находится в строке 40 файла Return.excess.R. Следует заменить на:
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
Имейте в виду, что я не проверил, что функция делает то, что должна делать.