On 24/09/2014 8:00 AM, Stéphane Adamowicz wrote:
Many thanks to J. Wiley and B. Ripley for their quick answers.
I suppose that many end users are aware of problems in calculation accuracy 
with computers. However, I would like to comment that it was not that obvious 
for me that the data order matters. First, I do not find any clear mention of 
this particular problem in the == help page, but perhaps I am experiencing 
difficulties with the English. Second, I do not encounter this problem neither 
with the piece of code I proposed to replace the dubious one, or in the 
following experiments :

I suspect that there would be situations where your code failed as well. Now that I know about this potential error, I would not trust code that doesn't defend against it, even if I could not find an example where it failed: it depends on tests of exact equality in floating point values, and that is known to be a source of errors in numerical methods.

> # experiment 1 : comparing total variances
> var(dat1$Y) == var(dat2$Y)
[1] TRUE
> # experiment 2 : comparing bilateral T tests
> abs(t.test(Y~F, dat1)$statistic) == abs(t.test(Y~F, dat2)$statistic)
    t
TRUE
> # experiment 3 : applying permutations to T tests
> nperm <- 10000
> T <- abs(t.test(Y~F, dat1)$statistic)
> Tperm <- replicate(n=nperm, abs(t.test(sample(Y)~F, dat1)$statistic))
[1] 0.1018898   # that's nice !

Thus, why a naive end user as I am should expect such pitfalls with F values 
given by the lm function ? Furthermore, codes similar to the one I criticized 
can be found in the teaching documents of various Universities and thus are 
spreading out. I would not be surprised that some scientific papers already 
rely on it ...

In fact, even in R web pages, under Books ("This page gives a partially annotated list of books that are 
related to S or R and may be useful to the R user community"), I found only one book clearly devoted to 
randomization methods : "[32] Laura Chihara and Tim Hesterberg. Mathematical Statistics with Resampling 
and R. Wiley, 1st edition, 2011. ISBN 978-1-1180-2985-5". Looking at the author's profiles, I would say 
that "Beware of the trap of listening to people with no knowledge of basic numerical methods!" does 
not apply to them. Here is their recommended R code for one-way anova (chapter 12, but adapted to my example 
data):

You should tell the authors that their code doesn't work. Many books contain errors, but they only get corrected when authors are informed about them.

> observed <- anova(lm(Y ~ F, dat1))$F[1]
> n <- length(dat1$Y)
> B <- 10^5 - 1
> results <- numeric(B)
> for (i in 1:B)
+ {
+       index <- sample(n)
+       Y.perm <- dat1$Y[index]
+       results[i] <- anova(lm(Y.perm ~ dat1$F))$F[1]
+ }
> (sum(results> observed) + 1) / (B + 1)  # P value
[1] 0.03969

Well, it seems that I am not the only guy who does not find the trap obvious ...

Thus, my final question remains : How can we evaluate the reliability of CRAN 
packages that propose randomization (or bootstrap) methods ?
The same way as you evaluate the reliability of any software: you examine the code for common errors, you apply tests to problems that you know to be difficult, etc. At least all CRAN packages provide you with source code.

Duncan Murdoch

______________________________________________
R-help@r-project.org mailing list
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