R:locpoly错误地返回NaN

前端之家收集整理的这篇文章主要介绍了R:locpoly错误地返回NaN前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
运行以下代码给我一个NaN:
library(KernSmooth) 
x <- c(5.84155992364115,1.55292112974119,0.0349665318792623,3.93053647398094,3.42790577684633,2.9715553006801,0.837108410045353,2.872476865277,3.89232548092257,0.206399650539628) 
y <- c(0.141415317472329,1.34799648955049,0.0297566221758204,-0.966736679061812,0.246306732122746,0.557982376254723,0.740542828791083,0.162336127802977,-0.428804158514744,0.691280978689863) 

locpoly(x,y,bandwidth = 0.4821232,gridsize = 12,degree = 1)[['y']]

我明白了

[1]  0.3030137  0.6456624  0.9530586  1.1121106  0.8120947  0.4441603
[7]  0.1425592 -0.3600028 -0.7840411 -1.0517612 -1.2690134        NaN

在另一台计算机上,我得到相同的,除了我得到-0.7270521而不是NaN.我猜大多数人也会得到这个.所以问题是如何修复破碎的系统?这与我的LAPACK或LIBBLAS有关吗?

请注意,上面提到的两台计算机都使用Ubuntu.给NaN的那个使用Ubuntu 13.10,给出一个数字的是12.04.

编辑:

我新的怀疑是它是一个浮点计算问题:
局部多项式回归只是一个加权线性回归,其中权重越大,点越远离评估点,在这种情况下为5.84.应该注意带宽很小,所以首先想到的是带宽内没有点.然而,locpoly使用高斯核,因此所有点都具有严格的正权重.我的猜测是权重很小,但是舍入或浮点计算可能是个问题.我不知道如何解决这个问题.

如果我使用的是Windows 7和R 3.0,我会得到:
> locpoly(x,degree = 1)[['y']]
 [1]  0.3030137  0.6456624  0.9530586  1.1121106  0.8120947
 [6]  0.4441603  0.1425592 -0.3600028 -0.7840411 -1.0517612
[11] -1.2690134 -2.8078788

所以你的问题不存在.但是,如果我在Ubuntu 13.04(GNU / Linux 3.8.0-23-通用x86_64)上使用R 3.0,我会得到:

> locpoly(x,degree = 1)[['y']]

 [1]  0.3030137  0.6456624  0.9530586  1.1121106  0.8120947  0.4441603
 [7]  0.1425592 -0.3600028 -0.7840411 -1.0517612 -1.2690134        NaN

我尝试过试验,并且能够通过使用以下方式获得与Windows 7中的数字非常相似的数字:

> locpoly(round(x,3),round(y,degree = 1)[['y']]

 [1]  0.3032295  0.6459197  0.9533132  1.1121400  0.8118960  0.4437407
 [7]  0.1422658 -0.3604210 -0.7848982 -1.0531299 -1.2710219 -0.7269588

所以我希望能够解决你的第二个问题.

为了弄清楚为什么我能够通过Windows获得非NaN答案,而不是Ubuntu,我们可以查看http://cran.r-project.org/web/packages/KernSmooth/index.html并注意到:

MacOS X二进制文件:KernSmooth_2.23-10.tgz
Windows二进制文件:KernSmooth_2.23-11.zip

当然有两个不同的版本,但Windows二进制文件比MacOS X二进制文件更进一步.我检查了Ubuntu和Windows中的函数的源代码,它们看起来是一样的.但是,我确实发现这个Rounding differences on Windows vs Unix based system in sprintf显示unix和windows之间的舍入差异存在报告错误.虽然3年前曾被问过.所以我想说差异可能是操作系统或版本为KernSmooth(倾向于操作系统,因为其他人也遇到了这个问题)

猜你在找的Ubuntu相关文章