[R] formula for nls

Jarosław Jasiewicz jarekj at amu.edu.pl
Mon Jan 28 09:18:07 CET 2008


Christian Ritz pisze:
> Hi Jarek,
>
> an alternative approach is to provide more precise starting values!
>
> It pays off to realise that it's possible to find quite good guesses 
> for some of the parameters in your model function:
>
> t ~ tr+    (ts-tr)/    ((1+    (a*h)^n)^(1-(1/n)))
>
> The parameters tr and ts correspond to the response t for h equal to 
> infinity and h=0. Therefore by looking at the plot of your data I 
> would set:
>
> tr = 0
> ts = 15000
>
> The parameter n must be above 1 in order to achieve a decreasing 
> function. We will not think more about this at the moment.
>
> For n somewhat larger than 1 (in which case I would approximate the 
> exponent 1-(1/n) by 1) the parameter a is approximately equal to the 
> reciprocal of the h value resulting in a response halfway between tr 
> and ts. Therefore (again from looking at the plot) I would set a=10.
>
> Using the above starting values and simply increasing n in steps of 1 
> eventually results in a useful model fit:
>
> ## Fails
> tmp.m1<-nls(t ~    tr+    (ts-tr)/    ((1+    (a*h)^n)^(1-(1/n))), 
> data = tmp, start = list(a=10, n=1, tr=0, ts=15000))
>
> ## Fails
> tmp.m1<-nls(t ~    tr+    (ts-tr)/    ((1+    (a*h)^n)^(1-(1/n))), 
> data = tmp, start = list(a=10, n=2, tr=0, ts=15000))
>
> ## Works!!
> tmp.m1<-nls(t ~    tr+    (ts-tr)/    ((1+    (a*h)^n)^(1-(1/n))), 
> data = tmp, start = list(a=10, n=3, tr=0, ts=15000))
>
> summary(tmp.m1)
>
> plot(t ~ h, data = tmp)
> lines(tmp$h, predict(tmp.m1))
>
>
> I hope you can use this explanation?!
>
> Christian
yes, I must only check if coefs are expected

but...
fortunalty I found that my problem is solved by package HydroMe

thanks again
Jarek



More information about the R-help mailing list