Science Score: 13.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
○codemeta.json file
-
○.zenodo.json file
-
✓DOI references
Found 7 DOI reference(s) in README -
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (15.6%) to scientific vocabulary
Keywords
bayesian-optimization
black-litterman
mean-variance-optimization
principal-component-analysis
robust-optimization
Last synced: 6 months ago
·
JSON representation
Repository
Enhanced Portfolio Optimization (EPO)
Basic Info
- Host: GitHub
- Owner: Reckziegel
- License: other
- Language: R
- Default Branch: main
- Homepage: https://reckziegel.github.io/epo/
- Size: 4.9 MB
Statistics
- Stars: 7
- Watchers: 2
- Forks: 3
- Open Issues: 1
- Releases: 1
Topics
bayesian-optimization
black-litterman
mean-variance-optimization
principal-component-analysis
robust-optimization
Created over 3 years ago
· Last pushed almost 2 years ago
Metadata Files
Readme
License
README.Rmd
---
output: github_document
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%"
)
```
# epo
[](https://lifecycle.r-lib.org/articles/stages.html#experimental) [](https://github.com/Reckziegel/epo/actions/workflows/R-CMD-check.yaml) [](https://app.codecov.io/gh/Reckziegel/epo?branch=main) [](https://CRAN.R-project.org/package=epo)
[](https://r-pkg.org/pkg/epo)
[](https://r-pkg.org/pkg/epo)
The Enhanced Portfolio Optimization (EPO) method, described in Pedersen, Babu and Levine (2021), proposes a unifying theory on portfolio optimization. Employing Principal Component Analysis (PCA), the EPO method ranks portfolios based on their variance, from the most to the least important principal components. Notably, the least important principal components emerge as "problem portfolios", primarily due to their low *estimated* risk, leading to the underestimation of their *true* risks. These portfolios offer high expected returns (*ex-ante*) and low realized Sharpe Ratios (*ex-post*), underscoring the challenges faced when using them through standard approaches.
To fix this issue, EPO introduces a straightforward yet powerful strategy: it shrinks correlations! The key insight from Pedersen, Babu, and Levine (2021) is that by reducing correlations close to zero, the volatilities of these "problem portfolios" are effectively increased. Consequently, the EPO method stabilizes Mean-Variance Optimization (MVO) by adjusting downward the Sharpe-Ratios of the least important components.
The elegance of the EPO approach lies in its connection to three leading methods: MVO, Bayesian Optimization, and Robust Optimization. By incorporating a closed-form solution with a single shrinkage parameter, denoted as $w \in \{0, 1\}$, the investor can seamlessly navigate through the optimization process. In the "Simple EPO", a $w=0$ coincides with the classical MVO. Conversely, a $w=1$ completely disregards correlations, resulting in a portfolio allocation that do not optimize.
In real-world applications, it is crucial to consider the potential deviation from a reference point or benchmark. EPO effectively handles this concern through the "Anchored EPO". When a anchor needs to be considered, a $w=0$ aligns with the classical MVO, while a $w=1$ precisely matches the benchmark. The most interesting outcome arise when $0 < w < 1$, leading to portfolios resembling the Black-Litterman model. Here, the shrinking parameter, $w$, tunes the confidence in the *prior*, offering a flexible and dynamic optimization process. However, unlike Black-Litterman, the "Anchored EPO" does not restrict the reference point to the "Market Portfolio," making it more general and widely applicable.
Overall, the Enhanced Portfolio Optimization (EPO) method presents a novel, efficient, and adaptable framework for portfolio optimization. Its ability to address the limitations of traditional methods while incorporating various optimization approaches through a single parameter makes it a compelling tool for investors seeking more stable and well-tailored portfolios.
## Installation
Install the official version from CRAN with:
``` r
install.packages("epo")
```
Install the development version from github with:
``` r
# install.packages("devtools")
devtools::install_github("Reckziegel/epo")
```
## Example
```{r}
library(epo)
x <- diff(log(EuStockMarkets)) # stock returns
s <- colMeans(x) # it could be any signal
##################
### The Simple EPO
##################
# Traditional Mean-Variance Analysis
epo(x = x, signal = s, lambda = 10, method = "simple", w = 0)
# 100% Shrinkage
epo(x = x, signal = s, lambda = 10, method = "simple", w = 1)
# 50% Classical MVO and 50% Shrinkage
epo(x = x, signal = s, lambda = 10, method = "simple", w = 0.5)
####################
### The Anchored EPO
####################
benchmark <- rep(0.25, 4) # 1/N Portfolio
# Traditional Mean-Variance Analysis
epo(x = x, signal = s, lambda = 10, method = "anchored", w = 0.0, anchor = benchmark)
# 100% on the Anchor portfolio
epo(x = x, signal = s, lambda = 10, method = "anchored", w = 1.0, anchor = benchmark)
# 50% on Mean-Variance Analysis and 50% on the Anchor Portfolio
epo(x = x, signal = s, lambda = 10, method = "anchored", w = 0.5, anchor = benchmark)
```
## References
- Pedersen, Lasse Heje and Babu, Abhilash and Levine, Ari, Enhanced Portfolio Optimization (January 2, 2020). Lasse Heje Pedersen, Abhilash Babu, and Ari Levine (2021), Enhanced Portfolio Optimization, Financial Analysts Journal, 77:2, 124-151, DOI: 10.1080/0015198X.2020.1854543 , Available at SSRN: or [http://dx.doi.org/10.2139/ssrn.3530390](https://dx.doi.org/10.2139/ssrn.3530390)
Owner
- Name: Bernardo Reckziegel
- Login: Reckziegel
- Kind: user
- Location: Porto Alegre, Brazil
- Website: bernardo.codes
- Twitter: ReckziegelB
- Repositories: 11
- Profile: https://github.com/Reckziegel
GitHub Events
Total
- Watch event: 3
- Fork event: 1
Last Year
- Watch event: 3
- Fork event: 1
Packages
- Total packages: 1
-
Total downloads:
- cran 203 last-month
- Total docker downloads: 21,613
- Total dependent packages: 0
- Total dependent repositories: 0
- Total versions: 1
- Total maintainers: 1
cran.r-project.org: epo
Enhanced Portfolio Optimization (EPO)
- Homepage: https://github.com/Reckziegel/epo
- Documentation: http://cran.r-project.org/web/packages/epo/epo.pdf
- License: MIT + file LICENSE
-
Latest release: 0.1.0
published over 2 years ago
Rankings
Forks count: 28.4%
Dependent packages count: 28.6%
Stargazers count: 35.1%
Dependent repos count: 36.9%
Average: 43.5%
Downloads: 88.2%
Maintainers (1)
Last synced:
6 months ago
Dependencies
.github/workflows/R-CMD-check.yaml
actions
- actions/checkout v3 composite
- r-lib/actions/check-r-package v2 composite
- r-lib/actions/setup-r v2 composite
- r-lib/actions/setup-r-dependencies v2 composite
.github/workflows/pkgdown.yaml
actions
- JamesIves/github-pages-deploy-action v4.4.1 composite
- actions/checkout v3 composite
- r-lib/actions/setup-pandoc v2 composite
- r-lib/actions/setup-r v2 composite
- r-lib/actions/setup-r-dependencies v2 composite
.github/workflows/test-coverage.yaml
actions
- actions/checkout v3 composite
- actions/upload-artifact v3 composite
- r-lib/actions/setup-r v2 composite
- r-lib/actions/setup-r-dependencies v2 composite
DESCRIPTION
cran
- assertthat >= 0.2.1 imports
- dplyr >= 1.1.2 imports
- rlang >= 1.1.1 imports
- xts >= 0.13.1 imports
- testthat >= 3.0.0 suggests