Handegard, Nils Olav
2004-Jan-08 13:29 UTC
[R] Fitting curves with discontinuous derivatives
Dear Group Readers, I have a response variable Y (fish swimming speed) and three explanatory variables X1 (distance to ship propeller), X2 (distance to fishing gear wire) and Depth. Y=f(X1) initially looks like a straight line, then an increase to a higher level at X1=100, and then a decrease after X1=-800. Y=f(X2) looks similar, but the increase to a higher level at X2=100 is more abrupt, and the decrease start earlier, around X2=0. I explain this as the reaction occurs closer and is stronger to X2 as opposed to X1. Most likely both variables are important. I would like to assess this "importance". The idea was to use GAM to resolve the dependence, but since X1 - X2 is small (i.e. plot(X1,X2) is along a narrow band around X1=X2) this did not work. I must therefore work with the variables separately. I would like to try a continuous model defined as: { k_1 , x<a f(x) = { \sum_i^4 k_{i+1} x^i , a<=x<b { k_6 , x>=b, with continuity as an additional requirement. 1. The first problem is that a and b are not given, and the derivatives with respect to these are not defined. This can be overcome by searching the definition space using optimise(), as outlined in: http://maths.newcastle.edu.au/~rking/R/help/01c/3175.html. However, suggestions for a neater solution are welcomed. 2. How can I specify this model. If the model were lines, I guess something like lm(y~bs(1:20, knots=c(5,11), degree=1)) would do, and if the lines were of similar degree, splines could be used. But is it possible to define splines with different order between the knots, and continuity as only requirement? 3. The idea is to bootstrap the estimates of a and b to find the start point of the reaction. However, using this parameterised curve may be a bit ad hoc. Other suggestions are warmly appreciated. I have also tried nls with a logistic function: est <- try(nls(y~cbind(exp((x-beta)*alpha)/ (1+exp((x-beta)*alpha)) ), start=c(beta=Beta,alpha=Alpha), algorithm="plinear",contr=ctrl), silent=T) but the fit were bad. Sincerely, Nils Olav Handegard PhD Student Please send any responses directly to me. lm