程式

為什麼這個效用函式沒有受到懲罰?

  • July 14, 2017

我正在閱讀 Infanger 的這篇開創性論文。在第 40 頁,圖 11。非常有趣。特別是我對頂部的 19 年很感興趣,我想重現這個情節。提供一些背景知識:這是關於應通過 DP 方法解決的效用最大化,即

$$ \max_{x_t,0\le t\le T} E[u(W_T)] $$ 在哪裡 $ u $ 是效用函式,並且 $ W_T $ 是當時的財富 $ T $ . 因此,我們希望最大化終端財富。對於圖片,他使用以下“二次下行風險”函式

$$ u(W) = W - \frac{\lambda}{2}\max{(0,W_d-W)^2} $$ 在哪裡 $ W_d $ 是一個目標數量並且 $ \lambda $ 一個縮放參數。隨著財富的演變 $ W_{t+1} = W_t \cdot\langle x_t, R\rangle $ 在哪裡 $ x_t $ 是分配和 $ R $ 作為回報,他寫下了這個問題的貝爾曼方程:

$$ V_{t}(W_t) = \max_{x_t}E[V_{t+1}(W_t\cdot \langle x_t, R\rangle)|W_t] $$ 因為我只對最後一步感興趣,所以我們有 $ V_T = u $ 我要解決的最大化問題是 $$ V(W) = \max_{x}E[u(W\cdot \langle x, R\rangle)|W] $$ 丟掉時間 $ t $ 指數。我假設(就像 Infanger 如果我猜對了他所做的那樣),那 $ R $ 是正態分佈的。然後,我使用 Gauss-Hermite 求積來近似期望(參見本文第 71 頁)。 $$ V(W) = \frac{1}{\sqrt{\pi}}\max_{x}\sum_{i=1}^m w_i u(W(1+\hat{\mu}(x)+\sqrt{2}\hat{\sigma}(x)\cdot q_i)) $$ 在哪裡 $ \hat{\mu} = \langle \mu, x\rangle $ 和 $ \hat{\sigma} = \sqrt{\langle x, \Sigma x\rangle} $ 和 $ w_i $ 是 Gauss-Hermite 權重和 $ q_i $ 對應的節點。 我編寫了一個非常簡單且未優化的版本,以查看是否獲得所需的圖片。

首先是效用函式的圖片:

utility <- function(w){
 K <- 100000
 temp <- K-w
 temp[temp<=0] <- 0
 return(w - 1000*temp^2)
}

x <- seq(90000,120000,1000)
y <- utility(x)
plot(x,y,type="l")

在此處輸入圖像描述

現在我剛剛生成了一個序列 $ W $ 並解決了上述問題。以下程式碼垃圾定義了共變異數和預期返迴向量。數據來自上面的 Infanger 論文。

wealth <- seq(50000,150000,5000)
mu <- c(0.108, 0.1037, 0.0949, 0.079, 0.0561)
cor <- matrix(c(1, 0.601, 0.247, 0.062, 0.094,
               0.601, 1.0, 0.125, 0.027, 0.006,
               0.247, 0.125, 1.0, 0.883, 0.194,
               0.062, 0.027, 0.883, 1.0, 0.27,
               0.094, 0.006, 0.194, 0.27, 1.0),
             ncol=5, nrow=5,byrow=T)
std <- c(0.1572, 0.1675, 0.0657, 0.0489, 0.007)
temp <- std%*%t(std)
cov <- temp*cor

有了這些數據和一系列財富(見上文),我只需對每個給定的財富進行優化並儲存解決方案(假設沒有賣空)。為了解決這個問題,我Rsolnp在 R 中使用了這個包。它解決了一個最小化問題,這就是我返回一個 $ -1 $ 在下面的目標函式中:

library(Rsolnp)
library(statmod)
obj <- function(x, currentWealth, mu, cov, r=0, nodes, weights){
 drift <- sum((mu-r)*x)+r
 cor <- sqrt(sum(x*(cov%*%x)))
 term1 <- currentWealth*(1+drift)
 term2 <- currentWealth*sqrt(2)*cor*nodes
 return(-1/sqrt(pi)*sum(weights*utility(term1+term2)))
}

g_constraints <- function(x,currentWealth, mu, cov, r=0, nodes, weights){
 return(sum(x))
}

x0 <- rep(0.25,length(mu))
weights <- gauss.quad(10,"hermite")$weights
nodes <- gauss.quad(10,"hermite")$nodes
solmat <- matrix(NA, ncol=length(mu),nrow=length(wealth))
for(i in 1:length(wealth)){
 sol <- solnp(pars=x0, fun = obj,
              eqfun = g_constraints,
              eqB = 1,
              LB = rep(0, length(mu)),
              UB = rep(1, length(mu)),
              currentWealth = wealth[i], mu = mu, cov = cov,
              r = 0, nodes = nodes, weights = weights)
 solmat[i,] <- sol$pars
 x0 <- sol$pars
}
colnames(solmat) <- c("US Stock", "Int Stocks", "Corp Bonds", "Gvnt Bond", "Cash")
rownames(solmat) <- as.character(wealth)

然而,我得到了一個恆定的分配,所有的錢都投資於美國股票。這有什麼問題,我如何從 Infanger 獲得這張圖表?

問題是缺少 $ W_t $ 在相關方程中。我已經更新了上面的程式碼並重新執行。我們現在有以下分配,它更接近於 Infanger 論文。

> solmat
          US Stock  Int Stocks Corp Bonds    Gvnt Bond         Cash
50000  5.043872e-01 0.089871441 0.40574133 2.745030e-08 1.788550e-09
55000  4.050341e-01 0.090625580 0.50434024 2.744996e-08 1.788417e-09
60000  3.222272e-01 0.091347143 0.58642565 2.744972e-08 1.788325e-09
65000  2.521815e-01 0.091750138 0.65606829 2.744945e-08 1.788218e-09
70000  1.920722e-01 0.092167629 0.71576010 2.744928e-08 1.788152e-09
75000  1.401952e-01 0.092551771 0.76725296 2.744917e-08 1.788109e-09
80000  9.542976e-02 0.092965569 0.81160464 2.744770e-08 1.787578e-09
85000  5.926248e-02 0.085949047 0.77256462 2.548693e-10 8.222386e-02
90000  2.556086e-02 0.042435548 0.35690767 2.546768e-10 5.750959e-01
95000  5.666367e-07 0.007460414 0.02786258 1.724982e-12 9.646764e-01
1e+05  4.086260e-03 0.018524853 0.14238886 1.318764e-04 8.348682e-01
105000 4.229705e-03 0.021298108 0.33601246 1.319004e-04 6.383278e-01
110000 4.261748e-03 0.022020057 0.49978208 1.319047e-04 4.738042e-01
115000 1.014474e-02 0.042426599 0.62859439 3.219158e-03 3.156151e-01
120000 1.040348e-02 0.046451692 0.76095787 3.218435e-03 1.789685e-01
125000 1.308464e-02 0.132081249 0.79793418 3.218537e-03 5.368139e-02
130000 1.429210e-02 0.239570571 0.72417454 3.105067e-03 1.885772e-02
135000 1.471366e-02 0.313967841 0.65235180 3.064252e-03 1.590244e-02
140000 1.492658e-02 0.369961444 0.59727148 3.044485e-03 1.479601e-02
145000 1.506062e-02 0.416426483 0.55128612 3.032353e-03 1.419442e-02
150000 1.515564e-02 0.456708072 0.51130955 3.023891e-03 1.380285e-02

引用自:https://quant.stackexchange.com/questions/35067