为啥 R PerformanceAnalytics 中的 TrackingError 函数与使用其发布的公式的手动计算不一致

Posted

技术标签:

【中文标题】为啥 R PerformanceAnalytics 中的 TrackingError 函数与使用其发布的公式的手动计算不一致【英文标题】:Why is TrackingError function in R PerformanceAnalytics inconsistent with manual calculation using its published formula为什么 R PerformanceAnalytics 中的 TrackingError 函数与使用其发布的公式的手动计算不一致 【发布时间】:2021-01-05 09:10:10 【问题描述】:

使用PerformanceAnalytics中的“managers”数据集,跟踪误差的计算似乎与手动计算不一致。

library(PerformanceAnalytics)

#using the managers data set in PerformanceAnalytics

sqrt(sum((managers[,1]-managers[,8])^2)/((length(managers[,1])-1)*sqrt(12)))
TrackingError(managers[,1],managers[,8])

我的结果如下:

> sqrt(sum((managers[,1]-managers[,8])^2)/((length(managers[,1])-1)*sqrt(12)))
[1] 0.01760221
> TrackingError(managers[,1],managers[,8])
[1] 0.1131667

有趣的是,封装公式与 rdrr.io 中的公式不匹配。

根据rdrr.io,公式为:

TrackingError = sqrt(sum(Ra - Rb)^2 / (length(R) - 1)) * sqrt(scale)

包装公式看起来是:

sqrt((sum(Ra-Rb)^2)/长度(Ra) * sqrt(scale))

我尝试在 R 和 Excel 中手动执行此操作,但我无法回到 TrackingError 公式如何达到 11.3%

【问题讨论】:

【参考方案1】:

这似乎大部分只是通过做来解决

sqrt(sum((managers[,1]-managers[,8])^2)/((length(managers[,1])-1)))*sqrt(12)

但是,这仍然不完全匹配。

> sqrt(sum((managers[,1]-managers[,8])^2)/((length(managers[,1])-1)))*sqrt(12)
[1] 0.1134888
> 
> TrackingError(managers[,1], managers[,8])
[1] 0.1131667

经过进一步审查,当您将跟踪误差视为 主动回报的标准偏差时,这一问题得到解决,如***定义 https://en.wikipedia.org/wiki/Tracking_error 中所述。

> sqrt(var(managers[,1]-managers[,8]))*sqrt(12)
          HAM1
HAM1 0.1131667
> TrackingError(managers[,1], managers[,8])
[1] 0.1131667

【讨论】:

以上是关于为啥 R PerformanceAnalytics 中的 TrackingError 函数与使用其发布的公式的手动计算不一致的主要内容,如果未能解决你的问题,请参考以下文章

在R版本3.4.2上安装PerformanceAnalytics(2017-09-28)

如何在R中使用charts.performanceanalytics绘制累积回报图表

如何更改图表的颜色。R中PerformanceAnalytics库中的相关性?

错误:order.by 需要适当的基于时间的对象 PerformanceAnalytics

性能分析图表中的修改

如何使用 PerformanceAnalytics 计算具有 NA 的等权重投资组合回报?