Quantcast

Non linear Regression: "singular gradient matrix at initial parameter estimates"

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Non linear Regression: "singular gradient matrix at initial parameter estimates"

luckfamousa
Hi,

I am using nls to fit a non linear function to some data but R keeps giving
me "singular gradient matrix at initial parameter estimates" errors.
For testing purposes I am doing this:

### R code ###

x <- 0:140
y <- 200 / (1 + exp(17 - x)/2) * exp(-0.02*x) # creating 'perfect' samples
with fitting model
yeps <- y + rnorm(length(y), sd = 2) # adding noise

# results in above error
fit = nls(yeps ~ p1 / (1 + exp(p2 - x) / p3) * exp(p4 * x))

###

>From what I've found in this list I think that my model is over-parameterized.
How can I work around that?
Thanks,

Felix

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Non linear Regression: "singular gradient matrix at initial parameter estimates"

Peter Ehlers
On 2011-04-11 13:29, Felix Nensa wrote:

> Hi,
>
> I am using nls to fit a non linear function to some data but R keeps giving
> me "singular gradient matrix at initial parameter estimates" errors.
> For testing purposes I am doing this:
>
> ### R code ###
>
> x<- 0:140
> y<- 200 / (1 + exp(17 - x)/2) * exp(-0.02*x) # creating 'perfect' samples
> with fitting model
> yeps<- y + rnorm(length(y), sd = 2) # adding noise
>
> # results in above error
> fit = nls(yeps ~ p1 / (1 + exp(p2 - x) / p3) * exp(p4 * x))
>
> ###
>
>> From what I've found in this list I think that my model is over-parameterized.
> How can I work around that?

Take out p3; it's redundant.

Peter Ehlers

> Thanks,
>
> Felix
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Non linear Regression: "singular gradient matrix at initial parameter estimates"

luckfamousa
Hi Peter,

thank you for your reply. Now I see, that P3 is indeed redundand.
But with the simplified model...

fit = nls(yeps ~ p1 / (1 + exp(p2 - x)) * exp(p4 * x))

...nls still produces the same error.
Any ideas?

Felix

2011/4/12 Peter Ehlers <[hidden email]>

> On 2011-04-11 13:29, Felix Nensa wrote:
>
>> Hi,
>>
>> I am using nls to fit a non linear function to some data but R keeps
>> giving
>> me "singular gradient matrix at initial parameter estimates" errors.
>> For testing purposes I am doing this:
>>
>> ### R code ###
>>
>> x<- 0:140
>> y<- 200 / (1 + exp(17 - x)/2) * exp(-0.02*x) # creating 'perfect' samples
>> with fitting model
>> yeps<- y + rnorm(length(y), sd = 2) # adding noise
>>
>> # results in above error
>> fit = nls(yeps ~ p1 / (1 + exp(p2 - x) / p3) * exp(p4 * x))
>>
>> ###
>>
>>  From what I've found in this list I think that my model is
>>> over-parameterized.
>>>
>> How can I work around that?
>>
>
> Take out p3; it's redundant.
>
> Peter Ehlers
>
>  Thanks,
>>
>> Felix
>>
>>        [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> [hidden email] 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.
>>
>
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Non linear Regression: "singular gradient matrix at initial parameter estimates"

Mario Valle
Use a more realistic starting point instead of the default one:

fit <- nls(yeps ~ p1 / (1 + exp(p2 - x)) * exp(p4 * x),
start=list(p1=410,p2=18,p4=-.03))

This works for me:
 > fit
Nonlinear regression model
   model:  yeps ~ p1/(1 + exp(p2 - x)) * exp(p4 * x)
    data:  parent.frame()
        p1        p2        p4
199.48276  16.28664  -0.01987
  residual sum-of-squares: 560.6

Number of iterations to convergence: 5
Achieved convergence tolerance: 5.637e-07

Ciao!
                         mario

On 12-Apr-11 18:01, Felix Nensa wrote:
> fit = nls(yeps ~ p1 / (1 + exp(p2 - x)) * exp(p4 * x))
>

--
Ing. Mario Valle
Data Analysis and Visualization Group            | http://www.cscs.ch/~mvalle
Swiss National Supercomputing Centre (CSCS)      | Tel:  +41 (91) 610.82.60
v. Cantonale Galleria 2, 6928 Manno, Switzerland | Fax:  +41 (91) 610.82.82

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Non linear Regression: "singular gradient matrix at initial parameter estimates"

luckfamousa
Hi Mario,
yes works great. Thanks!

2011/4/12 Mario Valle <[hidden email]>

> Use a more realistic starting point instead of the default one:
>
> fit <- nls(yeps ~ p1 / (1 + exp(p2 - x)) * exp(p4 * x),
> start=list(p1=410,p2=18,p4=-.03))
>
> This works for me:
> > fit
> Nonlinear regression model
>  model:  yeps ~ p1/(1 + exp(p2 - x)) * exp(p4 * x)
>   data:  parent.frame()
>       p1        p2        p4
> 199.48276  16.28664  -0.01987
>  residual sum-of-squares: 560.6
>
> Number of iterations to convergence: 5
> Achieved convergence tolerance: 5.637e-07
>
> Ciao!
>                        mario
>
>
> On 12-Apr-11 18:01, Felix Nensa wrote:
>
>> fit = nls(yeps ~ p1 / (1 + exp(p2 - x)) * exp(p4 * x))
>>
>>
> --
> Ing. Mario Valle
> Data Analysis and Visualization Group            |
> http://www.cscs.ch/~mvalle
> Swiss National Supercomputing Centre (CSCS)      | Tel:  +41 (91) 610.82.60
> v. Cantonale Galleria 2, 6928 Manno, Switzerland | Fax:  +41 (91) 610.82.82
>
>


--
Felix Nensa

Luisenstr. 15-17
44787 Bochum
Germany

mail: [hidden email]
mobile: +49 171 958 51 40

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Loading...