楼主: xinchui_q
4016 6

[问答] R语言自己编写函数,参数找不到对象。。 [推广有奖]

  • 0关注
  • 0粉丝

初中生

76%

还不是VIP/贵宾

-

威望
0
论坛币
13 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
107 点
帖子
11
精华
0
在线时间
23 小时
注册时间
2012-12-21
最后登录
2018-7-26

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
#定义变量
#初始股票价格S0 换股价k 期限长度T 债券价格W 无风险利率r 债券利率R 股票波动率sigma 行权期数d
LSM2 <- function(d,S0,K,sigma,r,R,T,RDPrate,redemption,PUTrate,put)
{  
   #对债券每一期赋值
   debt<-vector(mode="numeric",d)  
   debt[d]<-100
   for (k in (d-1):1)
   { debt[k]=(debt[k+1]+exp(R*T/d))*exp(-r*T/d)}

   #设置路径,计算期权价格
   S<-matrix(,50,1000)
   f<-matrix(,50,1000)
   p<-matrix(,50,1000)
   pv<-matrix(,50,1000)
   price<-matrix(,1,1000)
   #设置最后一期状态
   z<-rnorm(1000,0,1)
   S[d,1:1000]=S0*exp((r-sigma^2/2)*k*T/t+sigma*sqrt(k*T/d)*z)
   for ( u in 1:1000)
   { if (S[d,u]>=K) {P[d,1:1000]=100/K*S[d,u]} else {P[d,u]=debt[d]} }

   #生成标准正态分布随机数1000个,生成股票价格路径
   for(k in d-1:1)
   {   
       z<-rnorm(1000,0,1)
       S[k,1:1000]=S0*exp((r-sigma^2/2)*k*T/t+sigma*sqrt(k*T/d)*z)
       #继续持有的债券在下一期的期望价值
       parameter <- lm(S[k+1,] ~ S[k,] + S[k,]^2 + S[k.]^3)$coefficients
       estimated<-parameter[1]+parameter[2]*S[k,]+parameter[3]*S[k,]^2+parameter[4]*S[k,]^3
       for(u in 1:1000)
       { #处理回售、赎回条件后的下一期期望债券价值f
         if (estimated[u]>=RDPrate*K) {f[k+1,u]<-redemption}
         else if (estimated[u]>K & estimated[u]<RDPrate*K) {f[k+1,u]<-100/K*estimated[u]}
         else if (estimated[u]<K & estimated[u]>PUTrate*K) {f[k+1,u]<-debt[k]}
         else {f[k+1,u]<-put}
         #比较转股和继续持有得到当期最优价值p
         if (S[k,u]>=K) {p[k,u]=max ( 100/K*S[k,u], f[k+1,u]*exp(-r*T/d) )
         if (S[k,u]< K)  {p[k,u]=max ( debt[k], f[k+1,u]*exp(-r*T/d)    ) }
    #求得所有路径下各个状态的平均期望现值
    pv[k,]<-p[k,]*exp(-r*T/d*k)  }   
    price<-apply(pv,2,max)
    EBprice<-mean(price)
    error<- 1.96 * sd(price)/sqrt(1000)
    data.frame(EBprice, error)}


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:找不到对象 R语言 无风险利率 Sigma 股票波动率

沙发
xinchui_q 发表于 2017-3-6 16:02:33 |只看作者 |坛友微信交流群
求大神帮助

使用道具

藤椅
xinchui_q 发表于 2017-3-6 16:20:18 |只看作者 |坛友微信交流群
有没有大神能指点一下。

使用道具

板凳
xinchui_q 发表于 2017-3-6 16:25:55 |只看作者 |坛友微信交流群
#定义变量
#初始股票价格S0 换股价k 期限长度T 债券价格W 无风险利率r 债券利率R 股票波动率sigma 行权期数d
LSM2 <- function(d,S0,K,sigma,r,R,T,RDPrate,redemption,PUTrate,put)
{  
   #对债券每一期赋值
   debt<-vector(mode="numeric",d)  
   debt[d]<-100
   for (k in (d-1):1)
   {debt[k]=(debt[k+1]+exp(R*T/d))*exp(-r*T/d)}
   
   #设置路径,计算期权价格
   S<-matrix(,d,1000)
   f<-matrix(,d,1000)
   p<-matrix(,d,1000)
   pv<-matrix(,d,1000)
   price<-matrix(,1,1000)
   #设置最后一期状态
   z<-rnorm(1000,0,1)
   S[d,1:1000]=S0*exp((r-sigma^2/2)*k*T/t+sigma*sqrt(k*T/d)*z)
   for ( u in 1:1000)
   { if (S[d,u]>=K) {P[d,1:1000]=100/K*S[d,u]} else {P[d,u]=debt[d]} }

   #生成标准正态分布随机数1000个,生成股票价格路径
   for(k in d-1:1)
   {   
       z<-rnorm(1000,0,1)
       S[k,1:1000]=S0*exp((r-sigma^2/2)*k*T/t+sigma*sqrt(k*T/d)*z)
       #继续持有的债券在下一期的期望价值
       parameter <- lm(S[k+1,] ~ S[k,] + S[k,]^2 + S[k.]^3)$coefficients
       estimated<-parameter[1]+parameter[2]*S[k,]+parameter[3]*S[k,]^2+parameter[4]*S[k,]^3
       for(u in 1:1000)
       { #处理回售、赎回条件后的下一期期望债券价值f
         if (estimated[u]>=RDPrate*K) {f[k+1,u]<-redemption}
         else if (estimated[u]>K & estimated[u]<RDPrate*K) {f[k+1,u]<-100/K*estimated[u]}
         else if (estimated[u]<K & estimated[u]>PUTrate*K) {f[k+1,u]<-debt[k]}
         else {f[k+1,u]<-put}
         #比较转股和继续持有得到当期最优价值p
         if (S[k,u]>=K) {p[k,u]=max ( 100/K*S[k,u], f[k+1,u]*exp(-r*T/d) )}
         if (S[k,u]< K)  {p[k,u]=max ( debt[k], f[k+1,u]*exp(-r*T/d)    ) }}
    #求得所有路径下各个状态的平均期望现值
    pv[k,]<-p[k,]*exp(-r*T/d*k)  }   
    price<-apply(pv,2,max)
    EBprice<-mean(price)
    error<- 1.96 * sd(price)/sqrt(1000)
    data.frame(EBprice, error)}


   
LSM2 <- function(20,36.01,57,0.2,3%,1%,4,1.3,107,0.8,107)

使用道具

报纸
xinchui_q 发表于 2017-3-6 16:26:26 |只看作者 |坛友微信交流群
误: unexpected numeric constant in "LSM2 <- function(20"

使用道具

地板
xinchui_q 发表于 2017-3-6 16:53:38 |只看作者 |坛友微信交流群
#定义变量
#初始股票价格S0 换股价k 期限长度T 债券价格W 无风险利率r 债券利率R 股票波动率sigma 行权期数d
LSM <- function(d,S0,K,sigma,r,R,T,RDPrate,redemption,PUTrate,put)
{  
   #对债券每一期赋值
   debt<-vector(mode="numeric",d)  
   debt[d]<-100
   for (k in (d-1):1)
   {debt[k]=(debt[k+1]+exp(R*T/d))*exp(-r*T/d)}
   
   #设置路径,计算期权价格
   S<-matrix(,d,1000)
   f<-matrix(,d,1000)
   p<-matrix(,d,1000)
   pv<-matrix(,d,1000)
   price<-matrix(,1,1000)
   #设置最后一期状态
   z<-rnorm(1000,0,1)
   S[d,1:1000]=S0*exp((r-sigma^2/2)*k*T/d+sigma*sqrt(k*T/d)*z)
   for ( u in 1:1000)
   { if (S[d,u]>=K) {P[d,1:1000]=100/K*S[d,u]} else {p[d,u]=debt[d]} }

   #生成标准正态分布随机数1000个,生成股票价格路径
   for(k in d-1:1)
   {   
       z<-rnorm(1000,0,1)
       S[k,1:1000]=S0*exp((r-sigma^2/2)*k*T/d+sigma*sqrt(k*T/d)*z)
       #继续持有的债券在下一期的期望价值
       parameter <- lm(S[k+1,] ~ S[k,] + S[k,]^2 + S[k,]^3)$coefficients
       estimated<-parameter[1]+parameter[2]*S[k,]+parameter[3]*S[k,]^2+parameter[4]*S[k,]^3
       for(u in 1:1000)
       { #处理回售、赎回条件后的下一期期望债券价值f
         if (estimated[u]>=RDPrate*K) {f[k+1,u]<-redemption}
         else if (estimated[u]>K & estimated[u]<RDPrate*K) {f[k+1,u]<-100/K*estimated[u]}
         else if (estimated[u]<K & estimated[u]>PUTrate*K) {f[k+1,u]<-debt[k]}
         else {f[k+1,u]<-put}
         #比较转股和继续持有得到当期最优价值p
         if (S[k,u]>=K) {p[k,u]=max ( 100/K*S[k,u], f[k+1,u]*exp(-r*T/d) )}
         if (S[k,u]< K)  {p[k,u]=max ( debt[k], f[k+1,u]*exp(-r*T/d)    ) }}
    #求得所有路径下各个状态的平均期望现值
    pv[k,]<-p[k,]*exp(-r*T/d*k)  }   
    price<-apply(pv,2,max)
    EBprice<-mean(price)
    error<- 1.96 * sd(price)/sqrt(1000)
    data.frame(EBprice, error)}


LSM( 20, 36.01, 57, 0.2, 0.03, 0.01, 4, 1.3, 107, 0.8, 107)

使用道具

7
xinchui_q 发表于 2017-3-6 16:53:55 |只看作者 |坛友微信交流群
Error in if (estimated[k, u] >= RDPrate * K) { :
  需要TRUE/FALSE值的地方不可以用缺少值

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-22 00:40