假设我有美国行业指数(例如非耐用品、耐用品、制造业等)以及每个行业内的公司的数据。我的目的是看看对于给定的行业,公司数量的增加和增加是否会影响投资组合风险调整后的回报。
R 中有没有一种方法可以编写代码:
1- 根据最大去相关获得分配给每个扇区的权重, 2- 根据这些行业的资产投资创建多个投资组合。例如,一个包含 4 种资产的投资组合并衡量其夏普比率,一个包含 8 种资产的投资组合,...,等等。
我尝试在以下代码中使用 RiskPortfolios 包计算扇区的最大去相关权重:
sigma =covEstimation(return_sectoral_data)
weights_max_decorrel<-round(optimalPortfolio(Sigma = sigma,
control = list(type = 'maxdec', constraint = 'lo')),2)
print(weights_max_decorrel)
Durable Manufacturing Energy Tech NonDurable
0.41 0.06 0.34 0.00 0.16
Tech Shops Health
0.00 0.03 0.00
但是在获得这些权重之后,我不确定如何根据投资于权重非零的投资组合中的公司来创建不同的投资组合。
# Assuming you have the return_sectoral_data and weights_max_decorrel
library(RiskPortfolios)
library(PortfolioAnalytics)
# Set seed for reproducibility
set.seed(123)
# Number of portfolios to create with different numbers of assets
portfolio_sizes <- c(4, 8, 12)
# Initialize a data frame to store results
portfolio_results <- data.frame(Size = numeric(),
SharpeRatio = numeric(),
stringsAsFactors = FALSE)
# Loop through different portfolio sizes
for (size in portfolio_sizes) {
# Randomly select 'size' number of assets from each sector based on weights
selected_assets <- lapply(names(weights_max_decorrel),
function(sector) sample(names(return_sectoral_data[[sector]]), size, replace = FALSE))
# Flatten the list of selected assets
selected_assets <- unlist(selected_assets)
# Extract returns for the selected assets
selected_returns <- return_sectoral_data[selected_assets]
# Calculate portfolio returns and covariance matrix
portfolio_return <- colMeans(selected_returns)
portfolio_covariance <- cov(selected_returns)
# Calculate portfolio volatility
portfolio_volatility <- sqrt(t(weights_max_decorrel) %*% portfolio_covariance %*% weights_max_decorrel)
# Calculate Sharpe Ratio
portfolio_sharpe <- SharpeRatio(portfolio_return, portfolio_volatility)
# Store results in the data frame
portfolio_results <- rbind(portfolio_results, c(size, portfolio_sharpe))
}
# Print the results
print(portfolio_results)