Відповідаючи лише на перше ваше запитання: "Які тести ви застосували, щоб визначити, чи ця [послідовність] справді випадкова?"
Як щодо трактування цього як часового ряду та перевірки на автоматичні кореляції? Ось декілька код R. Спочатку кілька тестових даних (перші 1000 цифр):
digits_string="1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989"
digits=as.numeric(unlist(strsplit(digits_string,"")))
Перевірте кількість кожної цифри:
> table(digits)
digits
0 1 2 3 4 5 6 7 8 9
93 116 103 102 93 97 94 95 101 106
Потім перетворіть його на часовий ряд і запустіть тест Box-Pierce:
d=as.ts( digits )
Box.test(d)
яка мені говорить:
X-squared = 1.2449, df = 1, p-value = 0.2645
Зазвичай ви хочете, щоб значення p було менше 0,05, щоб сказати, що існують автоматичні кореляції.
Запустіть, acf(d)
щоб побачити автоматичні кореляції. Я не включив сюди зображення, оскільки це тьмяна діаграма, хоча цікаво, що найбільші відставання - це в 11 та 22. Побіжіть, acf(d,lag.max=40)
щоб показати, що пік відставання немає = 33, і що це був просто збіг!
PS Ми могли б порівняти, наскільки добре зробили ці 1000 цифр пі, зробивши ті ж тести на реальних випадкових числах.
probs=sapply(1:100,function(n){
digits=floor(runif(1000)*10)
bt=Box.test(ts(digits))
bt$p.value
})
Це генерує 1000 випадкових цифр, робить тест і повторює це 100 разів.
> summary(probs)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.006725 0.226800 0.469300 0.467100 0.709900 0.969900
> sd(probs)
[1] 0.2904346
Таким чином, наш результат був комфортно в межах першого стандартного відхилення, і pi тремтить, як випадкова качка. (Я використовував, set.seed(1)
якщо ви хочете відтворити ці точні числа.)