对于在R中使用nleqslv包的循环

时间:2014-05-12 20:30:21

标签: r for-loop

我有一个可以通过以下示例近似的数据框:

                 firm       <-seq(c(rep(6,253), rep(7, 252), rep(8,254), rep(9,251))
                 LTD05      <- seq(1, 1010, 1)
                 cap        <- seq(2,1011,1)
                 riskfree   <- c(rep(1,253), rep(2, 252), rep(3,254), rep(4,251))
                 equityvol  <- seq(0.1, 0.101, 0.1)
                 df <- data.frame(firm,LTD05,cap,riskfree,equityvol) 

LTD 05 是公司的负债,上限是市场股权价值,无风险是无风险回报, equityvol 是公司的股权波动。我想使用Merton模型中的数值方法估算样本中每个观察值的资产价值和资产波动率。我运行for loop

 for( i in 1:nrow(df)) {
 fnewton <- function(x){
 y <- numeric(2)
 d1 <- (log(x[1]/df$LTD05[i])+(df$riskfree[i]+x[2]^2/2))/x[2]
 d2 <- d1-x[2]
 y[1] <- df$cap[i]- (x[1]*pnorm(d1) - exp(-df$riskfree[i])*df$LTD05[i]*pnorm(d2))
 y[2]<-df$equityvol[i]*df$cap[i]-pnorm(d1)*x[2]*x[1]
 y
                      }

 xstart <- c(df$cap[i]+df$LTD05[i],df$equityvol[i]) 

 data$asset_new_value[i]<-nleqslv(xstart, fnewton, method="Newton")$x[1]
 data$asset_new_volat[i]<-nleqslv(xstart, fnewton, method="Newton")$x[2]


 i=i+1
  }

这个问题已经讨论过:here。但是,我的问题是,当我运行此循环时,我得到资产波动的负值(实际上并非如此)。我怀疑我可能在for loop中有错误。你能提出任何意见吗?

0 个答案:

没有答案