Re: [R] How to vectorize a function to handle two vectors

2011-08-27 Thread Jeff Newmiller
Isn't a vector of vectors usually considered a matrix? So if you want to 
vectorize a vector function you would normally rewrite it to operate on 
matrices.
---
Jeff Newmiller The . . Go Live...
DCN:jdnew...@dcn.davis.ca.us Basics: ##.#. ##.#. Live Go...
Live: OO#.. Dead: OO#.. Playing
Research Engineer (Solar/Batteries O.O#. #.O#. with
/Software/Embedded Controllers) .OO#. .OO#. rocks...1k
--- 
Sent from my phone. Please excuse my brevity.

Newbie lille_kn...@hotmail.com wrote:

Thank you for the quick response! I think you are on the right track - but is
there any way of calling (is that the word for it) the function price_call
in the mapply, so that this price_call function is changed to handle
vectors. I believe that this should, in theory if it is correct, make the
result be values. 

I have part of a code that works for only one vector. So maybe some where in
the line of: 
callOptionkVec - function(phi, kVec, t)
{
sapply(kVec,function(k) {callOption(phi,k,t)})
}
is what I need to do. Do you have any ideas on how to do this?

--
View this message in context: 
http://r.789695.n4.nabble.com/How-to-vectorize-a-function-to-handle-two-vectors-tp3771705p3771902.html
Sent from the R help mailing list archive at Nabble.com.

_

R-help@r-project.org mailing list
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.


