[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:44:57 CEST 2023
Thanks a lot Bert, I appreciate your help.
Kind regards,
Paul
El El dom, 20 de ago. de 2023 a la(s) 2:39 p. m., Bert Gunter <
bgunter.4567 using gmail.com> escribió:
> Basic algebra and exponentials/logs. I leave those details to you or
> another HelpeR.
>
> -- Bert
>
> On Sun, Aug 20, 2023 at 12:17 PM Paul Bernal <paulbernal07 using gmail.com>
> wrote:
>
>> 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