[R] Issues when trying to fit a nonlinear regression model

Paul Bernal p@u|bern@|07 @end|ng |rom gm@||@com
Sun Aug 20 21:16:52 CEST 2023


Dear Bert,

Thank you for your extremely valuable feedback. Now, I just want to
understand why the signs for those starting values, given the following:
> #Fiting intermediate model to get starting values
> intermediatemod <- lm(log(y - .37) ~ x, data=mod14data2_random)
> summary(intermediatemod)

Call:
lm(formula = log(y - 0.37) ~ x, data = mod14data2_random)

Residuals:
    Min      1Q  Median      3Q     Max
-0.7946 -0.0908  0.0379  0.1111  0.5917

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.81693    0.25806   -7.04  8.8e-06 ***
x           -0.05538    0.00964   -5.75  6.8e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.323 on 13 degrees of freedom
Multiple R-squared:  0.717, Adjusted R-squared:  0.696
F-statistic:   33 on 1 and 13 DF,  p-value: 6.76e-05

Kind regards,
Paul

El dom, 20 ago 2023 a las 14:07, Bert Gunter (<bgunter.4567 using gmail.com>)
escribió:

> Oh, sorry; I changed signs in the model, fitting
> theta0 + theta1*exp(theta2*x)
>
> So for theta0 - theta1*exp(-theta2*x) use theta1= -.exp(-1.8) and theta2 =
> +.055 as starting values.
>
> -- Bert
>
>
>
>
>
> On Sun, Aug 20, 2023 at 11:50 AM Paul Bernal <paulbernal07 using gmail.com>
> wrote:
>
>> Dear Bert,
>>
>> Thank you so much for your kind and valuable feedback. I tried finding
>> the starting values using the approach you mentioned, then did the
>> following to fit the nonlinear regression model:
>> nlregmod2 <- nls(y ~ theta1 - theta2*exp(-theta3*x),
>>                   start =
>>                     list(theta1 = 0.37,
>>                          theta2 = exp(-1.8),
>>                          theta3 = -0.05538), data=mod14data2_random)
>> However, I got this error:
>> Error in nls(y ~ theta1 - theta2 * exp(-theta3 * x), start = list(theta1
>> = 0.37,  :
>>   step factor 0.000488281 reduced below 'minFactor' of 0.000976562
>> nlregmod2 <- nlxb(y ~ theta1 - theta2*exp(-theta3*x),
>>                   start =
>>                     list(theta1 = 0.37,
>>                          theta2 = exp(-1.8),
>>                          theta3 = -0.05538), data=mod14data2_random)
>> summary(nlregmod2)
>> Object has try-error or missing parameters
>> nlregmod2
>> And I get some NA values when retrieving the statistics for the fitted
>> model:
>> residual sumsquares =  0.0022973  on  15 observations
>>     after  2235    Jacobian and  2861 function evaluations
>>   name            coeff          SE       tstat      pval      gradient
>>  JSingval
>> theta1           9330.89            NA         NA         NA   5.275e-11
>>      967470
>> theta2           9330.41            NA         NA         NA  -5.318e-11
>>       1.772
>> theta3       -3.0032e-07            NA         NA         NA   1.389e-05
>>   8.028e-12
>>
>> Kind regards,
>> Paul
>>
>>
>> El dom, 20 ago 2023 a las 13:21, Bert Gunter (<bgunter.4567 using gmail.com>)
>> escribió:
>>
>>> I got starting values as follows:
>>> Noting that the minimum data value is .38, I fit the linear model log(y
>>> - .37) ~ x to get intercept = -1.8 and slope = -.055. So I used .37,
>>> exp(-1.8)  and -.055 as the starting values for theta0, theta1, and theta2
>>> in the nonlinear model. This converged without problems.
>>>
>>> Cheers,
>>> Bert
>>>
>>>
>>> On Sun, Aug 20, 2023 at 10:15 AM Paul Bernal <paulbernal07 using gmail.com>
>>> wrote:
>>>
>>>> Dear friends,
>>>>
>>>> This is the dataset I am currently working with:
>>>> >dput(mod14data2_random)
>>>> structure(list(index = c(14L, 27L, 37L, 33L, 34L, 16L, 7L, 1L,
>>>> 39L, 36L, 40L, 19L, 28L, 38L, 32L), y = c(0.44, 0.4, 0.4, 0.4,
>>>> 0.4, 0.43, 0.46, 0.49, 0.41, 0.41, 0.38, 0.42, 0.41, 0.4, 0.4
>>>> ), x = c(16, 24, 32, 30, 30, 16, 12, 8, 36, 32, 36, 20, 26, 34,
>>>> 28)), row.names = c(NA, -15L), class = "data.frame")
>>>>
>>>> I did the following to try to fit a nonlinear regression model:
>>>>
>>>> #First, Procedure to Find Starting (initial) Values For Theta1, Theta2,
>>>> and
>>>> Theta3
>>>>
>>>> mymod2 <- y ~ theta1 - theta2*exp(-theta3*x)
>>>>
>>>> strt2 <- c(theta1 = 1, theta2 = 2, theta3 = 3)
>>>>
>>>> trysol2<-nlxb(formula=mymod2, data=mod14data2_random, start=strt2,
>>>> trace=TRUE)
>>>> trysol2
>>>> trysol2$coefficients[[3]]
>>>>
>>>> #Fitting nonlinear Regression Model Using Starting Values From Previous
>>>> Part
>>>> nonlinearmod2 <- nls(mymod2, start = list(theta1 =
>>>> trysol2$coefficients[[1]],
>>>>                      theta2 = trysol2$coefficients[[2]],
>>>>                      theta3 = trysol2$coefficients[[3]]), data =
>>>> mod14data2_random)
>>>>
>>>> And I got this error:
>>>> Error in nlsModel(formula, mf, start, wts, scaleOffset = scOff,
>>>> nDcentral =
>>>> nDcntr) :
>>>>   singular gradient matrix at initial parameter estimates
>>>>
>>>> Any idea on how to proceed in this situation? What could I do?
>>>>
>>>> Kind regards,
>>>> Paul
>>>>
>>>>         [[alternative HTML version deleted]]
>>>>
>>>> ______________________________________________
>>>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>>> 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]]



More information about the R-help mailing list