FAQ
Hello.

I am trying to fit an asymptotic relationship (nonlinear) to some
ecological data, and am having problems. I am interested in the upper
bound on the data (i.e. if there is an upper limit to 'y' across a range
of 'x'). As such, I am using the nonlinear quantile regression package
(nlrq) to fit a michaelis mention type model.

The errors I get (which are dependant on the quantile of interest and the
particular dataset) tend to result in illogical regression results with
the nlqr package.

To test this, I created artificial datasets that were based on underlying
asymptotic or linear data. When tested with a nonlinear model, the linear
data produces an error (step factor reduced below 'midFactor'--a problem
dealt with previously on this list). This script is below, for interest.

My question is whether this is a problem that I should deal with through
fixing my script somehow, or whether fitting a nonlinear model to data
that may have an underlying linear pattern is inherently statistically
wrong (I thought that I could use the estimate of the asymptote as a
metric of how linear versus asymptotic the data were).

Many thanks, in advance.

roly russell - oregon state university

PS - I have not consulted Bates & Watts yet; I will.



# build artificial data with multiplicative error
Dat <- NULL; Dat$x <- rep(seq(1,25,by=3), 5)
set.seed(1)
Dat$y <- SSmicmen(Dat$x, 50, 12)*rnorm(45, 1, 0.1)
plot(Dat)
# fit a classical least-square regression
Dat.nls <- nls(y ~ SSmicmen(x, Vmax, Km), data=Dat); Dat.nls
lines(1:25, predict(Dat.nls, newdata=list(x=1:25)), col=1)
# the 1st and 3rd quartiles regressions
Dat.nlrq <- nlrq(y ~ SSmicmen(x, Asym, mid), data=Dat, tau=0.25,
trace=TRUE)
lines(1:25, predict(Dat.nlrq, newdata=list(x=1:25)), col=3)
Dat.nlrq <- nlrq(y ~ SSmicmen(x, Asym, mid), data=Dat, tau=0.75,
trace=TRUE)
lines(1:25, predict(Dat.nlrq, newdata=list(x=1:25)), col=3)


# build artificial LINEAR data with multiplicative error
Dat <- NULL; Dat$x <- rep(1:25, 2)
set.seed(1)
Dat$y <- (Dat$x)*rnorm(50, 1, 0.1)
plot(Dat)
# fit first a classical least-square regression
Dat.nls <- nls(y ~ SSmicmen(x, Vmax, Km),
data=Dat,control=nls.control(minFactor=1/4096)); Dat.nls
lines(1:25, predict(Dat.nls, newdata=list(x=1:25)), col=1)

Search Discussions

  • Brian S Cade at Feb 4, 2004 at 7:54 pm
    Roly: I don't know if I can speak to your question about the linear model
    fit with the nonlinear function. But in general I have observed that when
    using a fairly flexible nonlinear model form in nlrq() that initial
    estimates obtained for any specified quantile may be quite erroneous in the
    sense that the proportion of residuals less than or greater than the
    estimate are way off what they should be for a specified quantile (e..g,
    for tau = 0.90, I've obtained initial estimates that might have as few as
    75% of the residuals <= estimate or as many as 97% <= estimate; we would
    like a solution that has close to 90% <= estimate (with some inequality
    required because of the zero residuals associated with the fit). This
    seems to produce both some strange fits when plotted against the data as
    well as some fits that might seem reasonable but have to be wrong. It
    seems to be quite important with this nlrq() code to explore different
    starting values and tolerance values before you can believe that you've
    converged to a reasonable solution for any selected quantile. I always
    check the proportion of residuals <= estimate as I iterate through
    solutions. You might want to check this for your models. Again, I repeat
    the problems I've had with this occur with very heterogeneous data with
    fairly flexible nonlinear functions (e.g., piecewise linear models with
    unknown breakpoints and quadratic curvature allowed to connect the pieces).

    Any comments\suggestions from Roger Koenker?

    Brian


    Brian S. Cade

    U. S. Geological Survey
    Fort Collins Science Center
    2150 Centre Ave., Bldg. C
    Fort Collins, CO 80526-8818

    email: brian_cade at usgs.gov
    tel: 970 226-9326



    Roly Russell
    <russelr at science.orego To: r-help at stat.math.ethz.ch
    nstate.edu> cc:
    Sent by: Subject: [R] Fitting nonlinear (quantile) models to linear
    r-help-bounces at stat.ma data.
    th.ethz.ch


    02/04/2004 08:47 AM






    Hello.

    I am trying to fit an asymptotic relationship (nonlinear) to some
    ecological data, and am having problems. I am interested in the upper
    bound on the data (i.e. if there is an upper limit to 'y' across a range
    of 'x'). As such, I am using the nonlinear quantile regression package
    (nlrq) to fit a michaelis mention type model.

    The errors I get (which are dependant on the quantile of interest and the
    particular dataset) tend to result in illogical regression results with
    the nlqr package.

    To test this, I created artificial datasets that were based on underlying
    asymptotic or linear data. When tested with a nonlinear model, the linear
    data produces an error (step factor reduced below 'midFactor'--a problem
    dealt with previously on this list). This script is below, for interest.

    My question is whether this is a problem that I should deal with through
    fixing my script somehow, or whether fitting a nonlinear model to data
    that may have an underlying linear pattern is inherently statistically
    wrong (I thought that I could use the estimate of the asymptote as a
    metric of how linear versus asymptotic the data were).

    Many thanks, in advance.

    roly russell - oregon state university

    PS - I have not consulted Bates & Watts yet; I will.



    # build artificial data with multiplicative error
    Dat <- NULL; Dat$x <- rep(seq(1,25,by=3), 5)
    set.seed(1)
    Dat$y <- SSmicmen(Dat$x, 50, 12)*rnorm(45, 1, 0.1)
    plot(Dat)
    # fit a classical least-square regression
    Dat.nls <- nls(y ~ SSmicmen(x, Vmax, Km), data=Dat); Dat.nls
    lines(1:25, predict(Dat.nls, newdata=list(x=1:25)), col=1)
    # the 1st and 3rd quartiles regressions
    Dat.nlrq <- nlrq(y ~ SSmicmen(x, Asym, mid), data=Dat, tau=0.25,
    trace=TRUE)
    lines(1:25, predict(Dat.nlrq, newdata=list(x=1:25)), col=3)
    Dat.nlrq <- nlrq(y ~ SSmicmen(x, Asym, mid), data=Dat, tau=0.75,
    trace=TRUE)
    lines(1:25, predict(Dat.nlrq, newdata=list(x=1:25)), col=3)


    # build artificial LINEAR data with multiplicative error
    Dat <- NULL; Dat$x <- rep(1:25, 2)
    set.seed(1)
    Dat$y <- (Dat$x)*rnorm(50, 1, 0.1)
    plot(Dat)
    # fit first a classical least-square regression
    Dat.nls <- nls(y ~ SSmicmen(x, Vmax, Km),
    data=Dat,control=nls.control(minFactor=1/4096)); Dat.nls
    lines(1:25, predict(Dat.nls, newdata=list(x=1:25)), col=1)

    ______________________________________________
    R-help at stat.math.ethz.ch mailing list
    https://www.stat.math.ethz.ch/mailman/listinfo/r-help
    PLEASE do read the posting guide!
    http://www.R-project.org/posting-guide.html

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupr-help @
categoriesr
postedFeb 4, '04 at 3:47p
activeFeb 4, '04 at 7:54p
posts2
users2
websiter-project.org
irc#r

2 users in discussion

Roly Russell: 1 post Brian S Cade: 1 post

People

Translate

site design / logo © 2017 Grokbase