R-投资组合分析优化不起作用

R-投资组合分析优化不起作用,r,optimization,portfolio,r-portfolioanalytics,R,Optimization,Portfolio,R Portfolioanalytics,我目前正在创建一个最小方差投资组合,并决定使用 PortfolioAnalytics包的function optimize.portfolio。 不幸的是,在提取权重时,所有的权重都是NA,尽管我的返回值中没有任何NA值,这是导致结果权重为NA的唯一原因(从我的观点来看)。 我的数据集由多个资产(+5000)组成,每个资产有60个观察值(每月) 库(PortfolioAnalytics) 图书馆(ROI) #index returns是一个xts对象,由3800个股票ID(列)和60个观察值组成

我目前正在创建一个最小方差投资组合,并决定使用 PortfolioAnalytics包的function optimize.portfolio。 不幸的是,在提取权重时,所有的权重都是NA,尽管我的返回值中没有任何NA值,这是导致结果权重为NA的唯一原因(从我的观点来看)。 我的数据集由多个资产(+5000)组成,每个资产有60个观察值(每月)

库(PortfolioAnalytics)
图书馆(ROI)
#index returns是一个xts对象,由3800个股票ID(列)和60个观察值组成
#每月间隔:为了举例说明我的问题,我将索引_返回中的所有值设置为1,以使
#确保不存在NA值。
索引返回
any(is.na(index#u返回))#-->的计算结果为FALSE

port_spec您的优化很可能会失败,因为您拥有的资产远远多于观察值。然后,正如您正确假设的那样,您无法获得估计协方差矩阵的逆矩阵

引用“具有大量资产的投资组合优化方法:适用于美国和韩国股市”,网址为:

“当N大于T时,人们曾多次尝试寻找协方差矩阵的可逆估计量。Sengupta(1983)和Pappas等人(2010)使用了协方差矩阵的伪逆估计量,Ledoit和Wolf(2003)建议了协方差矩阵的收缩估计量。Ledoitand Wolf(2003)建议通过两个现有估计量的最优加权平均来估计协方差矩阵:样本协方差矩阵和单指数协方差矩阵。”

因此,我建议您首先看看Ledoit-Wolf收缩法。R-package风险投资组合,也可能有用,请参见

   library(PortfolioAnalytics)
   library(ROI)  
   #index returns is an xts object consisting of 3800 stock Ids(columns) and 60 observations in
   # monthly interval: To exemplifiy my problem, I set all values in index_returns to 1, to make 
   # sure that no NA values exist.
   index_returns
   any(is.na(index_returns)) # --> evaluates to FALSE
  port_spec <- portfolio.spec(assets =colnames(index_returns) )
  
  # Add a full investment constraint such that the weights sum to 1
  port_spec <- add.constraint(portfolio = port_spec, type = "full_investment")
  
  # Add a long only constraint such that the weight of an asset is between 0 and 1
  port_spec <- add.constraint(portfolio = port_spec, type = "long_only")
  
  # Add an objective to min portfolio variance
  port_spec <- add.objective(portfolio = port_spec, type = "risk", name = "var")
  
  # Solve the optimization problem
  opt <- optimize.portfolio(R = index_returns, trace=TRUE, portfolio = port_spec,optimize_method = "ROI")
  extractWeights(opt) #evaluates to NA for all assets