Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 这是因为浮点错误吗?_R_Debugging_Floating Point_Statistics_Probability - Fatal编程技术网

R 这是因为浮点错误吗?

R 这是因为浮点错误吗?,r,debugging,floating-point,statistics,probability,R,Debugging,Floating Point,Statistics,Probability,我不明白如何解决这个问题G是一组值,我知道其范围为[0,1e+12] > G = c(500,10000, 5001, 103, 10, 10000) > H = density(G) > sum(diff(H$x)*H$y) # Area under the curve should be 1 [1] 0.999989 然而,为了能够比较两个数据集,我想为密度函数提供from和to,以便比较这些分布是有意义的。因此,我这样做: > H = density(G, fr

我不明白如何解决这个问题
G
是一组值,我知道其范围为
[0,1e+12]

> G = c(500,10000, 5001, 103, 10, 10000)
> H = density(G)
> sum(diff(H$x)*H$y) # Area under the curve should be 1

[1] 0.999989
然而,为了能够比较两个数据集,我想为
密度
函数提供
from
to
,以便比较这些分布是有意义的。因此,我这样做:

> H = density(G, from=0, to=1e+12)
> sum(diff(H$x)*H$y)

[1] 2576.354

Warning message:
In diff(H$x) * H$y :
  longer object length is not a multiple of shorter object length
当我打印估计密度时,原因变得显而易见:

[1] 1.315415e-04 1.102126e-07 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 9.471181e-26
  [8] 1.565915e-22 2.563577e-26 4.272754e-23 0.000000e+00 0.000000e+00 8.951887e-26 1.516549e-22
 [15] 3.870985e-25 6.612221e-22 0.000000e+00 0.000000e+00 1.275922e-25 2.216194e-22 0.000000e+00
 [22] 0.000000e+00 5.567175e-26 9.835567e-23 0.000000e+00 0.000000e+00 1.866999e-25 3.355962e-22
 [29] 1.544394e-25 2.800493e-22 6.026824e-26 1.102559e-22 0.000000e+00 0.000000e+00 0.000000e+00
....
....
[484] 2.430850e-22 1.346442e-25 0.000000e+00 0.000000e+00 1.135491e-22 6.399622e-26 0.000000e+00
[491] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[498] 8.914726e-23 5.240562e-26 2.189813e-22 1.297914e-25 4.773404e-22 2.852380e-25 3.289275e-22
[505] 1.981486e-25 1.382136e-23 8.393153e-27 8.090789e-24 4.952458e-27 3.042214e-24 1.876931e-27
[512] 1.809917e-22

虽然R正确地估计了密度在极值点处为0,但有些是非零的。这是我面临的浮点错误,还是我做了一些根本错误的事情?有什么建议吗?

来吧。您未能再现警告消息。我怀疑这是造成差异的关键。
diff(x)
函数提供的向量比y短一个元素


R操作包括参数循环,因此第一个密度差元素将乘以最大的y元素

来吧。您未能再现警告消息。我怀疑这是造成差异的关键。
diff(x)
函数提供的向量比y短一个元素


R操作包括参数循环,因此第一个密度差元素将乘以最大的y元素

我不确定,但在
?密度
中,对参数
from,to
cut
的描述似乎不是一个很好的线索。看起来,通过设置超出数据限制的范围,您绕过了默认情况下密度
density
通常会做的事情,以确保(基本上)极端情况下密度为零。这是有道理的,这也是我最初的想法。然而,比较两个范围非常不同的分布似乎直觉上是错误的(如果我错了,请纠正我)。最初的建议来自@mbq在我发布的另一个问题中提出的:第一个箱子太宽,根本无法接近您的数据。作为补充,我最近注意到底部的zapsmall将可以合理假设为零的小数字推回0。我不确定,但是一个好的线索不是应该是对
中的参数
from,to
cut
的描述吗。看起来,通过设置超出数据限制的范围,您绕过了默认情况下密度
density
通常会做的事情,以确保(基本上)极端情况下密度为零。这是有道理的,这也是我最初的想法。然而,比较两个范围非常不同的分布似乎直觉上是错误的(如果我错了,请纠正我)。在我发布的另一个问题中,最初的建议来自@mbq:第一个箱子太宽了,根本无法接近您的数据。作为补充,我最近注意到底部的zapsmall将可以合理假设为零的小数字推回0。谢谢。我更新了我的问题以包含警告。我为不理解你的答案提前道歉,但你能详细说明这是如何导致曲线下面积急剧上升的吗?+1太好了!谢谢你的解释。有解决办法吗?公平地说,我接受这个答案,因为这是最接近为什么会发生这种情况的原因。请告诉我是否有办法解决此问题。为什么不:
sum(diff(H$x)*H$y[-length(H$y)])
sum(diff(H$x)*H$y[-1])
。我不确定哪一个最好。看来你的数据是高度扭曲的。明白。这是有道理的。谢谢您的时间。:)非常感谢。我更新了我的问题以包含警告。我为不理解你的答案提前道歉,但你能详细说明这是如何导致曲线下面积急剧上升的吗?+1太好了!谢谢你的解释。有解决办法吗?公平地说,我接受这个答案,因为这是最接近为什么会发生这种情况的原因。请告诉我是否有办法解决此问题。为什么不:
sum(diff(H$x)*H$y[-length(H$y)])
sum(diff(H$x)*H$y[-1])
。我不确定哪一个最好。看来你的数据是高度扭曲的。明白。这是有道理的。谢谢您的时间。:)