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