My answer is WAY longer than Bert Gunter's but maybe useful nonetheless.

(Q for John Nash: why does the coef() method for nlmrt objects return the coefficient vector **invisibly**? That seems confusing!)

  Here's what I did:

* as a preliminary step, adjust the formula so that I don't have to think as hard to eyeball starting values from the plot: in particular, replace (x) with (x-8) so that the data start from x = 0

* with this adjustment, we can approximate as follows:
    * theta1-theta2 is the value at (x' = 0) (or x = 8)
    * theta1 is the value as x goes to infinity
* so since y(0) approx. 0.5 and y(inf) approx 0.4, we can use theta1 = 0.4, theta2 = -0.1 * theta3 gives the rate of decline. Since the curve drops by *approximately* a factor of e over the range from x'=0 to x'=5, 1/5 should be a good starting value for this

n1 <- nlxb(y~theta1 - theta2*exp(-theta3*(x-8)),
     start = list(theta1 = 0.4, theta2 = -0.1, theta3 = 1/5),
     data = dd2)

residual sumsquares =  0.00076151  on  15 observations
    after  6    Jacobian and  9 function evaluations
name coeff SE tstat pval gradient JSingval theta1 0.391967 0.006128 63.96 0 -2.629e-11 4.085 theta2 -0.0997234 0.007897 -12.63 2.733e-08 -1.035e-12 0.9956 theta3 0.107376 0.02365 4.54 0.0006777 -1.327e-11 0.3276

  Now if the formula is

theta1 - theta2*exp(-theta3*(x-8))

this is equivalent to

theta1 - theta2*exp(-theta3*x)*exp(8*theta3) =
theta1 - (theta2*exp(8*theta3))*exp(-theta3*x))

cc <- coef(n1)
start2 <- with(as.list(cc), list(theta1 = theta1, theta2 = theta2*exp(8*theta3), theta3 = theta3))
unlist(start2)
 theta1   theta2   theta3
 0.39197 -0.23543  0.10738

To confirm, rerun the fit with these starting values:

n1 <- nlxb(y~theta1 - theta2*exp(-theta3*x),
   start = start2,
  data = dd2)


nlmrt class object: x
residual sumsquares =  0.00076151  on  15 observations
    after  4    Jacobian and  5 function evaluations
name coeff SE tstat pval gradient JSingval theta1 0.391967 0.006128 63.96 0 -4.066e-12 4.228 theta2 -0.235429 0.04553 -5.171 0.0002328 3.151e-12 0.8508 theta3 0.107376 0.02365 4.54 0.0006777 -5.795e-12 0.1569



On 2023-08-20 1:15 p.m., Paul Bernal 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@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.

______________________________________________
R-help@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.

Reply via email to