I want to populate the matrix prb through the function HWMProb <- function
(a,j,dt) that encapsulates different functions (please see code below), using
j= 0:2 for each j.
It only populates prb if I specify each function independently in the global
environment and then run the loop with the iF statement, as per below.
for (j in 0:2) {
if (j==0) {
prb["0","1"] <- ProbUP(a,j,dt)
prb["0","0"] <- ProbMID(a,j,dt)
prb["0","-1"] <- ProbDWN(a,j,dt)
}
else {
if (j==jmax) {
prb[paste(j,sep = ""),"1"] <- TOPProbUP(a,j,dt)
prb[paste(j,sep = ""),"0"] <- TOPProbMID(a,j,dt)
prb[paste(j,sep = ""),"-1"] <- TOPProbDWN(a,j,dt)
prb[paste(-j,sep = ""),"1"] <- BTTMProbUP(a,-j,dt)
prb[paste(-j,sep = ""),"0"] <- BTTMProbMID(a,-j,dt)
prb[paste(-j,sep = ""),"-1"] <- BTTMProbDWN(a,-j,dt)
}
else {
prb[paste(j,sep = ""),"1"] <- ProbUP(a,j,dt)
prb[paste(j,sep = ""),"0"] <- ProbMID(a,j,dt)
prb[paste(j,sep = ""),"-1"] <- ProbDWN(a,j,dt)
prb[paste(-j,sep = ""),"1"] <- ProbUP(a,-j,dt)
prb[paste(-j,sep = ""),"0"] <- ProbMID(a,-j,dt)
prb[paste(-j,sep = ""),"-1"] <- ProbDWN(a,-j,dt)
} # Close 2nd IF
} # Close 1st IF
}
Many thanks in advance.
Kind regards,
Eric Pueyo
Investment Risk Analyst
Email: [email protected]<mailto:[email protected]>
D: +44 (0)20 7809 8070
No. 1 Undershaft, London EC3P 3DQ
Web:
www.avivainvestors.com<https://urldefense.proofpoint.com/v2/url?u=http-3A__www.avivainvestors.com_&d=CwMFAg&c=zUO0BtkCe66yJvAZ4cAvZg&r=-34SVFvqwmZvbxD0ShuYglbuijP84lygitjFgiP1fxI&m=kRg3I7ESFxV-KaNbYHN6DPupgyEmFCiThNO6oDnpAFs&s=tQa1EuXKNfzRgiR2HgG0H_tW_X-BCpgebe5AL9A_GC8&e=>
jmax<-2
prb <-matrix(0L,nrow=5, ncol=3)
rownames(prb) <- c(seq(-2,2, by = 1))
colnames(prb) <- c(-1,0,1)
a<- 0.1
dt<-1
ExpX <-function(x,a,dt) { ######Defines the
Expectation of X on t+1 | t
ExpX <- x*exp(-a*dt)
ExpX
}
Mfactor<-function(a,dt) { #######Factor
multiplicative
Mfactor<- exp(-a*dt)-1
Mfactor
}
VarX <-function(sigma,a,dt) { #######Defubes the
Variance of X on t+1 | t
VarX <- (sigma^2/(2*a))*(1-exp(-2*a*dt))
VarX
}
DeltaX <-function(sigma,a,dt) { ######Defines the change
of X
DeltaX<- sqrt(3*VarX(sigma,a,dt))
DeltaX<-value(DeltaX)
}
Mfactor<-function(a,dt) { #######Factor
multiplicative
Mfactor<- exp(-a*dt)-1
Mfactor
}
KNode<-function(sigma,x,a,j,dt) { ######Central Node
KNode<- round(ExpX(x,a,dt)/DeltaX(sigma,a,dt))
KNode
}
####### Probability Calculations taking into account different branches
HWMProb <- function (a,j,dt) {
######################### DESCRIPTION #####################################
ProbUP<- function( a, j, dt) 1 / 6 + ((j ^ 2 * Mfactor(a, dt) ^ 2 + j *
Mfactor(a, dt)) / 2) ######### Probability X going up
ProbMID<- function(a, j, dt) 2 / 3 - (j ^ 2 * Mfactor(a, dt) ^ 2)
######## Probability X going middle
ProbDWN<-function( a, j, dt) 1 / 6 + ((j ^ 2 * Mfactor(a, dt) ^ 2 - j *
Mfactor(a, dt)) / 2) ####### Probability X going down
TOPProbUP<- function( a, j, dt) 7 / 6 + (j ^ 2 * Mfactor(a, dt) ^ 2 + 3 * j *
Mfactor(a, dt)) / 2 ####### Top branch probability going up
TOPProbMID<- function(a, j, dt) -1 / 3 - j ^ 2 * Mfactor(a, dt) ^ 2 - 2 * j *
Mfactor(a, dt) ####### Top branch probability going MID
TOPProbDWN<- function( a, j, dt) 1 / 6 + (j ^ 2 * Mfactor(a, dt) ^ 2 + j *
Mfactor(a, dt)) / 2 ####### Top branch probability going DOWN
BTTMProbUP<- function( a, j, dt) 1 / 6 + (j ^ 2 * Mfactor(a, dt) ^ 2 - j *
Mfactor(a, dt)) / 2 ####### Bottom branch probability going u
BTTMProbMID<- function( a, j, dt) -1 / 3 - j ^ 2 * Mfactor(a, dt) ^ 2 + 2 * j
* Mfactor(a, dt) ####### Bottom branch probability going MID
BTTMProbDWN<- function( a, j, dt) 7 / 6 + (j ^ 2 * Mfactor(a, dt) ^ 2 - 3 * j
* Mfactor(a, dt)) / 2 ####### Bottom branch probability going DOWN
if (j==0) {
prb["0","1"] <- ProbUP(a,j,dt)
prb["0","0"] <- ProbMID(a,j,dt)
prb["0","-1"] <- ProbDWN(a,j,dt)
}
else {
if (j==jmax) {
prb[paste(j,sep = ""),"1"] <- TOPProbUP(a,j,dt)
prb[paste(j,sep = ""),"0"] <- TOPProbMID(a,j,dt)
prb[paste(j,sep = ""),"-1"] <- TOPProbDWN(a,j,dt)
prb[paste(-j,sep = ""),"1"] <- BTTMProbUP(a,-j,dt)
prb[paste(-j,sep = ""),"0"] <- BTTMProbMID(a,-j,dt)
prb[paste(-j,sep = ""),"-1"] <- BTTMProbDWN(a,-j,dt)
}
else {
prb[paste(j,sep = ""),"1"] <- ProbUP(a,j,dt)
prb[paste(j,sep = ""),"0"] <- ProbMID(a,j,dt)
prb[paste(j,sep = ""),"-1"] <- ProbDWN(a,j,dt)
prb[paste(-j,sep = ""),"1"] <- ProbUP(a,-j,dt)
prb[paste(-j,sep = ""),"0"] <- ProbMID(a,-j,dt)
prb[paste(-j,sep = ""),"-1"] <- ProbDWN(a,-j,dt)
} # Close 2nd IF
} # Close 1st IF
} #Close Formula
for (j in 0:2) {
HWMProb(a,j,dt)
}
[[alternative HTML version deleted]]
______________________________________________
[email protected] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.