By Michal Šára
Zde předvedu některé vícerozměrné statistické metody na zadaných demografických datech.Zaměřím se hlavně na výstupy a jejich pochopení a samozřejmě na různé grafické znázornění.
Zde budu pracovat s datovou maticí dat.matice1,která obsahuje proměnné:
## [1] "pocet_obci_celkem"
## [2] "obyvatelSS_celkem"
## [3] "obyvatelSS_zeny"
## [4] "prumerny_vek_celkem"
## [5] "prumerny_vek_muzi"
## [6] "prumerny_vek_zeny"
## [7] "pocet_snatku"
## [8] "snatky_prumvek_zenich"
## [9] "snatky_prumvek_nevesta"
## [10] "hruba_mira_snatecnosti"
## [11] "pocet_rozvodu"
## [12] "pocet_narozenych_celkem"
## [13] "pocet_narozenych_zive_celkem"
## [14] "pocet_narozenych_matka_svobodna"
## [15] "pocet_narozenych_matka_vdana"
## [16] "pocet_narozenych_matka_rozvedena"
## [17] "pocet_potratu"
## [18] "zemreli_celkem"
## [19] "zemreli_muzi_celkem"
## [20] "hruba_mira_umrtnosti"
## [21] "vnitrni_stehovani_pristehovali_2010"
## [22] "vnitrni_stehovani_saldo_2010"
## [23] "zahranicni_stehovani_pristehovali_2010"
## [24] "zahranicni_stehovani_saldo_2010"
Předvedu jak hierarchické tak i nehierarchické shlukování. V případě hierarchického shlukování se zaměřím pouze na aglomerativní metody. Abych se vyhnul problému s měrnými jednotkami u jednotlivých proměnných, budu jako asociační matici (proximity matrix) vzdáleností objektů používat matici druhých odmocnin mahalanobisových vzdáleností. Pro tyto účely jsem si napsal funkci Mah.Matrix.
Mah.Matrix <- function(dat.matice) {
n <- nrow(dat.matice)
covar <- cov(dat.matice)
inv.covar <- solve(covar)
sl.names <- rownames(dat.matice)
dat.matice <- as.matrix(dat.matice)
d <- matrix(0, nrow = n, ncol = n)
for (j in 1:n) {
for (i in 1:n) {
d[i, j] <- sqrt(mahalanobis(dat.matice[i, ], dat.matice[j, ], inv.covar,
inverted = TRUE))
}
}
colnames(d) <- sl.names
rownames(d) <- sl.names
return(d)
}
Zobrazím pouze první čtyři řádky a sloupce této matice.
## Benesov Beroun Kladno Kolin
## Benesov 0.000 5.849 7.944 5.414
## Beroun 5.849 0.000 7.278 6.736
## Kladno 7.944 7.278 0.000 7.443
## Kolin 5.414 6.736 7.443 0.000
Dendogram pro metodu nejbližšího souseda je vidět na následujícím obrázku
Dendogram pro Wardovu metodu je vidět na následujícím obrázku, kde jsem vybral 7 shluků
Pro zjištění “ideálního,, počtu shluků se dá využít tzv. banner plot, kde bílá plocha nalevo značí neshluklá data, zatímco bílé pruhy, které vnikají "hluboko,, do červené plochy naznačují vytvořené shluky. Pro Wardovu je banner plot na následujícím obrázku
Pro nehierarchickou shlukovou analýzu je nejvýznamnější matoda K-průměrů, jejíž cílem je nalézt takové skupiny v \( \mathbb{R}^{n} \), aby vnitroskupinová podobnost byla maximální a současně celkové sumy čtverců vzdáleností uvnitř skupin byly minimální.Stručně popíši algoritmus.
Existuje však modifikace této metody s názvem metoda \( X \)-průměrů. V této metodě se počet shluků počítá dynamicky a uživatel pouze zadává horní a dolní hranici pro \( K \).Algoritmus této metody je:
Pro metodu K-průměrů si zvolím nejprve \( K=7 \) podle Wardovy metody. Následující tabulka zobrazuje zařazení objektů (okresů) do příslušných shluků (1-7) společně s prvními 2 proměnnými.
## pocet_obci_celkem obyvatelSS_celkem fit1.cluster
## Benesov 114 94406 2
## Beroun 85 84524 6
## Kladno 100 159760 3
## Kolin 89 95450 2
## Kutna_Hora 88 74943 6
## Melnik 69 102250 2
## Mlada_Boleslav 120 122891 4
## Nymburk 87 92058 2
## Praha_vvchod 110 144196 3
## Praha_zapad 79 119071 4
## Pribram 121 112352 4
## Rakovnik 83 55293 1
## Ceske_Budejovice 109 187169 7
## Cesky_Krumlov 46 61626 1
## Jindrichuv_Hradec 106 93226 2
## Pisek 75 70591 6
## Prachatice 65 51529 1
## Strakonice 112 70714 6
## Tabor 110 103055 2
## Domazlice 85 60662 1
## Klatovy 94 88685 2
## Plzen_mesto 15 185513 7
## Plzen_jih 90 61522 1
## Plzen_sever 98 75094 6
## Rokycany 68 47225 1
## Tachov 51 53322 1
## Cheb 40 95359 2
## Karlovy_Vary 54 119424 4
## Sokolov 38 92836 2
## Decin 52 135316 4
## Chomutov 44 126688 4
## Litomerice 105 117946 4
## Louny 70 87334 2
## Most 26 117037 4
## Teplice 34 130033 4
## Usti_nad_Labem 23 121442 4
## Ceska_Lipa 57 104325 2
## Jablonec_nad_Nisou 34 90469 2
## Liberec 59 169999 3
## Semily 65 74690 6
## Hradec_Kralove 104 163148 3
## Jicin 111 79796 6
## Nachod 78 112327 4
## Rychnov_nad_Kneznou 80 79104 6
## Trutnov 75 119921 4
## Chrudim 108 104450 2
## Pardubice 112 167943 3
## Svitavy 116 105150 2
## Usti_nad_Orlici 115 139233 3
## Havlickuv_Brod 120 95757 2
## Jihlava 123 112605 4
## Pelhrimov 120 72951 6
## Trebic 167 113717 4
## Zdar_nad_Sazavou 174 119770 4
## Blansko 116 106750 2
## Brno_mesto 1 370951 5
## Brno_venkov 187 202078 7
## Breclav 63 113744 4
## Hodonin 82 156673 3
## Vyskov 80 88891 2
## Znojmo 144 113678 4
## Jesenik 24 41175 1
## Olomouc 96 231897 7
## Prostejov 97 110122 4
## Prerov 104 134072 4
## Sumperk 78 124395 4
## Kromeriz 79 107979 2
## Uherske_Hradiste 78 144298 3
## Vsetin 59 145425 3
## Zlin 89 192757 7
## Bruntal 67 97517 2
## Frydek_Mistek 72 211728 7
## Karvina 17 271305 7
## Novy_Jicin 53 152580 3
## Opava 77 177010 3
## Ostrava_mesto 13 334599 5
Když se však podíváme na daných 7 shluků (viz následující obrázek) zjistíme, že shluky nejsou disjunktní. V ideálním případě by totiž měly být disjunktní.
Po chvíli zkoušení (\( K=6,\,K=5,\,K=4 \)) jsem narazil na skoro disjunktí shluky pro \( K=5 \). Výsledek je na následujícím obrázku.