Thank you so much for your help Berend.
I did not see that my code had a typo and it was thus wrongly written ( I
overlooked the i that was supposed to be actually 1)

instead of       for (q in *1*:length(comb1$ID))
 I had it as         for (q in *i*:length(comb1$ID))

It works correctly as expected
Thanks again.


Navin






On Fri, Apr 6, 2012 at 9:56 AM, Berend Hasselman <bhh@xs4all.nl> wrote:

>
> On 06-04-2012, at 13:14, Navin Goyal wrote:
>
> > Apologies for the lengthy code.
> > I tried a simple (and shorter) piece of code (pasted below) and it still
> gives me the same error for last few rows. Is this a bug or am I doing
> something totally wrong?  Could anyone please provide some help/pointers ?
> >
>
> You are not specifying what the  error is for the last few rows?
> You are doing something completely wrong (AFAICT).
> See below.
>
> > PS.  beta0 was fixed to 0.001 in the previous code. Also if I manually
> estimated the integral isnt 0. If I scramble the row order, it is again
> only the last few rows that dont integrate.
>
> See below.
>
> > Thanks
> >
> > data1<-expand.grid(1:5,0:6,10)
> > names(data1)<-c("ID","TIME", "DOSE")
> > data1<-data1[order(data1$DOSE,data1$ID,data1$TIME),]
> > ed<-data1[!duplicated(data1$ID) , c(1,3)]
> > ed$base=1
> > ed$drop=1
> > set.seed(5234123)
> > k<-0
> > for (i in 1:length(ed$ID))
> > {
> > k<-k+1
> > ed$base[k]<-100*exp(rnorm(1,0,0.2))
> > ed$drop[k]<-0.20*exp(rnorm(1,0,0.5))
> > }
>
> Why are you not using i to index ed$XXX?
> You are not using i.
> Simplify to
>
> for (k in 1:length(ed$ID))
> {
> ed$base[k]<-100*exp(rnorm(1,0,0.2))
> ed$drop[k]<-0.20*exp(rnorm(1,0,0.5))
> }
>
> > comb1<-merge(data1[, c("ID","TIME")], ed)
> > comb1$disprog<-comb1$base*exp(-comb1$drop*comb1$TIME)
> > comb1$integral=0
> > hz.func1<-function(t,bshz,beta1, change)
> > { ifelse(t==0,bshz, bshz*exp(beta1*change)) }
>
> Insert here
>
> comb1
> i
> length(comb1$ID)
>
> and you should see that i is 5 and that length(comb1$ID) is 35.
>
> > q<-0
> > for (m in i:length(comb1$ID))
> > {
> > q<-q+1
> > comb1$integral[q]<-integrate(hz.func1, lower=0, upper=comb1$TIME[q],
> >           bshz=0.001,beta1=0.035,
> >          change=comb1$disprog[q])$value
> > }
> > comb1
> >
>
> 1. Why does your for loop variable m start with i and not 1? (as I told
> you in my first reply)
> 2. Why are you not using the for loop variable m?
> 3. So from the above m starts at 5 and stops at 35 (==> 312 steps)
> 4, so you are filling elements 1 to 31 of comb1 and items 32 to 35 are
> unchanged.
>
> 5. why don't you do this
>
> for (q in 1:length(comb1$ID))
> {
> comb1$integral[q]<-integrate(hz.func1, lower=0, upper=comb1$TIME[q],
>          bshz=0.001,beta1=0.035,
>         change=comb1$disprog[q])$value
> }
> comb1
>
> This avoids a useless variable m and fill all elements of comb1.
> And you could just as well reuse variable k; there is no need for a new
> variable (q) here.
>
> Berend
>
>
>


-- 
Navin Goyal

	[[alternative HTML version deleted]]

