概念は、いくつかの実行可能コードによってきちんと説明できます。 (R
)では、良い擬似乱数ジェネレーターを使用して、10,000個のゼロと1のシーケンスを作成します。
set.seed(17)
x <- floor(runif(10000, min=0, max=2))
これはいくつかの基本的な乱数テストに合格します。 例えば、への平均を比較するt検定のp値を有する40.09を1/240.09私たちは0と1が等しく可能性があるという仮説を受け入れることができます%を、。
これらの数値から、5081番目の値から始まる連続する値のサブシーケンスを抽出します。1000
x0 <- x[1:1000 + 5080]
これらがランダムに見える場合、同じ乱数テストにも合格する必要があります。たとえば、平均が1/2かどうかをテストしてみましょう。
> t.test(x0-1/2)
One Sample t-test
data: x0 - 1/2
t = 2.6005, df = 999, p-value = 0.009445
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
0.01006167 0.07193833
sample estimates:
mean of x
0.041
低いp値(1%未満)が強く平均が有意であることを示唆している大きいより。実際、このサブシーケンスの累積合計には強い上昇傾向があります。1 / 2
> plot(cumsum(x0-1/2))
それはランダムな動作ではありません!
元のシーケンス(累積合計としてプロット)をこのサブシーケンスと比較すると、何が起こっているかがわかります。
長いシーケンスは、実際にはランダムウォークのように動作しますが、そうすべきですが、私が抽出した特定のサブシーケンスには、同じ長さのすべてのサブシーケンスの中で最も長い上向きの上昇が含まれています。「ランダムではない」動作を示すいくつかの他のサブシーケンスも抽出できたようです。たとえば、約20個が連続して表示されるを中心とするサブシーケンスなどです。9000
これらの簡単な分析が示しているように、シーケンスがランダムに見えることを「証明」することはできません。私たちにできることは、シーケンスがランダムではないという証拠を提供するために、ランダムなシーケンスに期待される動作から十分に逸脱しているかどうかをテストすることです。 これは、乱数テストのバッテリーです一連の乱数です。乱数シーケンスで発生する可能性が非常に低いパターンを探します。長い間、彼らは、真にランダムな数字のシーケンスはランダムに見えないという結論を下します:私たちはそれを拒否して、他のことを試みます。
しかし、長い目で見れば、私たち全員が死んでいるのと同じように、真の乱数ジェネレーターは1000桁のあらゆる可能なシーケンスを生成し、無限に何度も繰り返します。論理的な困惑から私たちを救うのは、そのような明らかな異常が発生するまで、非常に長い時間待たなければならないということです。