R lm()-函数在SolusOS Linux上给出的结果与在Windows上不同

R lm()-函数在SolusOS Linux上给出的结果与在Windows上不同,r,R,我运行的是SolusOSLinux发行版(4.0,r3.6.1)和Windows(windows10,r3.5.2) 我的代码: library(datasets) fit2 <- lm(Sepal.Length~Sepal.Width+Species, data=iris) summary(fit2) 在SolusOS-Linux上 Estimate Std. Error t value Pr(>|t|) (Intercept

我运行的是
SolusOS
Linux发行版(4.0,r3.6.1)和Windows(windows10,r3.5.2)

我的代码:

library(datasets)
fit2 <- lm(Sepal.Length~Sepal.Width+Species, data=iris)
summary(fit2)
在SolusOS-Linux上

                    Estimate Std. Error    t value     Pr(>|t|)
(Intercept)       -1.1562296  2.5541337 -0.4526895 6.514443e-01
Sepal.Width       -0.3158123  0.5572782 -0.5667049 5.717849e-01
Speciesversicolor 11.5719475  1.7693108  6.5403701 9.670731e-10
Speciesvirginica  11.6048354  1.7750914  6.5375987 9.810282e-10
请确认Windows上的结果是正确的。 检查数据,数据相同;如果lm()-函数中的默认值发生了更改,则检查了文档,未发现任何更改。机器(如某些地方提到的)有一个区别:$sizeof.long=8(Linux)和4(Windows)——我认为这不重要。 谷歌搜索了一个小时,但没有找到任何与此相关的信息

有什么想法吗


编辑:我在这两个版本上都使用了Rstudio,Linux版本是99.9.9(奇怪;尽管软件中心给出了1.2.1335;Windows 1.2.5001),所以我在R-terminal中运行了代码,结果仍然是一样的。

评论有点笨拙,所以这里有一个总结和一些进一步的建议

要重新迭代,请确保

  • 你从一个新的R终端开始
  • 您的全局环境中没有对象(例如,从加载本地
    .Rprofile
    );要调试这种情况,理想情况下,
    .Rprofile
    应该为空;及
  • 您没有恢复以前的R会话
  • 如果您执行了上述操作,
    ls()
    不应该返回任何内容,像
    lm
    这样的函数应该引用基本的R函数

    如果仍然得到不同的结果,可以尝试手动计算OLS估计值

    X <- model.matrix(Sepal.Length ~ Sepal.Width + as.factor(Species), data = iris)
    y <- with(iris, Sepal.Length)
    R <- t(X) %*% X
    solve(R) %*% t(X) %*% y
    #                                  [,1]
    #(Intercept)                  2.2513932
    #Sepal.Width                  0.8035609
    #as.factor(Species)versicolor 1.4587431
    #as.factor(Species)virginica  1.9468166
    
    如果结果不同,我建议逐步进行手动OLS估算计算,并比较两台机器上的
    X
    R
    对象


    更新 我已经在虚拟机中安装了Solus(Budgie)4.0坚韧,并且
    lm
    给出了正确的结果

    coef(lm(萼片长~萼片宽+种,数据=鸢尾))
    #(截距)萼片宽种杂色种弗吉尼亚种
    #  2.2513932         0.8035609         1.4587431         1.9468166
    
    涉及操作系统的详细信息

    uname-r
    #5.3.10-134.当前
    
    gcc-版本|头-n1
    #gcc(Solus)9.2.0
    
    inxi-Fz
    #系统:主机:solus内核:5.3.10-134。当前x86_64位:64桌面:Budge 10.5.1发行版:solus 4.0
    #机器:类型:Virtualbox系统:innotek产品:Virtualbox v:1.2系列:
    #Mobo:Oracle型号:VirtualBox v:1.2系列:BIOS:innotek v:VirtualBox日期:12/01/2006
    #CPU:拓扑:单核型号:英特尔Core i5-6600位:64类型:MCP二级缓存:6144千字节
    #速度:3312 MHz最小/最大:不适用核心速度(MHz):1:3312
    #图形:Device-1:VMware SVGA II适配器驱动程序:vmwgfx v:2.15.0.0
    #显示:x11服务器:X.Org 1.20.5驱动程序:vmware卸载:fbdev,模式设置,vesa分辨率:2560x1440~60Hz
    #OpenGL:渲染器:llvmpipe(LLVM 9.0 256位)v:3.3 Mesa 19.2.5
    #音频:设备1:Intel 82801AA AC97音频驱动程序:snd_intel8x0
    #声音服务器:ALSA v:k5.3.10-134.1当前
    #网络:设备1:Intel 82540EM千兆以太网驱动程序:e1000
    #IF:enp0s3状态:提升速度:1000 Mbps双工:完整mac:
    #Device-2:Intel 82371AB/EB/MB PIIX4 ACPI类型:网桥驱动程序:PIIX4_smbus
    #驱动器:本地存储:总计:40.00 GiB使用:7.33 GiB(18.3%)
    #ID-1:/dev/sda供应商:VirtualBox型号:VBOX硬盘大小:40.00 GiB
    #分区:ID-1:/size:18.36 GiB已使用:7.25 GiB(39.5%)fs:ext4 dev:/dev/dm-1
    #ID-2:/boot size:269.0使用的MiB:83.7 MiB(31.1%)fs:ext4 dev:/dev/sda1
    #ID-3:swap-1大小:956.0使用的MiB:0千字节(0.0%)fs:swap-dev:/dev/dm-0
    #传感器:消息:未找到传感器数据。是否配置了传感器?
    #信息:进程:159正常运行时间:21h 57m内存:3.84 GiB使用:579.1 MiB(14.7%)#Shell:bash inxi:3.0.36
    
    我今天在SolusOS论坛上发了帖子,有人指着我。同样的问题也可能影响aov功能,可能与操作系统有关(有人报告说Ubuntu也有问题)

    无论如何,谢谢你的帮助和努力! (如果可行,我将发布解决方案)

    更新日期:1月8日20 (从我的dev.getsol.us论坛帖子中复制)

    这个问题似乎是由OpenBLAS库libopenblas_Haswell p-r0.3.2.so引起的。我决定删除一个指向该库(/usr/lib64/haswell/libopenblas.so.0)的符号链接,该库恢复为使用/usr/lib64/libopenblas_core2p-r0.3.2.so。现在我从参考计算中得到了正确的结果

    当然,我不知道为什么使用libopenblas_haswell p-r0.3.2.so会产生不正确的结果,但它似乎是我系统的罪魁祸首

    更新日期:2月25日20
    Solus已经更新了OpenBlas包,现在库是/usr/lib64/haswell/libopenblas_haswell-r0.3.7.so;它在我的参考计算中给出了正确的结果。

    您能验证一下它们在
    摘要(iris)
    中返回的结果是否相同吗?。。。并确保
    fit
    fit2
    摘要(iris)中没有混淆。我使用传输到Linux的Windows虹膜数据以及R脚本进行了测试。其他一些数据(dataset::usarrest)在Linux上也给出了错误的结果;请在R重新启动时运行
    ls()
    ,这一定是某种命名冲突。事实上,Windows的结果是正确的。您能否绝对确保(1)您从一个新的R终端开始,(2)您的全局环境中没有变量/对象,例如加载
    .Rprofile
    ,以及(3)您没有恢复以前的R会话。1)我使用“--vanilla”标志启动R。2) 我找到的唯一Rprofile文件位于/usr/lib64/R/library/R/base中。如果我将该文件擦干净,R将不会启动。3) AFAIK上一届会议未出席。ls()给出字符(0)。我比较了两个代码的结果,是的,它们是不同的;后者给出了错误的结果。lm功能指向“环境”
    X <- model.matrix(Sepal.Length ~ Sepal.Width + as.factor(Species), data = iris)
    y <- with(iris, Sepal.Length)
    R <- t(X) %*% X
    solve(R) %*% t(X) %*% y
    #                                  [,1]
    #(Intercept)                  2.2513932
    #Sepal.Width                  0.8035609
    #as.factor(Species)versicolor 1.4587431
    #as.factor(Species)virginica  1.9468166
    
    coef(lm(Sepal.Length ~ Sepal.Width + Species, data = iris))
    #(Intercept)       Sepal.Width Speciesversicolor  Speciesvirginica
    #  2.2513932         0.8035609         1.4587431         1.9468166