我想charts.PerformanceSummary在PerformanceAnalytics包中提供一个"ggplot版本"的基本功能,因为我认为ggplot通常更漂亮,理论上在编辑图像方面更强大.我已经相当接近,但有一些问题,我想要一些帮助.即:
PerformanceAnalyticscharts.PerformanceSummary如果有更好的方法来做这个可能使用gridExtra而不是方面...我不会对那些让我看起来会更好看的人感到不利...
这里的问题是美学,而且我觉得潜在易操作,因为PerformanceAnalytics已经有一个很好的工作示例,我只想让它更漂亮/更专业......
除了这个奖励积分之外,我希望能够在每个资产的图表一侧或下方某处显示与之相关的一些性能统计数据......不太确定哪里最好显示或显示此信息.
此外,如果他们对此提出建议,我并不反对人们建议清理我的代码的部分.
这是我可重复的例子......
首先生成返回数据:
require(xts)
X.stock.rtns <- xts(rnorm(1000,0.00001,0.0003), Sys.Date()-(1000:1))
Y.stock.rtns <- xts(rnorm(1000,0.00003,0.0004), Sys.Date()-(1000:1))
Z.stock.rtns <- xts(rnorm(1000,0.00005,0.0005), Sys.Date()-(1000:1))
rtn.obj <- merge(X.stock.rtns , Y.stock.rtns, Z.stock.rtns)
colnames(rtn.obj) <- c("x.stock.rtns","y.stock.rtns","z.stock.rtns")
Run Code Online (Sandbox Code Playgroud)
我想复制以下结果的图像:
require(PerformanceAnalytics)
charts.PerformanceSummary(rtn.obj, geometric=TRUE)
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的尝试......
gg.charts.PerformanceSummary <- function(rtn.obj, geometric=TRUE, main="",plot=TRUE){
# load libraries
suppressPackageStartupMessages(require(ggplot2))
suppressPackageStartupMessages(require(scales))
suppressPackageStartupMessages(require(reshape))
suppressPackageStartupMessages(require(PerformanceAnalytics))
# create function to clean returns if having NAs in data
clean.rtn.xts <- function(univ.rtn.xts.obj,na.replace=0){
univ.rtn.xts.obj[is.na(univ.rtn.xts.obj)]<- na.replace
univ.rtn.xts.obj
}
# Create cumulative …Run Code Online (Sandbox Code Playgroud) 我想估计大约2250万个观测数据集的滚动风险值,因此我想使用sparklyr进行快速计算.这是我做的(使用示例数据库):
library(PerformanceAnalytics)
library(reshape2)
library(dplyr)
data(managers)
data <- zerofill(managers)
data<-as.data.frame(data)
class(data)
data$date=row.names(data)
lmanagers<-melt(data, id.vars=c('date'))
Run Code Online (Sandbox Code Playgroud)
现在我估计使用dplyr和PerformanceAnalytics包的VaR:
library(zoo) # for rollapply()
var <- lmanagers %>% group_by(variable) %>% arrange(variable,date) %>%
mutate(var=rollapply(value, 10,FUN=function(x) VaR(x, p=.95, method="modified",align = "right"), partial=T))
Run Code Online (Sandbox Code Playgroud)
这很好用.现在我这样做是为了使用sparklyr:
library(sparklyr)
sc <- spark_connect(master = "local")
lmanagers_sp <- copy_to(sc,lmanagers)
src_tbls(sc)
var_sp <- lmanagers_sp %>% group_by(variable) %>% arrange(variable,date) %>%
mutate(var=rollapply(value, 10,FUN=function(x) VaR(x, p=.95, method="modified",align = "right"), partial=T)) %>%
collect
Run Code Online (Sandbox Code Playgroud)
但是这会产生以下错误:
Error: Unknown input type: pairlist
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我哪里出错,什么是正确的代码?或者任何其他更快地估算滚动VaR的解决方案也是值得赞赏的.
我需要对每日股票收益进行滚动VaR估计.起初我做了以下事情:
library(PerformanceAnalytics)
data(edhec)
sample<-edhec[,1:5]
var605<-rollapply(as.zoo(sample),width=60,FUN=function(x) VaR(R=x,p=.95,method="modified",invert=T),by.column=TRUE,fill=NA)
Run Code Online (Sandbox Code Playgroud)
它执行计算并返回一个zoo对象,但给出了一系列警告,如下所示:
VaR calculation produces unreliable result (inverse risk) for column: 1 : -0.00030977098532231
Run Code Online (Sandbox Code Playgroud)
然后,我尝试了同样的数据样本,如下所示:
library(foreign)
sample2 <- read.dta("sample2.dta")
sample2.xts <- xts(sample2[,-1],order.by=as.Date(sample2$datadate,format= "%Y-%m-%d"))
any(is.na(sample2.xts))
var605<-rollapply(as.zoo(sample2.xts),width=60,FUN=function(x) VaR(R=x,p=.95,method="modified",invert=T),by.column=TRUE,fill=NA)
Run Code Online (Sandbox Code Playgroud)
但是不会返回任何动物园对象并给出以下警告和错误:
VaR calculation produces unreliable result (inverse risk) for column: 1 : -0.0077322590200255
Error in if (eval(tmp < 0)) { : missing value where TRUE/FALSE needed
Called from: top level
Run Code Online (Sandbox Code Playgroud)
从之前的文章(使用rollapply函数进行使用R的VaR计算)我理解,如果缺少完整的滚动窗口,则无法执行滚动估计,但在我的数据(sample2.dta)中没有缺失值.
sample2.dta可以从https://drive.google.com/file/d/0B8usDJAPeV85WDdDQTFEbGQwaUU/edit?usp=sharing下载
有谁可以帮我解决和理解这个问题?
这只是关于我可以在r performanceanalytics优化器函数中使用的最大库存数量的一般问题.
我的代码适用于优化大约110个资产的任何东西,但是超出这个范围的任何东西都会产生错 我找不到任何有关实际资产数量限制的文档.任何帮助表示赞赏.
除此之外,我在下面添加了可重现的代码示例:
library(xts)
library(PortfolioAnalytics)
num_stocks = 300
num_periods = 200
rets = replicate(num_stocks, rnorm(num_periods))
colnames(rets) = paste0('stock', 1:num_stocks)
dates = seq(as.Date('2000-01-01'), by = 'month', length.out = num_periods) - 1
#100 stocks, returns optimal weights
equity.data = xts(rets, order.by = dates)[,1:100]
stocks <- colnames(equity.data)
# Specify an initial portfolio
portf.init <- portfolio.spec(stocks)
# Add constraints
# weights sum to 1
portf.minvar <- add.constraint(portf.init, type="full_investment")
# box constraints
portf.minvar <- add.constraint(portf.minvar, type="box", min=0.00, max=0.10)
# Add objective
# objective …Run Code Online (Sandbox Code Playgroud) 我需要在xts数据上运行滚动窗口函数,该数据包含大约7,000行和11,000列.我做了以下事情:
require(PerformanceAnalytics)
ssd60<-rollapply(wddxts,width=60,FUN=function(x) SemiDeviation(x),by.column=TRUE)
Run Code Online (Sandbox Code Playgroud)
我等了12个小时,但计算没有完成.但是,当我尝试使用小数据集时,如下所示:
sample<-wddxts[,1:5]
ssd60<-rollapply(sample,width=60,FUN=function(x) SemiDeviation(x),by.column=TRUE)
Run Code Online (Sandbox Code Playgroud)
计算在60秒内完成.我在配备Intel i5-2450M CPU,Windows 7操作系统和12 GB RAM的计算机上运行它们.
任何人都可以建议我,如果有更快的方法在大型xts数据集上执行上述计算?
我正在通过将衰退带数据下载到 R 中quantmod。现在这是一个二进制信息(xts 格式),看起来像这样(仅显示第一个衰退期)
1857-01-01 0
1857-02-01 0
1857-03-01 0
1857-04-01 0
1857-05-01 0
1857-06-01 0
1857-07-01 1
1857-08-01 1
1857-09-01 1
1857-10-01 1
1857-11-01 1
1857-12-01 1
1858-01-01 1
1858-02-01 1
1858-03-01 1
1858-04-01 1
1858-05-01 1
1858-06-01 1
1858-07-01 1
1858-08-01 1
1858-09-01 1
1858-10-01 1
1858-11-01 1
1858-12-01 1
Run Code Online (Sandbox Code Playgroud)
现在,我有两个问题:
我需要将其转换为这样的表格格式,如下所示 http://www.r-bloggers.com/use-geom_rect-to-add-recession-bars-to-your-time-series-plots-rstats -ggplot/
1857-06-01, 1858-12-01 1860-10-01, 1861-06-01 1865-04-01, 1867-12-01 1869-06-01, 1870-12-01 1873-10-01, 1879-03-01
完成此操作后,我想将其用作库中的 event.lines PerformanceAnalytics。
有人可以帮助我如何做到这一点吗?
如果您想下载该系列进行尝试,请执行以下操作
library(quantmod)
getSymbols("USREC",src="FRED")
Run Code Online (Sandbox Code Playgroud) 我有以下数据框:
df <- data.frame(Return1=c(NA, NA, .03, .04, .05),
Return2=c(.25, .33, NA, .045, .90),
Return3=c(.04, .073, .08, .04, .01))
Return1 Return2 Return3
1 NA 0.250 0.040
2 NA 0.330 0.073
3 0.03 NA 0.080
4 0.04 0.045 0.040
5 0.05 0.900 0.010
Run Code Online (Sandbox Code Playgroud)
我想计算累积回报,但数据框中缺少值.我用了:
cumprod(df+1)-1
Run Code Online (Sandbox Code Playgroud)
得到结果
Return1 Return2 Return3
1 NA 0.2500 0.0400000
2 NA 0.6625 0.1159200
3 NA NA 0.2051936
4 NA NA 0.2534013
5 NA NA 0.2659354
Run Code Online (Sandbox Code Playgroud)
这里的问题是,如果存在NA,则后续的行将具有结果NA.有没有办法计算累积回报而没有NA影响下面其余的行?
我想得到的结果是:
Return1 Return2 Return3
1 NA 0.2500 0.0400000
2 NA 0.6625 0.1159200 …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个购买N期新高的函数。因此,如果我有一个向量:
x = c(1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
我想把滚动期提高到3个周期。这就是我希望功能看起来的样子
x = c(1, 2, 3, 4, 5, 5, 5, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
我试图在xts对象上执行此操作。这是我尝试过的:
rollapplyr(SPY$SPY.Adjusted, width = 40, FUN = cummax)
rollapply(SPY$SPY.Adjusted, width = 40, FUN = "cummax")
rapply(SPY$SPY.Adjusted, width = 40, FUN = cummax)
Run Code Online (Sandbox Code Playgroud)
我收到的错误是:
Error in `dimnames<-.xts`(`*tmp*`, value = dn) :
length of 'dimnames' [2] not equal to array extent
Run Code Online (Sandbox Code Playgroud)
提前致谢
我是R.的新手.我正在使用"PerformanceAnalytics"软件包来计算投资组合的组件VaR.
如果我使用高斯方法,它会返回贡献.
> VaR(edhec, p=.95, method="gaussian", portfolio_method="component")
no weights passed in, assuming equal weighted portfolio
$VaR
[,1]
[1,] 0.01193358
$contribution
Convertible Arbitrage CTA Global Distressed Securities Emerging Markets Equity Market Neutral Event Driven Fixed Income Arbitrage
0.0014400703 0.0003687009 0.0012961865 0.0032090406 0.0003479361 0.0013848605 0.0010051944
Global Macro Long/Short Equity Merger Arbitrage Relative Value Short Selling Funds of Funds
0.0011151866 0.0015860006 0.0004412756 0.0009265836 -0.0027498306 0.0015623733
$pct_contrib_VaR
Convertible Arbitrage CTA Global Distressed Securities Emerging Markets Equity Market Neutral Event Driven Fixed Income …Run Code Online (Sandbox Code Playgroud) 我必须使用大小为10000到50000且步长为10000的数组,为所有三种算法提供相同的输入,并且对于每个输入重复执行100次,以纳秒为单位测量执行(使用System.nanoTime()),并以毫秒为单位报告平均时间.这就是我在下面所做的,但有些平均值是负数,我不知道为什么?
import java.util.Arrays;
public class Sort{
public static void main(String[]args){
double[] arr5 = new double[50000];
for(int i=0;i<arr5.length;i++)
arr5[i] = Math.random();
selectionSort(arr5,10000);
bubbleSort(arr5,10000);
quickSort(arr5,10000);
selectionSort(arr5,20000);
bubbleSort(arr5,20000);
quickSort(arr5,20000);
selectionSort(arr5,30000);
bubbleSort(arr5,30000);
quickSort(arr5,30000);
selectionSort(arr5,40000);
bubbleSort(arr5,40000);
quickSort(arr5,40000);
selectionSort(arr5,50000);
bubbleSort(arr5,50000);
quickSort(arr5,50000);
}
public static void selectionSort(double [] A,int n){
int sum = 0;
System.out.println("Algorithm 1");
for(int s=0;s<100;s++){
long arr[] = new long[100];
long startTime = System.nanoTime();
for(int i=0;i<n-1;i++){
int min = i;
for(int j=i+1;j<n;j++){
if(A[j] < A[min])
min=j;}
double tmp = A[i];
A[i] = A[min];
A[min]=tmp;} …Run Code Online (Sandbox Code Playgroud) java algorithm analysis time-complexity performanceanalytics