我需要计算股票收益的滚动 VaR。从这篇文章:使用rollapply函数使用R进行VaR计算 https://stackoverflow.com/questions/25045612/using-rollapply-function-for-var-calculation-using-r/25047068#25047068,我知道具有完整缺失案例的列将给出错误。但由于不同公司的股票收益的开始日期和结束日期不同,因此当数据从长格式转换为宽格式时,会产生缺失值。可以仅使用没有缺失值的行来完成估计,但这会导致严重的数据丢失。因此,是否有任何方法可以对具有完整缺失值的列执行计算,并且对于缺失的列,获得输出“NA”。这就是我所做的:
library(PerformanceAnalytics)
data(managers)
VaR(managers, p=.95, method="modified")
它执行所需的计算,但当我尝试使用前 60 行“HAM6”列完全丢失时
managers2<-managers[1:60,]
VaR(managers2, p=.95, method="modified")
我收到以下错误:
Error in dimnames(cd) <- list(as.character(index(x)), colnames(x)) :
'dimnames' applied to non-array
我知道该错误是由于缺少“HAM6”列造成的,但是有没有办法保留缺少的列并获得“HAM6”的输出“NA”,而不是删除“HAM6”列?我已经尝试了大多数可用于处理缺失值的方法,但找不到任何合适的解决方案。任何帮助深表感谢。
Use apply(managers,2,...)
检查整列是否是NA
如下:
apply(managers2,2,function(x){
if(!all(is.na(x))){
return(as.numeric(VaR(x, p=.95, method="modified")))
} else {
return(NA)
}
})
Result:
VaR calculation produces unreliable result (inverse risk) for column: 1 : -0.00354267287759942
HAM1 HAM2 HAM3 HAM4 HAM5 HAM6 EDHEC LS EQ SP500 TR US 10Y TR US 3m TR
-0.03212244 -0.03698665 -0.04403660 -0.08093557 -0.12635656 NA -0.02275816 -0.06886077 -0.02510378 NA
该警告指的是US 3m TR
。这就是有一个原因NA
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)