При увеличении количества наблюдений у R выбрасывают случайные коэффициенты - проблема численной устойчивости? - PullRequest
1 голос
/ 25 мая 2019

У меня есть этот код

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 $. </p>

Что здесь происходит?почему увеличение количества наблюдений ухудшает регресс?Испытывает ли R проблемы с числовой стабильностью?

Я запускаю R 3.6.0 на Kubuntu 19.04.Та же проблема возникает и при запуске R в командной строке с использованием опции --vanilla.

EDIT: здесь выводится 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

1 Ответ

1 голос
/ 25 мая 2019

Это было связано с Intel MKL. Удаление Intel MKL и использование OpenBLAS вместо этого решили проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...