Vícerozměrná statistika v demografii

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í.

Shluková analýza (Cluster Analysis)

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

plot of chunk unnamed-chunk-6

Dendogram pro Wardovu metodu je vidět na následujícím obrázku, kde jsem vybral 7 shluků

plot of chunk unnamed-chunk-7

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

plot of chunk unnamed-chunk-8

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.

  1. Počáteční odhad K skupin (zadáno uživatelem).
  2. Výpočet centroidů pro aktuálních K skupin.
  3. Pokud objekt má nejblíže k vlastnímu centroidu, ponecháme ho na místě. Jinak jej přesuneme do shluku, k jehož centroidu má nejblíže.
  4. Centroidy se pro každkou z K skupin přepočítají.
  5. Kroky 3,4 se opakují dokud přesuny nezlepší kriteria.

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:

  1. Aplikace metody K-průměrů (uživatel zadá dolní hranici pro K).
  2. Každý centroid shluku (=rodičovský centroid) se rozdělí na dva centroidy (=dceřiné centroidy) podél náhodně zvoleného vektoru.
  3. Pro každou rodičovskouo oblast (pro každý pár dceřiných centroidů) se počíta lokální metoda K-průměrů.
  4. Srovnáním BIC pro model s dceřinými centroidy a model s rodičovským centroidem se rozhodne o výsledné struktuře.
  5. Buď je zachován rodičovský centroid nebo je nahrazen dceřinými centroidy.
  6. Algoritmus končí při dosažení \( K\leq K_{MAX} \) (horní hranice daná uživatelem).

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í.

plot of chunk unnamed-chunk-10

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.

plot of chunk unnamed-chunk-11

Metoda hlavních komponent (Principal Component Analysis)