抱歉,不小心看了主站的简报,受了处女坐的气场影响,又回来挖老帖子。让这个帖子落在“每周精选”的日期附近。
对于R的p值计算精度来说,其实blas库的实现影响最大。
对于代码
<br />
mydf = data.frame(x=1:100, y=1:100)<br />
lm.ret = lm(y~x, data=mydf)<br />
print(summary(lm.ret)$coefficients, digits=10)<br />
</p>
在FreeBSD-9.1 -i386 R 2.15,
和FreeBSD-10.0-i386 R 3.02,
及FreeBSD-10.0-amd64 R 3.02来说,
尽管存在操作系统和R的版本及32/64位差别,但是结果是一样的:
<br />
Estimate Std. Error t value Pr(>|t|)<br />
(Intercept) -5.684341886e-14 5.598352098e-15 -1.015359839e+01 5.618494122e-17<br />
x 1.000000000e+00 9.624476551e-17 1.039017545e+16 0.000000000e+00<br />
</p>
但是在编译R的时候,改用atlas来代替原来的blas,结果就不同了。
在FreeBSD-10.0-amd64 R 3.02 with atlas-3.8.4_3,1的就是另一个结果:
<br />
(Intercept) -1.136868377e-14 1.466670909e-15 -7.751352876e+00 8.572443485e-12<br />
x 1.000000000e+00 2.521445513e-17 3.965979019e+16 0.000000000e+00<br />
</p>