[R] Change how minpack.lm:::summary.nls.lm calculates degrees of freedom
Eric Berger
er|cjberger @end|ng |rom gm@||@com
Wed Aug 19 11:35:33 CEST 2020
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 <
sciabolazza using 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 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