[R] a problem 'cor' function
Peter Ehlers
ehlers at math.ucalgary.ca
Thu Jun 1 00:49:18 CEST 2006
Looks like another case of the most F of all FAQs: FAQ 7.31.
See if the following makes sense to you:
pl <- iris[101:150, 3]
all.equal(cor(pl,pl), 1)
[1] TRUE
cor(pl,pl) == 1
[1] FALSE
sprintf("%1.22g", cor(pl, pl))
[1] "0.99999999999999989"
sprintf("%1.22g", pl)
[1] "6" "5.0999999999999996" "5.9000000000000004"
etc
Peter Ehlers
Tao Shi wrote:
> Hi list,
>
> One of my co-workers found this problem with 'cor' in his code and I confirm it too (see below). He's using R 2.2.1 under Win 2K and I'm using R 2.3.0 under Win XP.
>
> ===========================================
>
>>R.Version()
>
> $platform
> [1] "i386-pc-mingw32"
>
> $arch
> [1] "i386"
>
> $os
> [1] "mingw32"
>
> $system
> [1] "i386, mingw32"
>
> $status
> [1] ""
>
> $major
> [1] "2"
>
> $minor
> [1] "3.0"
>
> $year
> [1] "2006"
>
> $month
> [1] "04"
>
> $day
> [1] "24"
>
> $`svn rev`
> [1] "37909"
>
> $language
> [1] "R"
>
> $version.string
> [1] "Version 2.3.0 (2006-04-24)"
>
>>data(iris)
>>cor(iris[1:4])
>
> Sepal.Length Sepal.Width Petal.Length Petal.Width
> Sepal.Length 1.0000 -0.1176 0.8718 0.8179
> Sepal.Width -0.1176 1.0000 -0.4284 -0.3661
> Petal.Length 0.8718 -0.4284 1.0000 0.9629
> Petal.Width 0.8179 -0.3661 0.9629 1.0000
>
>>cor(iris[1:4])==1
>
> Sepal.Length Sepal.Width Petal.Length Petal.Width
> Sepal.Length TRUE FALSE FALSE FALSE
> Sepal.Width FALSE TRUE FALSE FALSE
> Petal.Length FALSE FALSE TRUE FALSE
> Petal.Width FALSE FALSE FALSE TRUE
>
>>cor(iris[1:4], iris[1:4])
>
> Sepal.Length Sepal.Width Petal.Length Petal.Width
> Sepal.Length 1.0000 -0.1176 0.8718 0.8179
> Sepal.Width -0.1176 1.0000 -0.4284 -0.3661
> Petal.Length 0.8718 -0.4284 1.0000 0.9629
> Petal.Width 0.8179 -0.3661 0.9629 1.0000
>
>>cor(iris[1:4], iris[1:4])==1
>
> Sepal.Length Sepal.Width Petal.Length Petal.Width
> Sepal.Length TRUE FALSE FALSE FALSE
> Sepal.Width FALSE TRUE FALSE FALSE
> Petal.Length FALSE FALSE FALSE FALSE
> Petal.Width FALSE FALSE FALSE TRUE
> ===========================================
>
> The two ways of calculating correlation seem to generate the 'same' results, but the second one doesn't appear to be numerically stable (see the 3rd diagonal element of the last matrix).
>
> thanks,
>
> ...Tao
>
> _________________________________________________________________
> Join the next generation of Hotmail and you could win the adventure of a lifetime
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
--
Peter Ehlers
Chair, Division of Statistics and Actuarial Science
Department of Mathematics and Statistics
University of Calgary, 2500 University Dr. NW ph: 403-220-3936
Calgary, Alberta T2N 1N4, CANADA fax: 403-282-5150
email: ehlers at math.ucalgary.ca
More information about the R-help
mailing list