2013-09-23 174 views
3

我正在寫我的碩士論文,並且在我的R代碼中遇到了這個問題。在數學上,我想解決這個系統的非線性方程組與R-包「nleqslv」:在R/Black-Scholes-Merton模型中求解非線性方程組

fnewton <- function(x){ 

y <- numeric(2) 

d1 = (log(x[1]/D1)+(R+x[2]^2/2)*T)/x[2]*sqrt(T) 

d2 = d1-x[2]*sqrt(T) 

y1 <- SO1 - (x[1]*pnorm(d1) - exp(-R*T)*D1*pnorm(d2)) 

y2 <- sigmaS*SO1 - pnorm(d1)*x[2]*x[1] 

y} 

xstart <- c(21623379, 0.526177094846878) 

nleqslv(xstart, fnewton, control=list(btol=.01), method="Newton") 

我已經試過這個代碼的多個版本,現在我得到的錯誤:

error: error in pnorm(q, mean, sd, lower.tail, log.p): not numerical.

Pnorm分別表示d1和d2的累積標準正態分佈。我真的不知道,我在做什麼錯了,因爲我的面向我上Teterevas幻燈片模式(幻燈片5號是她的模型代碼),誰的表現是googeling

https://www.google.de/search?q=moodys+KMV+in+R&rlz=1C1SVED_enDE401DE401&aq=f&oq=moodys+KMV+in+R&aqs=chrome.0.57.13309j0&sourceid=chrome&ie=UTF-8#q=distance+to+default+in+R

像我的第一個結果,然而,更成功的是,她通過Black-Scholes-Merton方法計算了距離違約風險度量。在這個模型中,股票的價值(通常以市值 - > SO1表示)可以寫成歐式看漲期權 - 我在上面的代碼中標記了y2,然而,之前的方程設置爲0!

其他變量是:

X [1] - >我想得出,總資產

的值的變量

X [2] - >我希望變量來導出,總揮發性資產

D1 - >債務的賬面價值(1998-2009)

的R - >無風險利率

筆 - >設置爲1(時間)

sigmaS - >估計(歷史)股票波動率

已經感謝!!!我會很高興,任何人都可以幫助我。 Caro

+0

不要調用變量'T'。這是R中「TRUE」的一個別名,並且可能會導致無法預料的後果。但是,您需要檢查用於計算'd1'和'd2'的所有變量是否爲數字。 – Roland

+0

代碼中沒有定義D1,R,T或SO1。 –

+0

@羅蘭:謝謝,我會試試這個。 – schloni

回答

9

我是nleqslv的作者,我很驚訝你如何使用它。正如其他人所說,你沒有回報任何明智的東西。

y1應該是y [1],y2應該是y [2]。如果你想要我們說明明智的事情,你將不得不提供D1,R,T,sigmaS和SO1的數值。我試過這個:

T <- 1; D1 <- 1000; R <- 0.01; sigmaS <- .1; SO1 <- 1000 

這些已經在函數定義之前輸入了。看到這個

library(nleqslv) 

T <- 1 
D1 <- 1000 
R <- 0.01 

sigmaS <- .1 
SO1 <- 1000 

fnewton <- function(x){ 
    y <- numeric(2) 
    d1 <- (log(x[1]/D1)+(R+x[2]^2/2)*T)/x[2]*sqrt(T) 
    d2 <- d1-x[2]*sqrt(T) 
    y[1] <- SO1 - (x[1]*pnorm(d1) - exp(-R*T)*D1*pnorm(d2)) 
    y[2] <- sigmaS*SO1 - pnorm(d1)*x[2]*x[1] 
    y 
} 

xstart <- c(21623379, 0.526177094846878) 

nleqslv在這種情況下找到解決方案沒有問題。找到的解決方案是:c(1990.04983,0.05025)。似乎不需要設置參數btol,並且您可以使用方法Broyden

+0

感謝您的幫助!它的工作,終於:-) – schloni