[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list
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.


[R] How to vectorize a function to handle two vectors

2011-08-26 Thread Newbie
Dear R-users

I am trying to vectorize a function so that it can handle two vectors of
inputs. I want the function to use phi (a function), k[1] and t[1] for the
first price, and so on for the second, third and fourth price. I tried to do
the mapply, but I dont know how to specify to R what input I want to be
vectors (k and t)(see in the bottom what I tried). I have read the help
file, but I still dont understand how to do it properly. Also, I've tried to
use sapply (which seems totally wrong). However, the function uses k[1] for
t 1 to 4, and thereby returns 16 different values instead of just 4. 
Can anyone tell me how to do this - I know the answer is simple, but I dont
understand how

Thank you for your time
Kinds Rikke

#-- Characteristic function of the Heston model -#
phiHeston - function(parameters)
{
lambda - parameters[1];
rho - parameters[2];
eta - parameters[3];
theta - parameters[4];
v0 - parameters[5];

function(u, t)
{
alpha - -u*u/2 - 1i*u/2;
beta - lambda - rho*eta*1i*u;
gamma - eta^2/2;
d - sqrt(beta*beta - 4*alpha*gamma);
rplus - (beta + d)/(2*gamma);
rminus - (beta - d)/(2*gamma);
g - rminus / rplus;
D - rminus * (1 - exp(-d*t))/ (1 - g*exp(-d*t));
C - lambda * (rminus * t - 2/eta^2 * log( (1 - g*exp(-(d*t)))/(1 - g)
) );
return(exp(C*theta + D*v0));
}
}


Price_call - function(phi, k, t)
{
integrand -  function(u){Re(exp(-1i*u*k)*phi(u - 1i/2, t)/(u^2 + 
1/4))};
res - 1 - exp(k/2)/pi*integrate(integrand,lower=0,upper=Inf)$value;
return(res);
}

subHeston - c(0.6067,-0.7571,0.2928,0.0707,0.0654);
kV - c(0.9,1,1.2,1.3)
tV - c(0.1,0.4,0.5, 1)

HestonCallVec - function(phi, kVec, t)
{
sapply(kVec, function(k){Price_call(phi, k, t)})
}
HestonCallVec(phiHeston(subHeston), kV, 1)

subHeston - c(0.6067,-0.7571,0.2928,0.0707,0.0654);
kV - c(0.9,1,1.2,1.3)
tV - c(0.1,0.4,0.5, 1)

HestonCallVec2 - function(phi, kVec, tVec)
{
sapply(tVec, function(t){HestonCallVec(phi, kVec, t)})
}
HestonCallVec2(phiHeston(subHeston), kV, tV)
# This should give 4 values

This is what I tried for the mapply function, which returns a list, instead
of values.

HestonCallVec - function(phi, kVec, t)
{
mapply(function(k, t){Price_call(phi, k, t)})
}
HestonCallVec(phiHeston(subHeston), kV, tV)
# This should give 4 values

--
View this message in context: 
http://r.789695.n4.nabble.com/How-to-vectorize-a-function-to-handle-two-vectors-tp3771705p3771705.html
Sent from the R help mailing list archive at Nabble.com.

__
R-help@r-project.org mailing list
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.


Re: [R] How to vectorize a function to handle two vectors

2011-08-26 Thread David Winsemius


On Aug 26, 2011, at 2:43 PM, Newbie wrote:


Dear R-users

I am trying to vectorize a function so that it can handle two  
vectors of
inputs. I want the function to use phi (a function), k[1] and t[1]  
for the

first price, and so on for the second, third and fourth price.


? mapply



I tried to do
the mapply,


Oh, you thought of that.


but I dont know how to specify to R what input I want to be
vectors (k and t)(see in the bottom what I tried). I have read the  
help
file, but I still dont understand how to do it properly. Also, I've  
tried to
use sapply (which seems totally wrong). However, the function uses  
k[1] for

t 1 to 4, and thereby returns 16 different values instead of just 4.


Huh?

Can anyone tell me how to do this - I know the answer is simple, but  
I dont

understand how


I think the problem is (at least) slightly more complex than you first  
described. You should spend more time describing in unambiguous  
language the conditions and operations. Keep reading.




Thank you for your time
Kinds Rikke

#-- Characteristic function of the Heston model -#
phiHeston - function(parameters)
{
lambda - parameters[1];
rho - parameters[2];
eta - parameters[3];
theta - parameters[4];
v0 - parameters[5];

function(u, t)
{
alpha - -u*u/2 - 1i*u/2;
beta - lambda - rho*eta*1i*u;
gamma - eta^2/2;
d - sqrt(beta*beta - 4*alpha*gamma);
rplus - (beta + d)/(2*gamma);
rminus - (beta - d)/(2*gamma);
g - rminus / rplus;
D - rminus * (1 - exp(-d*t))/ (1 - g*exp(-d*t));
   	C - lambda * (rminus * t - 2/eta^2 * log( (1 - g*exp(-(d*t)))/ 
(1 - g)

) );
return(exp(C*theta + D*v0));
}
}


Price_call - function(phi, k, t)
{
	integrand -  function(u){Re(exp(-1i*u*k)*phi(u - 1i/2, t)/(u^2 +  
1/4))};
   	res - 1 - exp(k/2)/pi*integrate(integrand,lower=0,upper=Inf) 
$value;

return(res);
}

subHeston - c(0.6067,-0.7571,0.2928,0.0707,0.0654);
kV - c(0.9,1,1.2,1.3)
tV - c(0.1,0.4,0.5, 1)

HestonCallVec - function(phi, kVec, t)
{
sapply(kVec, function(k){Price_call(phi, k, t)})
}
HestonCallVec(phiHeston(subHeston), kV, 1)

subHeston - c(0.6067,-0.7571,0.2928,0.0707,0.0654);
kV - c(0.9,1,1.2,1.3)
tV - c(0.1,0.4,0.5, 1)

HestonCallVec2 - function(phi, kVec, tVec)
{
sapply(tVec, function(t){HestonCallVec(phi, kVec, t)})
}
HestonCallVec2(phiHeston(subHeston), kV, tV)
# This should give 4 values


H, I get 16 values. Maybe you should put some more time into  
understanding why it does not return the structure you expect.  
phiHubHeston returns a function. Was that what you designed?




This is what I tried for the mapply function, which returns a list,  
instead

of values.

HestonCallVec - function(phi, kVec, t)
{
mapply(function(k, t){Price_call(phi, k, t)})
}
HestonCallVec(phiHeston(subHeston), kV, tV)
# This should give 4 values


This is what I get with the mapply call I would have expected for use  
of a function which is what phiHeston(subHeston) returns:


 # This should give 4 values
 mapply(phiHeston(subHeston), kV, tV)
[1] 0.9973156-0.0029158i 0.9862950-0.0124475i 0.9752339-0.0178313i
[4] 0.9406358-0.0336025i

Whether these are the right 4 values is for you to determine.

--

David Winsemius, MD
West Hartford, CT

__
R-help@r-project.org mailing list
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.


Re: [R] How to vectorize a function to handle two vectors

2011-08-26 Thread Newbie
Thank you for the quick response! I think you are on the right track - but is
there any way of calling (is that the word for it) the function price_call
in the mapply, so that this price_call function is changed to handle
vectors. I believe that this should, in theory if it is correct, make the
result be values. 

I have part of a code that works for only one vector. So maybe some where in
the line of: 
callOptionkVec - function(phi, kVec, t)
{
sapply(kVec,function(k) {callOption(phi,k,t)})
}
is what I need to do. Do you have any ideas on how to do this?

--
View this message in context: 
http://r.789695.n4.nabble.com/How-to-vectorize-a-function-to-handle-two-vectors-tp3771705p3771902.html
Sent from the R help mailing list archive at Nabble.com.

__
R-help@r-project.org mailing list
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.


Re: [R] How to vectorize a function to handle two vectors

2011-08-26 Thread David Winsemius


On Aug 26, 2011, at 4:52 PM, Newbie wrote:

Thank you for the quick response! I think you are on the right track  
- but is
there any way of calling (is that the word for it) the function  
price_call

in the mapply, so that this price_call function is changed to handle
vectors. I believe that this should, in theory if it is correct,  
make the

result be values.

I have part of a code that works for only one vector. So maybe some  
where in

the line of:
callOptionkVec - function(phi, kVec, t)
{
sapply(kVec,function(k) {callOption(phi,k,t)})
}
is what I need to do. Do you have any ideas on how to do this?


What about this:

 mapply(Price_call, kV, tV, MoreArgs=list(phi=phiHeston(subHeston)))
[1]  0.1877372 -0.00632320728  0.00626031829
[4]  0.00058381615




--
View this message in context: 
http://r.789695.n4.nabble.com/How-to-vectorize-a-function-to-handle-two-vectors-tp3771705p3771902.html
Sent from the R help mailing list archive at Nabble.com.

__
R-help@r-project.org mailing list
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.


David Winsemius, MD
West Hartford, CT

__
R-help@r-project.org mailing list
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.