1

この問題を解決する方法がわかりません。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

ただし、2つのデータセットを比較できるようにするために、これらの分布を比較することが理にかなっているように、関数にfromとを提供したいと思います。したがって、私はこれを行いました:todensity

> 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と正しく推定していますが、ゼロ以外のものもあります。これは私が直面している浮動小数点エラーですか、それとも根本的に間違ったことをしていますか?助言がありますか?

4

1 に答える 1

1

さあ。警告メッセージの再現に失敗しました。それが食い違いの鍵だと思います。このdiff(x)関数は、yより1要素短いベクトルを提供します。

R演算には引数のリサイクルが含まれるため、最初の密度diff要素に最大のy要素が乗算されます。

于 2013-01-17T04:07:58.560 に答える