Hi all,

   I wrote the following code for the problem I posted before. Can some one
recommend a better way to do this?

f1 <- function(lambda,z,p1){
lambda*(p1*exp(-3*z-9/2)+(0.2-p1)*exp(4*z-8))-(1-lambda)*0.8}
f2 <- function(p1,cl, cu){
 
0.8*(pnorm(cl)+(1-pnorm(cu)))/(0.8*(pnorm(cl)+(1-pnorm(cu)))+p1*(pnorm(cl+3)+(1-pnorm(cu+3)))+(0.2-p1)*(pnorm(cl-4)+(1-pnorm(cu-4))))}

lam <- seq(0.01,0.9, by=0.001)
x1 <- numeric(length(lam))
x2 <- numeric(length(lam))
for (i in 1:length(lam)){

cl <- uniroot(f1, lower =-10, upper = 0,
           tol = 1e-10,p1=0.15,lambda=lam[i])$root
cu <- uniroot(f1, lower =0, upper = 10,
           tol = 1e-10,p1=0.15,lambda=lam[i])$root

x1[i]<- f2(p1=0.15, cl=cl, cu=cu)
 }
 x1<=0.05
x1[259]
## x1[259] is the lambda value for f2()=0.05.


Thank you very much!!
     Hannah
2011/2/21 li li <hannah....@gmail.com>

> Hi all,
>     I have the following two function f1 and f2.
>
> f1 <- function(lambda,z,p1){
> lambda*(p1*exp(-3*z-9/2)+(0.2-p1)*exp(4*z-8))-(1-lambda)*0.8}
>
> f2 <- function(p1,cl, cu){
>
>  
> 0.8*(pnorm(cl)+(1-pnorm(cu)))/(0.8*(pnorm(cl)+(1-pnorm(cu)))+p1*(pnorm(cl+3)+(1-pnorm(cu+3)))+(0.2-p1)*(pnorm(cl-4)+(1-pnorm(cu-4))))}-0.05
>
> First fix p1 to be 0.15.
> (i) choose a lambda value, say lamda=0.6,
> (ii) there should be two solutions for the equation f1(z, p1=0.15,
> lambda=1)=0, say cl and cu,
> (iii) evaluate f2 at cl and cu found in (ii) and p1=0.15,
>
>    How do we find the lambda value such that f2=0?
>
>     Thank you very much!
>                                                            Hannah
>
>
>
>
>
>

        [[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.

Reply via email to