Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R KMV在求解非线性方程组中的应用_R_Loops_Dataframe_While Loop - Fatal编程技术网

R KMV在求解非线性方程组中的应用

R KMV在求解非线性方程组中的应用,r,loops,dataframe,while-loop,R,Loops,Dataframe,While Loop,我目前正在做关于默顿KMV模型的硕士论文,我需要将其应用到一些公司。这是我使用的链接 我试图循环求解非线性方程组的过程。到目前为止,我已经找到了一个解决方案,通过手动实现每个参数来解决它,但现在我需要将它应用到整个数据帧 这是我到目前为止提出的代码: 加载文件和库,设置索引 library(nleqslv)#这是一个解决非线性方程的软件包,根据默顿模型中的布莱克和斯科尔斯公式计算资产价值及其波动率 df您应该使用 df <- read.csv("AREX_D.csv", stringsAs

我目前正在做关于默顿KMV模型的硕士论文,我需要将其应用到一些公司。这是我使用的链接

我试图循环求解非线性方程组的过程。到目前为止,我已经找到了一个解决方案,通过手动实现每个参数来解决它,但现在我需要将它应用到整个数据帧

这是我到目前为止提出的代码:

加载文件和库,设置索引
library(nleqslv)#这是一个解决非线性方程的软件包,根据默顿模型中的布莱克和斯科尔斯公式计算资产价值及其波动率

df您应该使用

df <- read.csv("AREX_D.csv", stringsAsFactors=FALSE)
D
等的值应作为标量传递给函数

nleqslv
返回由各种项目组成的列表。其中之一是
x
:参数
x
的最终值。 您不能以
out[1]
和out[2]
的身份访问这些文件
您需要将输出存储在数据帧的每一行中

您希望将这些存储在数据帧中,因此请使用
out$x[1]
out$x[2]
。 起始值
xstart
的一些初始值包含
NA
。 因此,在调用
nleqslv
之前,需要测试
xstart
是否包含
NA

代码和最后的
while
循环中还有其他错误。 所以把最后一个循环改成这个

df$termcd <- -1
kstart <- which(df$Date == "03/01/2017")
kend  <- NROW(df)

for( k in kstart:kend ) {
    xstart <- c(E[k]+D[k], sigmaE[k])
    if(anyNA(xstart)) { next } # skip NA in input
    out <- nleqslv(xstart,fnewton,method="Newton", D=D[k],E=E[k],sigmaE=sigmaE[k])
    df$Asset[k] <- out$x[1]
    df$sigmaA[k] <- out$x[2]
    df$termcd[k] <- out$termcd
}

df$termcd请提供一个可复制的示例。看见请在
前后使用空格,谢谢你的精确性。我已经编辑了代码并包含了对我使用的CSV文件的引用。我希望它更接近于一个可复制的例子。哇,非常感谢你,它现在看起来像一个魅力!我唯一想不出的是
df$termcd
列的有用性,但我认为sigma_a和资产计算正确,再次感谢!抱歉,回复阅读
nleqslv
的文档花了这么长时间。它告诉您什么是
termcd
;它是
nleqslv
的返回代码,告诉您
nleqslv
是否成功。如果你很满意,就投赞成票。
fnewton <- function(x)
  {
  y <- numeric(2)
  d1 <- (log(x[1]/D)+(r+x[2]^2/2)*T)/x[2]*sqrt(T)
  d2 <- d1-x[2]*sqrt(T)
  y[1] <- E-(x[1]*pnorm(d1)-exp(-r*T)*D*pnorm(d2))
  y[2] <- sigmaE*E-pnorm(d1)*x[2]*x[1]
  y
  }
xstart <- c(E+D, sigmaE)#initialising the x-values (asset value and volatility for the function to solve the non linear equation

while (theDate<=end)
  {
  out <- nleqslv(xstart,fnewton,method="Newton")
  df$Asset <- out[1]
  df$sigmaA <- out[2]
  theDate <- theDate+1
}
print(tail(df))
df <- read.csv("AREX_D.csv", stringsAsFactors=FALSE)
fnewton <- function(x, D, E, sigmaE)
  {
  y <- numeric(2)
  d1 <- (log(x[1]/D)+(r+x[2]^2/2)*T)/x[2]*sqrt(T)
  d2 <- d1-x[2]*sqrt(T)
  y[1] <- E-(x[1]*pnorm(d1)-exp(-r*T)*D*pnorm(d2))
  y[2] <- sigmaE*E-pnorm(d1)*x[2]*x[1]
  y
  }
df$termcd <- -1
kstart <- which(df$Date == "03/01/2017")
kend  <- NROW(df)

for( k in kstart:kend ) {
    xstart <- c(E[k]+D[k], sigmaE[k])
    if(anyNA(xstart)) { next } # skip NA in input
    out <- nleqslv(xstart,fnewton,method="Newton", D=D[k],E=E[k],sigmaE=sigmaE[k])
    df$Asset[k] <- out$x[1]
    df$sigmaA[k] <- out$x[2]
    df$termcd[k] <- out$termcd
}