Data a parametry
Reprezentant - Bogdan Buliakov
Parametry úlohy byly spočtěny následovně:
K = den narození reprezentanta skupiny - 23 L = počet písmen v příjmení reprezentanta - 8 (BULIAKOV)
Podle uvedeného vzorce jsme definovali datový soubor č. 1, jako soubor 013.txt a datový soubor č. 2, jako 014.txt
X = 13
Y = 14
Nastavení
Funkce read_text_from_file se používá ke čtení textu ze souboru
Funkce abs_freq se používá ke výpočtu absolutní četnosti jednotlivých znaků
Funkce draw_abs_freq se používá ke grafickému znázornění absolutní četnosti jednotlivých znaků
Z obou datových souborů načteme texty k analýze. Pro každý text zvlášť zjistime absolutní četnosti jednotlivých znaků (symbolů včetně mezery), které se v textech vyskytují pomocí výše popsaných funkcí.
Výsledky pro první text
Text 1: soubor 13
Absolutní četnosti jednotlivých znaků (symbolů včetně mezery)
' ': 1359
'a': 513
'b': 83
'c': 180
'd': 256
'e': 819
'f': 154
'g': 113
'h': 323
'i': 471
'j': 10
'k': 20
'l': 225
'm': 195
'n': 433
'o': 420
'p': 108
'q': 9
'r': 371
's': 387
't': 516
'u': 150
'v': 92
'w': 110
'x': 11
'y': 157
'z': 4
Výsledky pro druhý text
Text 2: soubor 14
Absolutní četnosti jednotlivých znaků (symbolů včetně mezery)
' ': 1139
'a': 424
'b': 78
'c': 121
'd': 236
'e': 652
'f': 134
'g': 98
'h': 337
'i': 328
'j': 7
'k': 35
'l': 170
'm': 113
'n': 356
'o': 386
'p': 76
'q': 4
'r': 335
's': 334
't': 476
'u': 133
'v': 50
'w': 125
'x': 4
'y': 92
'z': 2
1. Za předpokladu výše odhadněte matici přechodu markovského řetězce pro první text. Pro odhad matice přechodu vizte přednášku 17. Odhadnuté pravděpodobnosti přechodu vhodně graficky znázorněte, např. použitím heatmapy.
Funkce calc_transition_matrix se používá k odhadu matice přechodu markovského řetězce pro první text. Jestli předpokládejme, že první text je vygenerován z homogenního markovského řetězce s diskrétním časem, tak budeme odhadovat matice přechodu pomocí četností přechodů (Přednáška 17):
Poprve vytvoříme nulovou matici P_matice s rozměry [self.alphabet_len] x [self.alphabet_len] (self.alphabet_len - tato proměnná představuje počet unikátních písmen (znaků) v daném textu, které byly vypočtena ve funkci abs_freq)
Pak vytvoříme slovník letters_dict, který přiřazuje každému písmenu v abecedě číslo od 0 do [self.alphabet_len] - 1.
Potom je krok s procházením textu a aktualizováním hodnot v P_Matice na základě počtu přechodů z jednoho písmena na druhé.
Na konci je normalizace hodnot v P_matice tak, aby součet hodnot v každém řádku byl roven 1.
Funkce draw_transition_matrix se používá ke grafickému znázornění odhadnuté pravděpodobnosti přechodu, použitím heatmapy.
Odhadneme matici přechodu markovského řetězce pro první text a odhadnuté pravděpodobnosti přechodu vhodně graficky znázorneme pomocí výše popsaných funkcí.
Součet v každem řádku pro kontrolu:
2. Na základě matice z předchozího bodu najděte stacionární rozdělení 𝜋 tohoto řetězce pro první text.
Výsledky pro první text
Funkce stationary_distribution se používá ke výpočtu stacionárního rozdělení (Přednáška 14):
Stacionární rozdělení (𝜋), a zkouška (𝜋*P)
[[0.18148114 0.18148114]
[0.06850115 0.06850115]
[0.0110864 0.0110864 ]
[0.02404211 0.02404211]
[0.03419535 0.03419535]
[0.10936119 0.10936119]
[0.02056555 0.02056555]
[0.01509768 0.01509768]
[0.04309803 0.04309803]
[0.06289474 0.06289474]
[0.00133551 0.00133551]
[0.00267245 0.00267245]
[0.03005804 0.03005804]
[0.02604366 0.02604366]
[0.05784417 0.05784417]
[0.05607889 0.05607889]
[0.01442454 0.01442454]
[0.00120198 0.00120198]
[0.04955565 0.04955565]
[0.05168766 0.05168766]
[0.06878944 0.06878944]
[0.02002891 0.02002891]
[0.0122929 0.0122929 ]
[0.01468833 0.01468833]
[0.00146884 0.00146884]
[0.02097156 0.02097156]
[0.00053412 0.00053412]]
3. Porovnejte rozdělení znaků druhého textu se stacionárním rozdělením 𝜋 , tj. na hladině významnosti 5 % otestujte hypotézu, že rozdělení znaků druhého textu se rovná rozdělení 𝜋 z předchozího bodu.
Spočítáme testovou statistiku.
Testová statistika: 127.91679723545695
Dále, abychom otestovali hypotézu, musíme najít kritickou hodnotu. K tomu použijeme knihovnu scipy.stats k výpočtu kritické hodnoty pro test chí-kvadrát na hladině významnosti alfa = 0,05. Kritická hodnota se vypočítá pomocí funkce stats.chi2.ppf(). https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.chi2.html Tato funkce se používá k určení kritické hodnoty pro test chí-kvadrát na dané hladině významnosti (5%) a odpovídajících stupňů volnosti.
Počet stupňů volnosti: 25
Kritická hodnota: 37.65248413348277
Pokud Testová statistika = 127.917 a Kritická hodnota= 37.652
127.917> 37.652=>
Určení p-hodnoty testu
K určení p-hodnoty také použijeme knihovnu scipy.stats.
Najdeme p-hodnotu pomocí scipy.stats.chi2.sf - survival function (1 - cdf)
p-hodnota = 8.692973953159999e-16