0

私はパッケージを R から IML に翻訳していますが、これは完成したらオンラインで無料になります :)。大きな行列を分解すると、異なる結果が得られます。どちらの結果も同じように見えますが、たとえば、U の最初の 2 列を取り出して U'*U を実行すると、2x2 行列はまったく異なります ( U_11 = 1.1e-17 および U_11 =1.4e-17)。違いは非常に小さい (3e-18) ため、各ソフトウェア、SAS IML および R が使用する小数点以下の桁数に関連している可能性があると思いました。このトピックについてもっと知っている人はいますか? どうすればこれをテストできますか? ありがとうございました。

4

1 に答える 1

1

統計では、非常に小さな違いを「統計的に有意ではない」と表現します。数値アナリストにとって、"マシン イプシロン" (R の .Machine$double.eps または SAS の定数("maceps")) よりも小さい差は、ほとんどの場合、"数値的に意味がない" ものです。

SAS と R はどちらも倍精度計算を使用しており、おそらく同様の数値ライブラリを呼び出しています。わずかな違いの場合、その理由はアルゴリズムによるものではなく、各ソフトウェアが使用するコンパイラ フラグと最適化フラグが異なるためだと推測できます。

1 つの製品内であっても、2 つの異なる順序で結果を計算すると、このような小さな違いが生じることがあります。たとえば、次の DATA ステップを実行します。

data _null_;
x = (1 + 1 + 1 + 1 + 1 + 1 + 1) / 7;
y = (1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7);
diff = x - y;
put diff=;
run;

異なるソフトウェアを比較するときは、「数値的に重要でない」結果を無視することをお勧めします。浮動小数点計算の詳細については、The Floating Point Guideを参照してください。本当の核心については、「すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと」を参照してください。

于 2015-06-30T10:25:58.013 に答える