Learn R Programming

‘REN’: Regularization Ensemble for Portfolio Optimization

Overview

The ‘REN’ package provides a set of tools for performing portfolio optimization using various regularization and ensemble learning methods. The package is designed to produce stable out-of-sample return predictions, particularly in the presence of strong correlations between assets. The core functions enable users to prepare data, set up parallel processing, and perform in-depth portfolio analysis.

Installation

To install the ‘REN’ package, you can use the following command:

# Install the development version from GitHub
devtools::install_github("bonsook/REN")

Main Functions

1. setup_parallel()

This function sets up parallel processing to speed up the computation of portfolio optimization tasks.

  • Parameters:
    • num_cores: The number of cores to use for parallel processing. Default is 7.
  • Example:
# Set up parallel processing with the default number of cores
cl <- setup_parallel()

# Set up parallel processing with 4 cores
cl <- setup_parallel(num_cores = 4)

# Stop the cluster after completing the analysis
stopCluster(cl) 

2. prepare_data()

This function prepares the input data for portfolio optimization by structuring it into the required format and calculating necessary metrics.

  • Parameters:
    • data: A data frame containing the asset returns and other relevant metrics.
  • Example:
# Prepare the data for analysis
ff25 <- read.csv("data/FF25.csv")

# Define the date column index, start date, and end date
date_column_index <- 1  # Update this based on your data
start_date <- "19990101"  # Adjust as needed
end_date <- "20231231"  # Adjust as needed

# Prepare the data for analysis
data_prep <- prepare_data(ff25, date_column_index, start_date, end_date)
x <- data_prep$x
mon <- data_prep$mon
count <- data_prep$count
Date <- data_prep$Date

3. perform_analysis()

This function performs portfolio analysis using various methods such as Mean-Variance (MV), James-Stein (JM), LASSO, Ridge Regression, and Equal Weighting (EW). It calculates portfolio weights, turnover, returns, Sharpe ratios, volatility, and maximum drawdown for each method.

  • Parameters:
    • x: A numeric matrix where each column represents asset returns and rows represent time periods.
    • mon: A numeric vector representing the number of months since the start date for each time period.
    • count: A numeric vector indicating the number of entries per month.
    • Date: A vector of Date objects representing the dates of the time periods.
    • num_cores: The number of cores to use for parallel processing. Default is 7.
  • Returns:
    • A list containing components such as cumulative return plots, cumulative turnover plots, and performance metrics (Sharpe ratio, volatility, max drawdown).
  • Example:
# Perform the portfolio analysis
result <- perform_analysis(x, mon, count, Date, num_cores)

# Accessing the results
cumulative_return_plot <- result$cumulative_return_plot
turnover_mean <- result$turnover_mean
sharpe_ratio <- result$sharpe_ratio
volatility <- result$volatility
max_drawdown <- result$max_drawdown

# Display the cumulative return plot
print(cumulative_return_plot)

Example Workflow

Here’s an example workflow using the ‘REN’ package:

# Step 1: Set up parallel processing
cl <- setup_parallel(num_cores = 4)

# Step 2: Prepare the data
data_prep <- prepare_data(ff25, date_column_index, start_date, end_date)
x <- data_prep$x
mon <- data_prep$mon
count <- data_prep$count
Date <- data_prep$Date

# Step 3: Perform portfolio analysis
result <- perform_analysis(x, mon, count, Date, num_cores)

# Step 4: Plot and interpret the results
print(results$cumulative_return_plot)
print(results$turnover_mean)
print(results$sharpe_ratio)

# Remember to stop the cluster after completing the analysis
stopCluster(cl)

Contributing

Contributions to the ‘REN’ package are welcome. Please feel free to submit a pull request or report any issues you encounter.

License

This package is licensed under the MIT License.


Copy Link

Version

Install

install.packages('REN')

Version

0.1.0

License

AGPL (>= 3)

Maintainer

Last Published

October 10th, 2024

Functions in REN (0.1.0)

po.covShrink

Perform Shrinkage-Based Portfolio Optimization
po.grossExp

Perform Gross Exposure Portfolio Optimization
ren

Main Function for Portfolio Analysis
prepare_data

Prepare Data for Portfolio Analysis
setup_parallel

Setup Parallel Processing for Portfolio Analysis
FF25

FF25 Dataset
buh.clust

Perform Hierarchical Clustering on Asset Correlations
perform_analysis

Perform Portfolio Analysis
po.JM

Perform James-Stein Portfolio Optimization
po.TZT

Perform Portfolio Optimization Using TZT Method
po.SW

Perform Stochastic Weight Portfolio Optimization
po.SW.lasso

Perform LASSO Regularization with Stochastic Weight Portfolio Optimization
po.avg

Perform LASSO or Ridge Regression for Portfolio Optimization
po.bhu

Perform Portfolio Optimization Using Clusters and LASSO
insert.at

Insert Values at Specified Positions in a Vector
REN-package

REN: Regularization Ensemble for Robust Portfolio Optimization
po.cols

Perform Simple Linear Model for Portfolio Optimization