답변

6

두 가지 방법이 있습니다. 먼저 아래에 표시된 구조로 행렬을 포함하는 목록을 제공 한 다음이 목록을 인수로 포함하는 optimize.portfolio를 호출 할 수 있습니다.

# num_assets is the number of assets in the portfolio 
    momentargs <- list() 
    momentargs$mu <- matrix(0, nrow=num_assets, ncol=1) 
    momentargs$sigma <- matrix(0, nrow=num_assets, ncol=num_assets) 
    momentargs$m3 <- matrix(0, nrow=num_assets, ncol=num_assets^2) 
    momentargs$m4 <- matrix(0, nrow=num_assets, ncol=num_assets^3) 

    optimize.portfolio(R, portfolio, momentargs=momentargs, ...) 

또는 순간을 계산하는 함수를 제공 할 수 있습니다. PortfolioAnalytics (포트폴리오 분석) 옵션 중 일부를 재현 한 간단한 예가 아래에 나와 있습니다.

set.portfolio.moments.user=function(R, portfolio, user_moments=NULL, user_method=c(returns, input, two_moment)) { 
# 
# Sets portfolio moments to user specified values 
# 
# R    asset returns as in PortfoloAnalytics 
# portfolio  a portfolio object as in PortfolioAnalytics 
# user_moments a list of four matices containing user-specified 
#     values for the first four return moments 
# user_method  user-specified method for computing moment matrices 
#     defaults to calculation used by PortfolioAnalytics "sample" method 
#     which uses PerformanceAnalytics functions to computer the higher-order moments 

if(!hasArg(user_method) | is.null(user_method)) user_method <- "returns" 
    tmpR <- R 
    switch(user_method, returns = { 
    momentargs <- list() 
    momentargs$mu <- matrix(as.vector(apply(tmpR,2, "mean")), ncol = 1) 
    momentargs$sigma <- cov(tmpR) 
    momentargs$m3 <- PerformanceAnalytics:::M3.MM(tmpR) 
    momentargs$m4 <- PerformanceAnalytics:::M4.MM(tmpR) 
    }, input = { 
    momentargs <- user_moments 
    }, two_moment = { 
    momentargs <- list() 
    momentargs$mu <- matrix(as.vector(apply(tmpR,2, "mean")), ncol = 1) 
    momentargs$sigma <- cov(tmpR) 
    momentargs$m3 <- matrix(0, nrow=ncol(R), ncol=ncol(R)^2) 
    momentargs$m4 <- matrix(0, nrow=ncol(R), ncol=ncol(R)^3) 
    }) 

    return(momentargs) 
} 

그런 예로

optimize.portfolio(R, portfolio, momentFUN = "set.portfolio.moments.user", ...) 

와 PortfolioAnalytics을 부를 것이다.