r - 增加观测值数量会使 R 抛出随机系数 - 数值稳定性问题?

标签 r regression linear-regression floating-accuracy numerical-stability

我有这个代码

rm(list=ls())
N = 20000
xvar <- runif(N, -10, 10) 
e <- rnorm(N, mean=0, sd=1)
yvar <- 1 + 2*xvar + e
plot(xvar,yvar)
lmMod <- lm(yvar~xvar)
print(summary(lmMod))

我预计系数与 [1,2] 类似。

相反,使用N =20000,R不断向我抛出没有统计显着性且不适合模型的随机数,$R^2$确实很低......我只是不明白我做错了什么。这是一个示例输出:

Call:
lm(formula = yvar ~ xvar)

Residuals:
   Min     1Q Median     3Q    Max 
-47.23  -9.10   1.24  11.23  23.74 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)  0.03163    0.08291   0.381  0.70286   
xvar         0.04290    0.01427   3.006  0.00265 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 11.73 on 19998 degrees of freedom
Multiple R-squared:  0.0009635, Adjusted R-squared:  0.0009135 
F-statistic: 19.29 on 1 and 19998 DF,  p-value: 1.131e-05

但是,如果我输入 N=200 或 N=2000,它就会起作用。这些系数与真实系数相似,并且在真实系数的两个标准差之内,我得到的 $R^2$ 值高达 99%,并且这些系数都具有统计显着性,$p<<0.01$。

这里发生了什么?为什么增加观察数量会使回归恶化? R 是否暗中遇到了数值稳定性问题?

我在 Kubuntu 19.04 上运行 R 3.6.0。使用 --vanilla 选项在命令行上运行 R 也会出现同样的问题。

编辑:这是sessioninfo()的输出

> sessionInfo()
R version 3.6.0 (2019-04-26)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 19.04

Matrix products: default
BLAS/LAPACK: /usr/lib/x86_64-linux-gnu/libmkl_rt.so

Random number generation:
 RNG:     Mersenne-Twister 
 Normal:  Inversion 
 Sample:  Rounding 

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=it_IT.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=it_IT.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=it_IT.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=it_IT.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.6.0 tools_3.6.0

最佳答案

这是由于英特尔 MKL。卸载 Intel MKL 并使用 OpenBLAS 解决了问题。

关于r - 增加观测值数量会使 R 抛出随机系数 - 数值稳定性问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56305452/

相关文章:

岭回归 - 如何从 ridgelm 对​​象创建 lm 对象

R 相当于 Stata *

R - 按具有重复条目的变量列合并

r - 从 C 包装器调用 R 函数

javascript - 有没有办法通过 cypress 从目标网站访问全局变量?

r - R 中的线性回归和分组

评估两个(纬度、经度)点之间的视线 (LOS) 的 R 代码

R:如何将结果合并为唯一的输出?

r - B样条困惑

python - Patsy 版本和 Dummy 列表版本之间使用 Statsmodels 进行线性回归的差异