[R] Understanding and predict round-off errors sign on simple functions

c.jallet at laposte.net c.jallet at laposte.net
Fri Jul 1 09:10:36 CEST 2016


Thank you for all your answers and I will take a look to the 'propagate'
package.

Ps: first time I am participating to a mailing list, I hope I answer to the
right emails. 

-----Original Message-----
From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of DIGHE,
NILESH [AG/2362]
Sent: jeudi, 30 juin 2016 14:02
To: Marc Schwartz <marc_schwartz at me.com>; Bert Gunter
<bgunter.4567 at gmail.com>
Cc: R-help <r-help at r-project.org>
Subject: Re: [R] Understanding and predict round-off errors sign on simple
functions

Using "runmean" function from caTools package within your SMA function
appears to solve the issue.  Please see details below.

library(caTools)

> dput(m)
structure(c(-0.626453810742332, 0.183643324222082, -0.835628612410047,
1.59528080213779, 0.329507771815361, -0.820468384118015, 0.487429052428485,
0.738324705129217, 0.575781351653492, -0.305388387156356, 3.51178116845085,
2.38984323641143, 1.3787594194582, -0.2146998871775, 3.12493091814311,
1.95506639098477, 1.98380973690105, 2.9438362106853, 2.82122119509809,
2.59390132121751, 5.91897737160822, 5.78213630073107, 5.07456498336519,
3.01064830413663, 5.61982574789471, 4.943871260471, 4.84420449329467,
3.52924761610073, 4.52184994489138, 5.4179415601997), .Dim = c(10L,
3L))


> dput(SMA)
function (x, n = 10, ...)
{
    ma <- runmean(x, n)
    if (!is.null(dim(ma))) {
        colnames(ma) <- "SMA"
    }
    return(ma)
}


mma <- apply(m, 2, SMA, n=1)

results<-mma-m

> dput(results)
structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), .Dim = c(10L, 3L))


Nilesh
-----Original Message-----
From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Marc
Schwartz
Sent: Wednesday, June 29, 2016 1:07 PM
To: Bert Gunter
Cc: R-help
Subject: Re: [R] Understanding and predict round-off errors sign on simple
functions

Hi,

Just to augment Bert's comments, I presume that you are aware of the
relevant R FAQ:

 
https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-
numbers-are-equal_003f

That you had an expectation of the difference being 0 suggested to me that
you might not be, but my apologies if that is not the case.

That being said, there are some higher precision CRAN packages that may
offer some additional functionality, with the potential limitations that
Bert references below. More information is available in the Numerical
Mathematics CRAN Task View:

  https://cran.r-project.org/web/views/NumericalMathematics.html

In addition, with the caveat that I have not used it, there is the
'propagate' package on CRAN that may be relevant to what you want to be able
to anticipate, at some level:

  https://cran.r-project.org/web/packages/propagate/index.html

It has not been updated in a while and there are some notes for the CRAN
package checks, that suggest that the maintainer may not be active at this
point.

Regards,

Marc


