PerformanceAnalytics charts.RollingRegression 绘制初始 window 值。我如何让它不那样做?
PerformanceAnalytics charts.RollingRegression plots initial window values. How do I make it not do that?
我正在使用 PerformanceAnalytics 包来分析一些每月 returns。 charts.RollingRegression 应该根据某些基准绘制 n 个月的滚动回归。
数据只是 6 returns 系列从 4 月 08 日到 2014 年 12 月,试图回归 SPY。
indexReturns <- read.table("quantIndices.csv", stringsAsFactors = FALSE, sep = ",", fill = TRUE, row.names = 1, header=TRUE)
hfIndexReturns <- read.table("quantHFIndices.csv", stringsAsFactors = FALSE, sep = ",", fill = TRUE, row.names = 1, header=TRUE)
peerReturns <- read.table("quantPeers.csv", stringsAsFactors = FALSE, sep = ",", fill = TRUE, row.names = 1, header=TRUE)
splits <- as.data.frame(strsplit(rownames(indexReturns), "/"))
rownames(indexReturns) <- unname(sapply(splits, function(x) paste0(x[3], "-", x[1], "-", x[2])))
splits <- as.data.frame(strsplit(rownames(peerReturns), "/"))
rownames(peerReturns) <- unname(sapply(splits, function(x) paste0(x[3], "-", x[1], "-", x[2])))
Ret <- xts(peerReturns, order.by = as.Date(row.names(peerReturns)))
Rb <- xts(indexReturns, order.by = as.Date(row.names(indexReturns)))
charts.RollingRegression(Ret, Rb[,2, drop = FALSE], Rf = 0.001, na.pad = TRUE)
这将生成以下图表:
我希望它省略前 12 个月的“无意义”,但没有关于如何完成此操作的文档,我能找到的此图表的任何其他描述如下所示:
查看源代码,在函数的主要内容中,我看到:
for (column.a in 1:columns.a) {
for (column.b in 1:columns.b) {
merged.assets = merge(Ra.excess[, column.a, drop = FALSE],
Rb.excess[, column.b, drop = FALSE])
if (attribute == "Alpha")
column.result = rollapply(na.omit(merged.assets),
width = width, FUN = function(x) lm(x[, 1,
drop = FALSE] ~ x[, 2, drop = FALSE])$coefficients[1],
by = 1, by.column = FALSE, fill = na.pad, align = "right")
if (attribute == "Beta")
column.result = rollapply(na.omit(merged.assets),
width = width, FUN = function(x) lm(x[, 1,
drop = FALSE] ~ x[, 2, drop = FALSE])$coefficients[2],
by = 1, by.column = FALSE, fill = na.pad, align = "right")
if (attribute == "R-Squared")
column.result = rollapply(na.omit(merged.assets),
width = width, FUN = function(x) summary(lm(x[,
1, drop = FALSE] ~ x[, 2, drop = FALSE]))$r.squared,
by = 1, by.column = FALSE, align = "right")
column.result.tmp = xts(column.result)
colnames(column.result.tmp) = paste(columnnames.a[column.a],
columnnames.b[column.b], sep = " to ")
column.result = xts(column.result.tmp, order.by = time(column.result))
if (column.a == 1 & column.b == 1)
Result.calc = column.result
else Result.calc = merge(Result.calc, column.result)
}
}
而且我们可以看到没有 na.pad 传递给最终的 "R-Squared" 函数,这导致了我希望在前两个图表中看到的图表。我想解决这个问题,但我无法编辑包代码。我尝试使用 "assignInNamespace",但它不起作用。功能貌似可以,但是功能代码在包里没有变化。我也想删除图表中的前导空白 space,但是如果你们能让我知道如何编辑它,或者知道任何解决方法,请告诉我。 (谢谢!你们是神!)
哦!而且 PS - 为什么我的软件包版本似乎是唯一有这个问题的版本???为什么我的图表在默认情况下看起来不正确?
编辑:这不是该包中唯一可疑的代码。我总是让事情崩溃而不工作,因为它似乎被记录在案(Error in R[, nc] - coredata(Rf) : non-numeric argument to binary operator
似乎发生在所有其他函数调用中。)有人对这种类型的东西有更好的包有任何建议吗?
让我们稍微分解一下:
charts.RollingRegression
只是一个包装器,用于计算滚动 beta 然后绘制它。
下面是滚动 alpha 和 beta 的示例:
require(PerformanceAnalytics)
data(managers)
capm_xts = xts(matrix(nrow=nrow(managers),ncol=2),order.by=index(managers))
for(i in 12:nrow(managers)){
capm_xts[i,] = coef(lm(managers[(i-11):i,1]~managers[(i-11):i,4]))
}
colnames(capm_xts) = c('alpha','beta')
chart.TimeSeries(capm_xts[12:nrow(capm_xts),2])
数据的子集化应该在传递给 charts.RollingRegression
函数之前完成。强大的 xts
提供了这个功能:
charts.RollingRegression(Ret["2009-04::",], Rb["2009-04::",2, drop = FALSE], Rf = 0.001, na.pad = TRUE)
您可以通过 ?subset.xts
查看 R 中的帮助页面,详细了解如何使用 xts 进行子集化。
我正在使用 PerformanceAnalytics 包来分析一些每月 returns。 charts.RollingRegression 应该根据某些基准绘制 n 个月的滚动回归。 数据只是 6 returns 系列从 4 月 08 日到 2014 年 12 月,试图回归 SPY。
indexReturns <- read.table("quantIndices.csv", stringsAsFactors = FALSE, sep = ",", fill = TRUE, row.names = 1, header=TRUE)
hfIndexReturns <- read.table("quantHFIndices.csv", stringsAsFactors = FALSE, sep = ",", fill = TRUE, row.names = 1, header=TRUE)
peerReturns <- read.table("quantPeers.csv", stringsAsFactors = FALSE, sep = ",", fill = TRUE, row.names = 1, header=TRUE)
splits <- as.data.frame(strsplit(rownames(indexReturns), "/"))
rownames(indexReturns) <- unname(sapply(splits, function(x) paste0(x[3], "-", x[1], "-", x[2])))
splits <- as.data.frame(strsplit(rownames(peerReturns), "/"))
rownames(peerReturns) <- unname(sapply(splits, function(x) paste0(x[3], "-", x[1], "-", x[2])))
Ret <- xts(peerReturns, order.by = as.Date(row.names(peerReturns)))
Rb <- xts(indexReturns, order.by = as.Date(row.names(indexReturns)))
charts.RollingRegression(Ret, Rb[,2, drop = FALSE], Rf = 0.001, na.pad = TRUE)
这将生成以下图表:
我希望它省略前 12 个月的“无意义”,但没有关于如何完成此操作的文档,我能找到的此图表的任何其他描述如下所示:
查看源代码,在函数的主要内容中,我看到:
for (column.a in 1:columns.a) {
for (column.b in 1:columns.b) {
merged.assets = merge(Ra.excess[, column.a, drop = FALSE],
Rb.excess[, column.b, drop = FALSE])
if (attribute == "Alpha")
column.result = rollapply(na.omit(merged.assets),
width = width, FUN = function(x) lm(x[, 1,
drop = FALSE] ~ x[, 2, drop = FALSE])$coefficients[1],
by = 1, by.column = FALSE, fill = na.pad, align = "right")
if (attribute == "Beta")
column.result = rollapply(na.omit(merged.assets),
width = width, FUN = function(x) lm(x[, 1,
drop = FALSE] ~ x[, 2, drop = FALSE])$coefficients[2],
by = 1, by.column = FALSE, fill = na.pad, align = "right")
if (attribute == "R-Squared")
column.result = rollapply(na.omit(merged.assets),
width = width, FUN = function(x) summary(lm(x[,
1, drop = FALSE] ~ x[, 2, drop = FALSE]))$r.squared,
by = 1, by.column = FALSE, align = "right")
column.result.tmp = xts(column.result)
colnames(column.result.tmp) = paste(columnnames.a[column.a],
columnnames.b[column.b], sep = " to ")
column.result = xts(column.result.tmp, order.by = time(column.result))
if (column.a == 1 & column.b == 1)
Result.calc = column.result
else Result.calc = merge(Result.calc, column.result)
}
}
而且我们可以看到没有 na.pad 传递给最终的 "R-Squared" 函数,这导致了我希望在前两个图表中看到的图表。我想解决这个问题,但我无法编辑包代码。我尝试使用 "assignInNamespace",但它不起作用。功能貌似可以,但是功能代码在包里没有变化。我也想删除图表中的前导空白 space,但是如果你们能让我知道如何编辑它,或者知道任何解决方法,请告诉我。 (谢谢!你们是神!)
哦!而且 PS - 为什么我的软件包版本似乎是唯一有这个问题的版本???为什么我的图表在默认情况下看起来不正确?
编辑:这不是该包中唯一可疑的代码。我总是让事情崩溃而不工作,因为它似乎被记录在案(Error in R[, nc] - coredata(Rf) : non-numeric argument to binary operator
似乎发生在所有其他函数调用中。)有人对这种类型的东西有更好的包有任何建议吗?
让我们稍微分解一下:
charts.RollingRegression
只是一个包装器,用于计算滚动 beta 然后绘制它。
下面是滚动 alpha 和 beta 的示例:
require(PerformanceAnalytics)
data(managers)
capm_xts = xts(matrix(nrow=nrow(managers),ncol=2),order.by=index(managers))
for(i in 12:nrow(managers)){
capm_xts[i,] = coef(lm(managers[(i-11):i,1]~managers[(i-11):i,4]))
}
colnames(capm_xts) = c('alpha','beta')
chart.TimeSeries(capm_xts[12:nrow(capm_xts),2])
数据的子集化应该在传递给 charts.RollingRegression
函数之前完成。强大的 xts
提供了这个功能:
charts.RollingRegression(Ret["2009-04::",], Rb["2009-04::",2, drop = FALSE], Rf = 0.001, na.pad = TRUE)
您可以通过 ?subset.xts
查看 R 中的帮助页面,详细了解如何使用 xts 进行子集化。