View source: R/compute_portfolio_returns.R
| compute_portfolio_returns | R Documentation |
Computes individual portfolio returns based on specified sorting variables and sorting methods. The portfolios can be rebalanced every period or on an annual frequency by specifying a rebalancing month, which is only applicable at a monthly return frequency. The function supports univariate and bivariate sorts, with the latter supporting dependent and independent sorting methods.
compute_portfolio_returns(
data,
sorting_variables,
sorting_method,
rebalancing_month = NULL,
breakpoint_options_main,
breakpoint_options_secondary = NULL,
breakpoint_function_main = compute_breakpoints,
breakpoint_function_secondary = compute_breakpoints,
min_portfolio_size = 1L,
cap_weight = 0.8,
data_options = NULL,
quiet = FALSE
)
data |
A data frame containing the dataset for portfolio assignment
and return computation. The panel data must include individual stock
identifiers and the time point. It must contain columns for the sorting
variables and excess returns. Additionally, lagged market capitalization
is required for value-weighted returns (see parameter |
sorting_variables |
A character vector specifying the column names in
|
sorting_method |
A string specifying the sorting method to be used. Possible values are:
For bivariate sorts, the portfolio returns are averaged over the
controlling sorting variable (i.e., the second sorting variable), and only
portfolio returns for the main sorting variable (given as the first
element of |
rebalancing_month |
An integer between 1 and 12 specifying the month
in which to form portfolios that are held constant for one year. For
example, setting it to |
breakpoint_options_main |
A named list of |
breakpoint_options_secondary |
An optional named list of
|
breakpoint_function_main |
A function to compute the breakpoints for
the main sorting variable. The default is set to |
breakpoint_function_secondary |
A function to compute the breakpoints
for the secondary sorting variable. The default is set to
|
min_portfolio_size |
An integer specifying the minimum number of
firms required in the reported portfolio cross-section on a given date
(default |
cap_weight |
A numeric value between 0 and 1 specifying the percentile
at which market capitalization is capped per date when computing capped
value-weighted excess returns (i.e., |
data_options |
A list of class |
quiet |
A logical value indicating whether to suppress informational
messages about missing values in the output panel (default is |
The function checks for consistency in the provided arguments. For univariate sorts, a single sorting variable and a corresponding number of portfolios must be provided. For bivariate sorts, two sorting variables and two corresponding numbers of portfolios (or percentiles) are required. The sorting method determines how portfolios are assigned and how returns are computed. The function handles missing and extreme values appropriately based on the specified sorting method and rebalancing frequency.
A data frame with computed portfolio returns as a complete panel (all portfolio-date combinations), containing the following columns:
portfolio: The portfolio identifier.
date: The date of the portfolio return.
ret_excess_vw: The value-weighted excess return of the
portfolio (only computed if data contains a lagged market
capitalization column specified by data_options(), which defaults
to mktcap_lag). NA if insufficient observations for that
portfolio-date.
ret_excess_ew: The equal-weighted excess return of the
portfolio. NA if insufficient observations for that portfolio-date.
ret_excess_vw_capped: The capped value-weighted excess return
of the portfolio (only computed if data contains a lagged market
capitalization column specified by data_options(), which defaults
to mktcap_lag). Weights are computed using market capitalization
capped at the cap_weight percentile per date. NA if insufficient
observations for that portfolio-date.
Ensure that data contains all required columns: the specified
sorting variables and excess returns (see options and defaults set in
data_options). The function will stop and throw an error if any required
columns are missing.
Other portfolio functions:
assign_portfolio(),
breakpoint_options(),
compute_breakpoints(),
compute_long_short_returns(),
data_options(),
filter_options(),
filter_sorting_data(),
implement_portfolio_sort(),
portfolio_sort_options()
set.seed(42)
# Univariate sorting with periodic rebalancing
data <- data.frame(
permno = 1:500,
date = rep(
seq.Date(
from = as.Date("2020-01-01"),
by = "month",
length.out = 100
),
each = 10
),
mktcap_lag = runif(500, 100, 1000),
ret_excess = rnorm(500),
size = runif(500, 50, 150)
)
compute_portfolio_returns(
data, "size", "univariate",
breakpoint_options_main = breakpoint_options(n_portfolios = 5)
)
# Bivariate dependent sorting with annual rebalancing
compute_portfolio_returns(
data, c("size", "mktcap_lag"), "bivariate-dependent", 7,
breakpoint_options_main = breakpoint_options(n_portfolios = 5),
breakpoint_options_secondary = breakpoint_options(n_portfolios = 3),
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.