【发布时间】:2014-05-08 20:06:25
【问题描述】:
我正在使用 Merton 默认模型和复杂的迭代方法。
我已经准备好了我的 R 代码,但由于我是 R 的新手,它们似乎非常低效,从某种意义上说它们运行了将近 7 个小时。我的主要问题是我的 for 循环部分。
恳请您检查我的 R 代码并提供任何可以使我的 R 代码更高效的更正,即它们运行的时间更少 我在这里下载了所有数据和 R 代码: https://www.dropbox.com/sh/jlqvao40e5nvkev/AACpPdAdG67juhX9HoHPpiC1a
编辑: 下面的循环运行很多,也许你知道一些我可以在这里用while和for循环替换的函数,我想sappy可以工作但我不知道如何应用它:
errors<-ddply( df5, .(id, BSheetyearlag), function(x) sum((x$iterK-x$iterK1)^2))
df5<-as.data.frame(df5)
df5<-join(df5, errors, by=c("id", "BSheetyearlag"))
df5<-as.data.table(df5)
for ( i in 1:nrow(errors)){
while(errors$V1[i] >= 10^(-10)) {
df5<-as.data.table(df5)
df5[,iterK:= iterK1,by=c("id", "BSheetyearlag")]
df5[,assetreturn:=c(NA,diff(log(iterK))),by=c("id", "BSheetyearlag")]
df5[,rollsdasset:=rollapply(assetreturn, 249, sd, fill=NA, align='right')*sqrt(250), by=c("id", "BSheetyearlag")]
df5[,iterK1:=(cap+LTD05*exp(-rfabsol)*pnorm(blackscholes(iterK,LTD05,rfabsol, 1,rollsdasset[250]))-rollsdasset[250])/pnorm(blackscholes(iterK,LTD05,rfabsol, 1,rollsdasset[250])),by=c("id", "BSheetyearlag")]
df5<-as.data.frame(df5)
errors$V1[i]<-sum((df5[df5$V1 %in% errors$V1[i],"iterK"]-df5[df5$V1 %in% errors$V1[i],"iterK1"])^2)
}
}
【问题讨论】:
-
这个网站是针对特定问题的。
-
我的问题在 for 循环部分,但为了整体理解,我下载了所有数据
-
不要使用保管箱位置来显示问题。将问题的规模缩小到可以将代码和数据输入问题本身的程度。事实上,这个问题不适合 SO。
-
建议您将其移至:codereview.stackexchange.com
-
很抱歉,我的问题没有说清楚。我会尽量以好的形式呈现。