Hi Valerio, I did a copy-paste on your reproducible example and I had no problem with chol(nls.out$hessian). In addition to summary() you can look at str() to display the structure of any R object.
> str(nls.out) List of 9 $ par :List of 3 ..$ a: num 8.99 ..$ b: num -1.01 ..$ c: num 6.02 $ hessian : num [1:3, 1:3] 10.3 43.2 19.9 43.2 382.2 ... ..- attr(*, "dimnames")=List of 2 .. ..$ : chr [1:3] "a" "b" "c" .. ..$ : chr [1:3] "a" "b" "c" $ fvec : num [1:100] 0.0232 -0.105 -0.1332 0.0388 0.1482 ... $ info : int 1 $ message : chr "Relative error in the sum of squares is at most `ftol'." $ diag :List of 3 ..$ a: num 9.98 ..$ b: num 88.6 ..$ c: num 10 $ niter : int 8 $ rsstrace: num [1:9] 1966.2 327.2 104.8 53.9 33.2 ... $ deviance: num 1.06 - attr(*, "class")= chr "nls.lm" Also > nls.out$hessian a b c a 10.26361 43.17086 19.89616 b 43.17086 382.17773 166.43747 c 19.89616 166.43747 100.00000 HTH, Eric On Wed, Aug 19, 2020 at 12:17 PM Valerio Leone Sciabolazza < sciabola...@gmail.com> wrote: > Dear R users, > I want to modify how the degrees of freedom are calculated from the > summary function of the package minpack.lm > > My first thought was to replicate how minpack.lm:::summary.nls.lm > works, and modify the line of the code that is relevant for my task. > However, for some reason I am not able to use the code contained in > this function to perform this operation. > > Here is a reproducible example. > > First, I run a NLLS regression using minpack.lm::nls.lm > > # From example 1 of the help page of ?minpack.lm::nls.lm > library(minpack.lm) > x <- seq(0,5,length=100) > getPred <- function(parS, xx) parS$a * exp(xx * parS$b) + parS$c > pp <- list(a=9,b=-1, c=6) > simDNoisy <- getPred(pp,x) + rnorm(length(x),sd=.1) > residFun <- function(p, observed, xx) observed - getPred(p,xx) > parStart <- list(a=3,b=-.001, c=1) > nls.out <- nls.lm(par=parStart, fn = residFun, observed = simDNoisy, > xx = x, control = nls.lm.control(nprint=1)) > summary(nls.out) > > Now, by running minpack.lm:::summary.nls.lm in the console, I get the > following > > minpack.lm:::summary.nls.lm > function (object, ...) > { > param <- coef(object) > pnames <- names(param) > ibb <- chol(object$hessian) > ih <- chol2inv(ibb) > p <- length(param) > rdf <- length(object$fvec) - p > resvar <- deviance(object)/rdf > se <- sqrt(diag(ih) * resvar) > names(se) <- pnames > tval <- param/se > param <- cbind(param, se, tval, 2 * pt(abs(tval), rdf, lower.tail = > FALSE)) > dimnames(param) <- list(pnames, c("Estimate", "Std. Error", > "t value", "Pr(>|t|)")) > ans <- list(residuals = object$fvec, sigma = sqrt(object$deviance/rdf), > df = c(p, rdf), cov.unscaled = ih, info = object$info, > niter = object$niter, stopmess = object$message, coefficients = > param) > class(ans) <- "summary.nls.lm" > ans > } > > Specifically, my task requires to modify the object p of this > function, say I want to set p <- 2. > > To this purpose, I replicate what the summary function does using my > object (nls.out), however an error is returned at line three: > > param <- coef(nls.out) > > pnames <- names(param) > > ibb <- chol(nls.out$hessian) > Error in array(x, c(length(x), 1L), if (!is.null(names(x))) > list(names(x), : > 'data' must be of a vector type, was 'NULL' > > The reason of the error is that there is no nls.out$hessian in nls.out. > > I guess that I am missing something about how summary functions work, > and this is the reason why I cannot use the code from > minpack.lm:::summary.nls.lm outside the minpack.lm environment. > > Does anyone have any hints on how to proceed? Any other way of dealing > with this issue will be equally appreciated. > > Thank you, > Valerio > > ______________________________________________ > 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. > [[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.