khazaei at ceremade.dauphine.fr
2009-Dec-21 10:16 UTC
[R] how can generate h(u)=min{a,log(u)} for 0<u<1 in R ?
Hello, How can generate a sample from h(u)=min{a,log(u)} for 0<u<1 in R,please? thank you khazaei
Daniel Malter
2009-Dec-21 11:02 UTC
[R] how can generate h(u)=min{a,log(u)} for 0<u<1 in R ?
Hi, see the example below. There must be a way to do this with apply or tapply, but it always returned an error "incorrect number of dimensions. At least the code below works n=100 a=rnorm(n) u=runif(n) f=function(x){min(x[,1],log(x[,2]))} x=data.frame(a,u) apply(x,1,f) #does not work #this works y=NULL for(i in 1:n) y[i]=f(x[i,]) HTH, Daniel ------------------------- cuncta stricte discussurus ------------------------- -----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of khazaei at ceremade.dauphine.fr Sent: Monday, December 21, 2009 5:17 AM To: r-help at r-project.org Subject: [R] how can generate h(u)=min{a,log(u)} for 0<u<1 in R ? Hello, How can generate a sample from h(u)=min{a,log(u)} for 0<u<1 in R,please? thank you khazaei ______________________________________________ R-help at 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.
Gabor Grothendieck
2009-Dec-21 11:06 UTC
[R] how can generate h(u)=min{a,log(u)} for 0<u<1 in R ?
Use pmin like this:> set.seed(123) > pmin(-0.1, log(runif(25)))[1] -1.2462628 -0.2378700 -0.8940966 -0.1244104 -0.1000000 -3.0888020 [7] -0.6384592 -0.1138195 -0.5952313 -0.7839153 -0.1000000 -0.7911258 [13] -0.3892415 -0.5575096 -2.2737578 -0.1055550 -1.4020672 -3.1686692 [19] -1.1149834 -0.1000000 -0.1170516 -0.3670090 -0.4454955 -0.1000000 [25] -0.4220431 On Mon, Dec 21, 2009 at 5:16 AM, <khazaei at ceremade.dauphine.fr> wrote:> Hello, > > How can generate a sample from h(u)=min{a,log(u)} for 0<u<1 ? in R,please? > > thank you > khazaei
Daniel Malter
2009-Dec-22 11:34 UTC
[R] how can generate h(u)=min{a,log(u)} for 0<u<1 in R ?
Hi, if "a" is a constant, and "u" is a vector of random variables of arbitrary length, each of which is uniformly distributed between 0 and 1, then h(u) is a random sample of the function f. So, if you adjust the code to the desired "a" and to the desired length "n," then you get a random sample of h(u) of length n. If that is not what you want to do, you need to state your question more precisely. Daniel ------------------------- cuncta stricte discussurus ------------------------- -----Original Message----- From: khazaei at ceremade.dauphine.fr [mailto:khazaei at ceremade.dauphine.fr] Sent: Monday, December 21, 2009 3:33 PM To: Daniel Malter Subject: RE: [R] how can generate h(u)=min{a,log(u)} for 0<u<1 in R ? Hello Dear thank you for your answer, but I need to generate a sample from the function h(u) not compute the h(u). best khazaei> Hi, see the example below. There must be a way to do this with apply or > tapply, but it always returned an error "incorrect number of dimensions. > At > least the code below works > > n=100 > a=rnorm(n) > u=runif(n) > > f=function(x){min(x[,1],log(x[,2]))} > > x=data.frame(a,u) > > apply(x,1,f) #does not work > > #this works > y=NULL > for(i in 1:n) y[i]=f(x[i,]) > > HTH, > Daniel > > ------------------------- > cuncta stricte discussurus > ------------------------- > -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] > On > Behalf Of khazaei at ceremade.dauphine.fr > Sent: Monday, December 21, 2009 5:17 AM > To: r-help at r-project.org > Subject: [R] how can generate h(u)=min{a,log(u)} for 0<u<1 in R ? > > Hello, > > How can generate a sample from h(u)=min{a,log(u)} for 0<u<1 in R,please? > > thank you > khazaei > > ______________________________________________ > R-help at 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. > >
Daniel Malter
2009-Dec-22 15:55 UTC
[R] how can generate h(u)=min{a,log(u)} for 0<u<1 in R ?
Okay, since you did not provide the information I asked for, this is the best guess of what I think you want to do (see commented code below). #draw a random u* u.star=runif(1) #draw a random w w=runif(1) #Interval boundaries as defined by u u=c(0.1,0.2,0.3,0.6,0.9) #All Us smaller than u* min.int[u.star>min.int] #Maximum u smaller than u* b=max(min.int[u.star>min.int]) #The function gi(u) gi=function(x,y){min(x,-log(y))*(y>0&y<1)} # define a a=1 #evaluate the fraction between h at u* and h at max(u)<u.star #if the fraction is smaller than w, return u* #otherwise return NA rand=ifelse(gi(a,u.star)/gi(a,b)<w,u.star,NA) print(u.star);print(rand) HTH Daniel ------------------------- cuncta stricte discussurus ------------------------- -----Original Message----- From: khazaei at ceremade.dauphine.fr [mailto:khazaei at ceremade.dauphine.fr] Sent: Tuesday, December 22, 2009 9:13 AM To: Daniel Malter Subject: RE: [R] how can generate h(u)=min{a,log(u)} for 0<u<1 in R ? Ok. For example let for itration i=4 whe have u1=.1,u2=.2,u3=.3,u4=.6 and u5=.8 then gi(u)=h(u1) when 0.1<u<0.2 =h(u2) when 0.2<u<0.3 =h(u3) when 0.3<u<0.6 =h(u4) when 0.6<u<0.8 where h(ui)=min{a=1,-log(ui)}*ind.(0<ui<1) now I want to take u* from gi(u). if h(u*)/h(uj)<w where w come from U(0,1) then I accept u* as a random variable this is my aim.> Before I start guessing what you want to do, I rather ask you to provide a > numerical example. > > Please take 5 values of u or so, and illustrate what the functions should > do. That is, provide the values of u, provide a, provide h(u), provide the > value the indicator variable ind takes (and why), provide gi(u), and > finally > provide what/how you want to sample from which function. > > Right now, I am only guessing what indices the sum in gi(u) is supposed to > sum over and when ind takes one or zero. Also I do not understand what you > mean by "take a u FROM gi," since gi is a function of u. Please be as > specific as possible. However, if you have the gi(u) and just want to > sample > from them, you can sample an arbitrary number with or without replacement > with the "sample" function. > > Daniel > > ------------------------- > cuncta stricte discussurus > ------------------------- > -----Original Message----- > From: khazaei at ceremade.dauphine.fr [mailto:khazaei at ceremade.dauphine.fr] > Sent: Tuesday, December 22, 2009 7:15 AM > To: Daniel Malter > Subject: RE: [R] how can generate h(u)=min{a,log(u)} for 0<u<1 in R ? > > Hi, > thank you for your explain. > let me please to state my question precisely: > this is my problrm exactly: > > I want to take a u from gi such that > > gi(u)=sum(h(uj)*ind(uj<u<u(j+1))) for j=1,...,i > > where 0<uj<uj+1<...<u(i+1)<1 , > > h(uj)=min{a,-log(uj)} 0<uj<1 and a is positive constant. > > could you please help me to do it? > > >> Hi, >> >> if "a" is a constant, and "u" is a vector of random variables of >> arbitrary >> length, each of which is uniformly distributed between 0 and 1, then >> h(u) >> is >> a random sample of the function f. >> >> So, if you adjust the code to the desired "a" and to the desired length >> "n," >> then you get a random sample of h(u) of length n. If that is not what >> you >> want to do, you need to state your question more precisely. >> >> Daniel >> >> ------------------------- >> cuncta stricte discussurus >> ------------------------- >> >> -----Original Message----- >> From: khazaei at ceremade.dauphine.fr [mailto:khazaei at ceremade.dauphine.fr] >> Sent: Monday, December 21, 2009 3:33 PM >> To: Daniel Malter >> Subject: RE: [R] how can generate h(u)=min{a,log(u)} for 0<u<1 in R ? >> >> Hello Dear >> thank you for your answer, but I need to generate a sample from the >> function h(u) not compute the h(u). >> best >> khazaei >> >> >>> Hi, see the example below. There must be a way to do this with apply or >>> tapply, but it always returned an error "incorrect number of >>> dimensions. >>> At >>> least the code below works >>> >>> n=100 >>> a=rnorm(n) >>> u=runif(n) >>> >>> f=function(x){min(x[,1],log(x[,2]))} >>> >>> x=data.frame(a,u) >>> >>> apply(x,1,f) #does not work >>> >>> #this works >>> y=NULL >>> for(i in 1:n) y[i]=f(x[i,]) >>> >>> HTH, >>> Daniel >>> >>> ------------------------- >>> cuncta stricte discussurus >>> ------------------------- >>> -----Original Message----- >>> From: r-help-bounces at r-project.org >>> [mailto:r-help-bounces at r-project.org] >>> On >>> Behalf Of khazaei at ceremade.dauphine.fr >>> Sent: Monday, December 21, 2009 5:17 AM >>> To: r-help at r-project.org >>> Subject: [R] how can generate h(u)=min{a,log(u)} for 0<u<1 in R ? >>> >>> Hello, >>> >>> How can generate a sample from h(u)=min{a,log(u)} for 0<u<1 in >>> R,please? >>> >>> thank you >>> khazaei >>> >>> ______________________________________________ >>> R-help at 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. >>> >>> >> >> >> > > >