0

I am trying to find the value of k which is a constant in Decompostion models

Wt = W0 e^-kt

I am using R script to calculate it. However, I am having trouble in selection of the data set.

Example data

Site   Treatment    Month    Repli    WD
W2         0          0      2        1
W3         0          0      1        .9
W7         0          0      3        .7
W12        0          0      4        .7
W2         0          1      2        .4
W3         0          1      1         .3
W7         0          1      3        .3 
W12        0          1      4        .2 
W2         0          3      2        .2
W3         0          3      1        .1
W7         0          3      3        .1  
W12        0          3      4        .1 
W2         0          4      2        .9
W3         0          4      1         .9
W7         0          4      3         .8
W12        0          4      4         .8


k=numeric(max(Cs$Repli))

pred=array(0,dim=c(4,max(Cs$Repli)))  
resid=array(0,dim=c(4,max(Cs$Repli)))
obs=array(0,dim=c(4,max(Cs$Repli)))

Now the part I am having a problem Nonlinear reggression

for(i in 1:max(Cs$Repli)){
  s1=subset(Cs,Cs$Repli==i)

In my original data it selects only four data set like this (which is fine) May be because of having max Repli value?

Site      Treatment   Month    Repli
W12           0         0       4
W12           0         1       4
W12           0         3       4
W12           0         5       4

Then I run the below command then I get the value of K for these 4 data. Now I want to select W2 or any other. How can I do that? I tried different things but I couldnt get the results. I tried using %in% but (i) from above script is also being used below so I cant use %in%. Any help would be really appreciated.

   Month=s1$Month               
   WD=s1$WD         
   nonlin = nls(WD ~ 1*exp(-k*Month), trace=TRUE, start = list(k = .01))
   summary(nonlin)          
   pr=predict(nonlin)       
   res=residuals(nonlin)        
   k[i]=coef(nonlin)[1]
   pred[,i]=pr
   resid[,i]=res
   obs[,i]=WD   
}   #end of nls for loop

I can provide original data.

Mr Good News
  • 121
  • 1
  • 3
  • 15
  • Could you please clarify what is wrong with your results? Your code seems to work perfectly fine. The expression `s1=subset(Cs,Cs$Repli==i)` selects values corresponding to`W12`, but only if `i == 4`. You may have, e.g., `W3` is `i == 1`. The only thing I do not understand is what is `attach(Cs)` for, as further you refer the data frame `Cs` by its name. – Ekatef Jan 16 '18 at 10:46
  • @Ekatef Thank you. Cs is file name of my data. You can ignore that. Where exactly should I change my value? pred=array(0,dim=c(4,max(Cs$Repli))) from here on wards? Thanks! – Mr Good News Jan 16 '18 at 11:19
  • I'm not sure that you have to change anything. Each column of `pred` will obtain during loop execution four predicted values by each `i` value. Is it what you want from your code? – Ekatef Jan 16 '18 at 12:44

1 Answers1

0

If you want to check which subsets you have processed, you may use an additionally variable W_subsets to store processed subsets:

# before the nls loop
W_subsets <- rep(list(NA), max(Cs$Repli))

# inside the nls loop
W_subsets[[i]] <- s1

As I may see, the output of W_subsets is all right:

[[1]]
    Site    Treatment   Month   Repli   WD
2   W3          0           0       1   0.9
6   W3          0           1       1   0.3
10  W3          0           3       1   0.1
14  W3          0           4       1   0.9

[[2]]
    Site    Treatment   Month   Repli   WD
1   W2          0           0       2   1.0
5   W2          0           1       2   0.4
9   W2          0           3       2   0.2
13  W2          0           4       2   0.9
... etc. to W12
Ekatef
  • 1,061
  • 1
  • 9
  • 12