> On Jun 29, 2016, at 10:13 AM, Bert Gunter <bgunter.4567 at gmail.com> wrote:
> 
> I am certainly no expert, but I would assume that:
> 
> 1. Roundoff errors depend on the exact numerical libraries and 
> versions that are used, and so general language comparisons are 
> impossible without that information;
> 
> 2. Roundoff errors depend on the exact calculations being done and 
> machine precision and are very complicated to determine
> 
> So I would say the answer to your questions is no.
> 
> But you should probably address such a question to a numerical analyst 
> for an authoritative answer. Maybe try stats.stackexchange.com  .
> 
> -- Bert
> 
> Bert Gunter
> 
> "The trouble with having an open mind is that people keep coming along 
> and sticking things into it."
> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
> 
> 
> On Wed, Jun 29, 2016 at 2:55 AM, Sirhc via R-help <r-help at r-project.org>
wrote:
>> Hi,
>> 
>> 
>> 
>> May be it is a basic thing but I would like to know if we can 
>> anticipate round-off errors sign.
>> 
>> 
>> 
>> Here is an example :
>> 
>> 
>> 
>> # numerical matrix
>> 
>> m <- matrix(data=cbind(rnorm(10, 0), rnorm(10, 2), rnorm(10, 5)), 
>> nrow=10,
>> ncol=3)
>> 
>> 
>> 
>>> m
>> 
>>            [,1]      [,2]     [,3]
>> 
>> [1,]  0.4816247 1.1973502 3.855641
>> 
>> [2,] -1.2174937 0.7356427 4.393279
>> 
>> [3,]  0.8504074 2.5286509 2.689196
>> 
>> [4,]  1.8048642 1.8580804 6.665237
>> 
>> [5,] -0.6749397 1.0944277 4.838608
>> 
>> [6,]  0.8252034 1.5595268 3.681695
>> 
>> [7,]  1.3002208 0.9582693 4.561577
>> 
>> [8,]  1.6950923 3.5677921 6.005078
>> 
>> [9,]  0.6509285 0.9025964 5.082288
>> 
>> [10,] -0.5676040 1.3281102 4.446451
>> 
>> 
>> 
>> #weird moving average of period 1 !
>> 
>> mma <- apply(m, 2, SMA, n=1)
>> 
>> 
>> 
>>> mma
>> 
>>            [,1]      [,2]     [,3]
>> 
>> [1,]         NA        NA       NA
>> 
>> [2,] -1.2174937 0.7356427 4.393279
>> 
>> [3,]  0.8504074 2.5286509 2.689196
>> 
>> [4,]  1.8048642 1.8580804 6.665237
>> 
>> [5,] -0.6749397 1.0944277 4.838608
>> 
>> [6,]  0.8252034 1.5595268 3.681695
>> 
>> [7,]  1.3002208 0.9582693 4.561577
>> 
>> [8,]  1.6950923 3.5677921 6.005078
>> 
>> [9,]  0.6509285 0.9025964 5.082288
>> 
>> [10,] -0.5676040 1.3281102 4.446451
>> 
>> 
>> 
>> 
>> 
>> #difference should be 0 but here is the result
>> 
>>> m - mma
>> 
>>               [,1]         [,2]          [,3]
>> 
>> [1,]            NA           NA            NA
>> 
>> [2,]  0.000000e+00 0.000000e+00 -8.881784e-16
>> 
>> [3,]  0.000000e+00 0.000000e+00 -8.881784e-16
>> 
>> [4,]  0.000000e+00 4.440892e-16 -8.881784e-16
>> 
>> [5,] -1.110223e-16 4.440892e-16 -8.881784e-16
>> 
>> [6,] -1.110223e-16 2.220446e-16 -4.440892e-16
>> 
>> [7,] -2.220446e-16 2.220446e-16  0.000000e+00
>> 
>> [8,] -2.220446e-16 0.000000e+00  0.000000e+00
>> 
>> [9,] -3.330669e-16 2.220446e-16 -8.881784e-16
>> 
>> [10,] -3.330669e-16 4.440892e-16 -8.881784e-16
>> 
>> 
>> 
>> SMA function use runMean
>> 
>> # TTR / R / MovingAverages.R
>> 
>> "SMA" <- function(x, n=10, ...) { # Simple Moving Average
>> 
>>   ma <- runMean( x, n )
>> 
>>   if(!is.null(dim(ma))) {
>> 
>>     colnames(ma) <- "SMA"
>> 
>>   }
>> 
>>  return(ma)
>> 
>> }
>> 
>> 
>> 
>> 
>> 
>> Can anyone explain me that round error type?
>> 
>> Is it possible to reproduce this same error generation in another 
>> language like C++ or C# ?
>> 
>> 
>> 
>> Thanks in advance for your answers
>> 
>> 
>> 
>> Regards
>> 
>> 
>> 
>> Chris

______________________________________________
R-help at 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 and any attachments were sent from a Monsanto email account and
may contain confidential and/or privileged information. If you are not the
intended recipient, please contact the sender and delete this email and any
attachments immediately. Any unauthorized use, including disclosing,
printing, storing, copying or distributing this email, is prohibited. All
emails and attachments sent to or from Monsanto email accounts may be
subject to monitoring, reading, and archiving by Monsanto, including its
affiliates and subsidiaries, as permitted by applicable law. Thank you.

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



More information about the R-help mailing list