R
帶 R 的 GBM 3d 繪圖
我想在 3d 圖中繪製 GBM 的密度。所以我在一個軸上是股票價格,在另一個軸上是時間,在 z 軸上是密度。最後我想製作這張圖。
我嘗試實現的公式可以在Wikipedia上找到。
這是我的方法:
mu <- 0.1 sigma <- 0.1 S0 <- 100 color <- rgb(85, 141, 85, maxColorValue=255) x <- seq(100, 112, length=40) y <- seq(0.25, 1.1, length=25) f <- function(s, t) { dlnorm(s, meanlog=log(S0) + ((mu - 1/2 * sigma^2) * t), sdlog=sigma * sqrt(t)) } z <- outer(x, y, f) persp(x, y, z, theta=160, phi=25, expand=0.75, col=color, ticktype="detailed", xlab="s", ylab="time", zlab="density" )
但它看起來顯然是錯誤的。那麼我的錯誤在哪裡?
我認為你沒有錯誤,如果你設置
sigma <- 0.0045
和x <- seq(100, 112, length=100) // Lower values produce jagged edges y <- seq(0.25, 1.1, length=60)
你會得到這個:
使用這些參數,密度具有大致相同的峰值,並且密度函式的最大值也具有相似的方向。唉,這個圖有很多問題:sigma 參數已更改,密度函式的最大值似乎下降得更慢。但是,生成的程式碼是正確的,因為我們可以假設 plnorm 正確實現並且 sdlog 參數顯然是正確的。平均參數也是正確的,其證明留作練習;)
我可以想像您對上述論點不滿意,但維基百科的情節一定是錯誤的。對數正態的波動性由下式給出 $ \sqrt{(e^{\sigma^2}-1) e^{2 \mu + \sigma^2}} $ . 為了 $ t=1 $ 這評估為 $ 11.08 $ ,這顯然比維基百科上的情節要廣泛得多,也許作者忘記在計算中包括股票價格 $ \mu $ . 與此生成的比較
mu <- 0.1 sigma <- 0.1 S0 <- 100 color <- rgb(85, 141, 85, maxColorValue=255) x <- seq(80, 130, length=100) y <- seq(0.25, 1.1, length=60) f <- function(s, t) { dlnorm(s, meanlog=log(S0) + ((mu - 1/2 * sigma^2) * t), sdlog=sigma * sqrt(t)) } z <- outer(x, y, f) persp(x, y, z, theta=180, phi=25, expand=0.75, col=color, ticktype="detailed", xlab="s", ylab="time", zlab="density" )