If you will be copying the printed coefficients into your function (instead
of just using fitted() or predict()), then use dput(coef(m)) to get them
printed to full precision.

Also, if you regress on pH-7 instead of pH you don't have to worry so much
about the roundoff or cancellation error.  This is akin to what
poly(pH,degree) does.

Bill Dunlap
TIBCO Software
wdunlap tibco.com


On Thu, Apr 2, 2020 at 9:44 PM Troels Ring <tr...@gvdnet.dk> wrote:

> Thank you – yes indeed, on suggestion from Rui I noticed that the problem
> was mainly that I took the parameters from “m” instead of coef(m) i.e
>
> a        b        d
>
> -1630.71   457.68   -32.11
>
> Instead of
>
>           a           b           d
>
> -1630.70993   457.67555   -32.11469
>
>
>
> And that alone saves me.
>
> BW
> Troels
>
>
>
> *Fra:* William Dunlap <wdun...@tibco.com>
> *Sendt:* 2. april 2020 18:50
> *Til:* Troels Ring <tr...@gvdnet.dk>
> *Cc:* r-help mailing list <r-help@r-project.org>
> *Emne:* Re: [R] nls problem
>
>
>
> Roundoff/cancelation error: compare the following.  The first is
> equivalent to your function, the last to fitted().
>
>
>
> > with(aedf, t(cbind(1, pH, pH^2) %*% round(coef(m), digits=2)))
>             [,1]      [,2]       [,3]         [,4]       [,5]       [,6]
>     [,7]       [,8]       [,9]     [,10]
> [1,] -0.01635965 0.1076024 0.07477337 -0.007166685 -0.1337865 -0.2851877
> -0.4804638 -0.6865135 -0.9870137 -1.398027
> > with(aedf, t(cbind(1, pH, pH^2) %*% round(coef(m), digits=4)))
>            [,1]        [,2]       [,3]       [,4]       [,5]       [,6]
>     [,7]      [,8]      [,9]     [,10]
> [1,] -0.2196286 -0.09864071 -0.1345213 -0.2180792 -0.3463237 -0.4991861
> -0.6959856 -0.903394 -1.205598 -1.618608
> > with(aedf, t(cbind(1, pH, pH^2) %*% round(coef(m), digits=16)))
>            [,1]        [,2]       [,3]       [,4]       [,5]      [,6]
>  [,7]       [,8]      [,9]     [,10]
> [1,] -0.2208705 -0.09989926 -0.1357969 -0.2193638 -0.3476174 -0.500488
> -0.697296 -0.9047119 -1.206926 -1.619947
>
>
>
> Note that your model is linear and could be fitted with
>
>    lm(data=aedf, Flux ~ pH + I(pH^2))
>
>    lm(data=aedf, Flux ~ poly(pH, 2))
> The latter uses a more stable parameterization.
>
>
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com
>
>
>
>
>
> On Thu, Apr 2, 2020 at 4:15 AM Troels Ring <tr...@gvdnet.dk> wrote:
>
> Dear friends - I'm on Win10 with R 6.3.1 and have a very simple problem
> with
> nls which apparently gives a decent fit to the parable below, even without
> starting values. But when I then think I know the meaning of the three
> parameters a, b, and d it goes very wrong. I guess I am again overlooking
> something easy but cannot spot it.
>
> BW
> Troels Ring,
>
> Aalborg, Denmark
>
>
>
>
>
> aedf <- structure(list(Flux = c(-0.141256, -0.154709, -0.215247,
> -0.302691,
>
>             -0.32287, -0.511211, -0.605381, -0.813901, -1.11659, -1.76906
>
> ), pH = c(7.06273, 7.11182, 7.16182, 7.18818, 7.21455, 7.23818,
>
>           7.26273, 7.28455, 7.31182, 7.34364)), class = "data.frame",
> row.names = c(NA,
>
>
> -10L))
>
> m <- with(aedf,nls(Flux~a + b*pH + d*pH^2))
>
>
>
> with(aedf,plot(pH,Flux))
>
> with(aedf,lines(pH,fitted(m),lty=1,col="red",lwd=3))
>
>
>
> m
>
> # a        b        d
>
> # -1630.70   457.67   -32.11
>
>
>
> fitted(m)
>
> # 1] -0.22087053 -0.09989926 -0.13579690 -0.21936385 -0.34761742
> -0.50048799
>
> # [7] -0.69729602 -0.90471194 -1.20692552 -1.61994657
>
>
>
> FPG <- function(pH) -1630.70 + 457.67*pH -32.11*pH^2
>
>
>
> FPG(aedf$pH)
>
> # [1] -0.016359649  0.107602395  0.074773375 -0.007166685 -0.133786467
>
> # [6] -0.285187665 -0.480463769 -0.686513537 -0.987013685 -1.398026917
>
>
>
> # So why aren't fitted(m) and FPG(aedf$pH) not closer ("equal")?
>
>
>
>
> This email has been scanned by BullGuard antivirus protection.
> For more info visit www.bullguard.com
> <
> http://www.bullguard.com/tracking.aspx?affiliate=bullguard&buyaffiliate=smt
> p&url=/>
>
>         [[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.
>
>
> This email has been scanned by BullGuard antivirus protection.
> For more info visit www.bullguard.com
> <http://www.bullguard.com/tracking.aspx?affiliate=bullguard&buyaffiliate=smtp&url=/>
>

        [[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.

Reply via email to