首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么运行相同的R代码会给出不同的结果?

为什么运行相同的R代码会给出不同的结果?
EN

Stack Overflow用户
提问于 2022-08-22 21:37:50
回答 3查看 177关注 0票数 0

由于某些原因,在R中运行lm回归给了我不同的输出。这是一个简单的lm,不涉及随机性。因为我只在我的计算机中得到了这个奇怪的结果(代码在其他计算机上给出了相同的结果),所以我没有在这里附加数据,而是附加了输出。

有人有建议吗?谢谢!

代码语言:javascript
运行
复制
d = read.csv("d.csv")
str(d)
## 'data.frame':    5000 obs. of  2 variables:
##  $ elevation_sd: num  -0.6123 1.3988 -0.111 -0.0763 0.4129 ...
##  $ pred_rich   : num  6.74 10.35 10.81 15.24 37.58 ...
coef(lm(pred_rich ~ elevation_sd + I(elevation_sd^2), data = d))
##       (Intercept)      elevation_sd I(elevation_sd^2) 
##       31.40967132      -14.51366622       -0.04686489
coef(lm(pred_rich ~ elevation_sd + I(elevation_sd^2), data = d))
##       (Intercept)      elevation_sd I(elevation_sd^2) 
##         24.791451        -22.377711          2.530645
coef(lm(pred_rich ~ elevation_sd + I(elevation_sd^2), data = d))
##       (Intercept)      elevation_sd I(elevation_sd^2) 
##         29.009348        -24.539297          2.184579
coef(lm(pred_rich ~ elevation_sd + I(elevation_sd^2), data = d))
##       (Intercept)      elevation_sd I(elevation_sd^2) 
##         17.615122        -36.893819          5.300316
coef(lm(pred_rich ~ elevation_sd + I(elevation_sd^2), data = d))
##       (Intercept)      elevation_sd I(elevation_sd^2) 
##         17.292353        -37.052702          5.461568
代码语言:javascript
运行
复制
## R version 4.2.1 (2022-06-23)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 20.04.4 LTS
## 
## Matrix products: default
## BLAS/LAPACK: /usr/lib/x86_64-linux-gnu/libmkl_rt.so
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
##  [1] digest_0.6.29   R6_2.5.1        jsonlite_1.8.0  magrittr_2.0.3 
##  [5] evaluate_0.15   stringi_1.7.8   cachem_1.0.6    rlang_1.0.4    
##  [9] cli_3.3.0       rstudioapi_0.13 jquerylib_0.1.4 bslib_0.4.0    
## [13] rmarkdown_2.14  tools_4.2.1     stringr_1.4.0   xfun_0.31      
## [17] yaml_2.3.5      fastmap_1.1.0   compiler_4.2.1  htmltools_0.5.3
## [21] knitr_1.39      sass_0.4.2
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-08-23 02:25:28

我通过改变我的BLAS/LAPACK解决了这个问题。

代码语言:javascript
运行
复制
sudo update-alternatives --config libblas.so.3-x86_64-linux-gnu
sudo update-alternatives --config liblapack.so.3-x86_64-linux-gnu

我选择了OpenBLAS,然后重新启动R,没有问题了!我也尝试过默认的BLAS/LAPACK和AtlasBLAS,两者都能工作!

所以,问题是来自英特尔MLK库!谢谢你的提示。

票数 1
EN

Stack Overflow用户

发布于 2022-08-22 21:53:01

正如我在评论中提到的,这至多是一件轶事,很可能是在浪费你和我们的时间。没有一个可重复的例子,我们就不能做任何有意义的事情。

但我们可以嘲笑这个。在这里,我做了一个随机抽签,也使用N = 5000,在您的情况下,并运行回归五次。不用说,即使这两个向量没有关联,通过设计,纯数值确定的系数也是,当然,是相同的。

代码语言:javascript
运行
复制
> set.seed(123)
> x <- rnorm(5000); y <- rnorm(5000)  # your dimensions
> replicate(5, lm(y ~ x + I(x^2))$coef)
                   [,1]        [,2]        [,3]        [,4]        [,5]
(Intercept) -0.01371532 -0.01371532 -0.01371532 -0.01371532 -0.01371532
x           -0.00613063 -0.00613063 -0.00613063 -0.00613063 -0.00613063
I(x^2)       0.00964436  0.00964436  0.00964436  0.00964436  0.00964436
> 

现在,这三行代码是可复制的,因此我请您在您的系统上运行此代码。

编辑:我的sessionInfo(),也在Ubuntu上,但是22.04,从BLAS和LAPACK的两行开始。你只有一个看上去不对的。

代码语言:javascript
运行
复制
> sessionInfo()
R version 4.2.1 (2022-06-23)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 22.04.1 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.10.0
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0
票数 2
EN

Stack Overflow用户

发布于 2022-08-22 22:03:38

下面是我通过运行Dirk的代码得到的结果:

代码语言:javascript
运行
复制
                   [,1]        [,2]         [,3]        [,4]        [,5]
(Intercept)  0.01103854  0.01819024 -0.010350210  0.01828507  0.02242858
x           -0.02816530 -0.05002762 -0.027738397 -0.02812795 -0.02775974
I(x^2)      -0.01918489 -0.01735535 -0.005590314 -0.01720919 -0.01929609

为了使输出更加不同:

代码语言:javascript
运行
复制
set.seed(123)
x <- rnorm(5000) 
y <- x + x^2 + rnorm(5000)  
replicate(5, lm(y ~ x + I(x^2))$coef)
代码语言:javascript
运行
复制
                 [,1]      [,2]      [,3]      [,4]      [,5]
(Intercept) -1.643336 -3.908215 -1.979385 -3.707418 -1.845149
x            2.033474  2.001891  2.019949  2.007776  2.045030
I(x^2)       1.834672  1.977397  1.995412  2.867048  1.936577

第四次复制有很大的不同。

下面的输出来自我的另一台膝上型计算机(按预期工作):

代码语言:javascript
运行
复制
(Intercept) -0.01371532 -0.01371532 -0.01371532 -0.01371532 -0.01371532
x            0.99386937  0.99386937  0.99386937  0.99386937  0.99386937
I(x^2)       1.00964436  1.00964436  1.00964436  1.00964436  1.00964436
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73451244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档