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

______________________________________________
R-help@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.

Reply via email to