IGD – cv. 05

Analýza hlavních komponent

S analýzou hlavních komponent (Principal Component Analysis, PCA) jste se již setkali nebo se setkáte v rámci přednášek z Dálkového průzkumu Země. Jedná se o jednu z nejdůležitějších úloh vícerozměrné statistiky. Tato metoda redukuje počet dimenzí mnohorozměrných dat a to tak, aby v nich bylo zachováno co možná nejvíce informací a zároveň se počet proměnných výrazně snížil (většinou na 2-3). Výhodou je použitelnost metody na jakýkoliv typ rozdělení a je tak obecně kdykoliv použitelná. V případě předmětu DPZ se setkáte s metodou PCA při redukci dat z vícepásmových snímků, např. z multispektrálních či dokonce z hyperspektrálních snímků. Jednotlivá pásma jsou mezi sebou často výrazně korelována. V případě použití více pásem určitě každé pásmo nepřináší 100% nových informací a v případě využití PCA je tak možné použít i méně nově vytvořených pásem, které budou obsahovat stále výrazné množství informací původního souboru. Původní korelované hodnoty jsou tak nahrazeny hlavními komponentami, které jsou párově nekorelované (ortogonální). Možným využitím této metody pro případy regresních modelů jsou případy, kdy je příliš mnoho nezávislých proměnných vzhledem k počtu záznamů nebo když jsou nezávislé proměnné vzájemně příliš korelované.

Matematické základy metody PCA jsou uvedeny v prezentaci Mgr. Michaely Tučkové z Univerzity Palackého v Olomouci, která zazněla na první letní škole GeoComputation v roce 2011 ve Vysokém Poli.

Jedním z problému metody PCA je ten, že je citlivá na jednotky měření. V případě PCA se pracuje s kovarianční nebo korelační maticí. Jak kovariance, tak korelace vyjadřují závislost mezi dvěma proměnnými. Rozdíl kovariance a korelačního koeficientu je použití měřítka. Hodnota korelačního koeficientu nezávisí na jednotkách, v nichž jsou dané dvě měřené proměnné vyjádřeny a vždy se pohybuje v intervalu <-1, 1>. Oproti tomu kovariance je závislá na jednotkách daných proměnných. Pokud tedy počítáme kovarianci mezi např. výškou v mm a váhou v gramech, tak bude vyšší než v případě výšky v cm a váhy v kg. Oproti tomu korelační koeficient zůstává stejný. Navíc proměnná s velkým rozptylem bude mít tendenci stávat se významnou částí hlavní komponenty (také rozptyl je ovlivněn použitými jednotkami).

Jak je uvedeno v prezentaci, tak PCA vychází z kovarianční či korelační matice. Použití kovariační je vhodné pro případy, kdy jsou jednotlivé proměnné uvedeny v podobném měřítku. Toto však bývá splněno jen zřídka a tak je potřeba využít korelační matici. Ve výsledku je to stejné, jako kdybychom pracovali s původními hodnotami, které jsme nejdříve standardizovali.

Zadání

V praktické části cvičení budeme pracovat s datovým souborem vybraných dat ze SLDB 2011 a voleb do poslanecké sněmovny pro okresy ČR. Data si načteme a provedeme základní explorační analýzu těchto dat.

  • Jaké jsou rozměry dané matice?
  • Posuďte variabilitu a centralitu proměnných.

Pro výpočet obou matic využijeme funkce cov(), resp. cor(). Pokud jsou vstupem do výpočtu vektory, je vypočten korelační koeficient a kovariance pro dané vektory. Pokud je vstupem matice, je výsledkem korelační nebo kovarianční matice. Může být specifikován typ korelačního koeficientu nebo kovariance a to argumentem method = c(“pearson”, “kendall”, “spearman”). Pokud není specifikováno jinak, používá se Pearsonův koeficient.

relDat<-dSLDB[, 3:18] # vybere jen kvantitativní ukazatele
covSLDB<-cov(relDat) # vypočte kovarianční matici do proměnné covSLDB
corSLDB<-cor(relDat) # vypočte korelační matici do proměnné corSLDB

Ve výsledcích obou matic jsou patrné značné rozdíly způsobené rozdílnou variabilitou jednotlivých ukazatelů. Posuďte rozdílnost pro vytvoření PCA z kovarianční a z korelační matice. Metoda PCA je součástí balíčku MVA, který si nainstalujte a spusťte. Příkaz pro vytvoření PCA je princomp().

PCAcovSLDB <- princomp(covmat = covSLDB) # výpočet PCA z kovarianční matice

summary(PCAcovSLDB, loadings=TRUE) # přehled výsledků, argument loadings udává také zapojení jednotlivých ukazatelů v komponentách

a pro korelační matici pak
PCAcorSLDB <- princomp(covmat = corSLDB)
summary(PCAcorSLDB, loadings=TRUE)

Všimněte si rozdílů prvních a dalších komponent. Komponenty z kovarianční matice jen postupují dle klesající variability jednotlivých ukazatelů. Proto je první komponenta tvořena hlavně ukazatelem s největší směrodatnou odchylkou. Další komponenty již nepřidávají příliš variability. Oproti tomu PCA z korelační matice vysvětluje první komponentou menší podíl variability (jen 37 %) a při použití prvních třech komponent je vysvětleno přes 70 % variability. Zastoupení jednotlivých ukazatelů v konponentách není tak dominující ve prospěch jednoho. Prázdné místa v tabulce Loadings nahrazují velice nízké hodnoty. Na základě tohoto příkladu je tedy zřejmé, že pokud data nejsou ve stejných jednotkách nebo mají velmi rozdílnou variabilitu, měla by se používat korelační matice a ne kovarianční. Jistotou může být také mezikrok, který data standardizuje, tím je funkce scale().

relDat <- scale(dSLDB[, 4:41], center=TRUE)

Kolik je tedy potřeba komponent pro další práci? Vždy se musí vzít v úvahu, kolik s kolika proměnnými chceme pracovat dále. Jde nám jednoznačně o snížení počtu proměnných, abychom v dalších zpracování pracovali s malým počtem. Zároveň se snažíme zachovat informaci o variabilitě původního souboru. Obě kritéria musíme vhodně vyvážit. V literatuře jsou uvedeny tato kritéria:

  • ponechme jen tolik komponent, aby dohromady pokryly 70-90% variability.
  • vylučme ty komponenty, jejichž vlastní čísla (eigenvalues) jsou menší než průměr. Vlastní čísla komponent je možné vypočítat funkcí eigen(corSLDB). Ta nám vrací vlastní čísla a vlastní vektory. My potřebujeme vypočítat průměr z vlastních čísel,tedy napíšeme eigen<-eigen(corSLDB)$values a z proměnné eigen vypočteme průměr.
  • V případě, že pracujeme s korelační maticí, tento průměr odpovídá hodnotě 1. Nicméně v literatuře je doporučováno, v případě použití korelační matice, brát jako hraniční hodnotu 0,7. V našem případě se jedná o 5 hodnot. Tedy dle tohoto kritéria bychom měli dále pracovat s pěti hlavními komponentami, které nám dohromady pokrývají více jak 95% variability.
  • Mohou pomoci také grafické nástroje – tzv. scree diagram nebo log-eigenvalue diagram.

Jednotlivá kritéria přináší různá doporučení a tak hlavním faktorem zůstává tučně vyznačený text v odstavci výše.

Hlavní komponenty je možné si představit jako shluk bodů v n-rozměrném prostoru. Konstrukcí hlavních komponent rotujeme souřadnicovým systémem tak, aby nové os procházely směrem největší variability bodů prostoru. Výsledné hlavní komponenty se můžeme pokusit pojmenovat podle převažujícího zastoupení jednotlivých ukazatelů. Nicméně dejme si pozor na fakt, že jednotlivé komponenty mohou být tvořeny různorodými ukazateli a zároveň jeden ukazatel může být zapojen do více komponent.

Pokud bychom jednotlivé vlastní čísla vydělili jejich součtem, získáme relativní podíl vysvětlené variability originálního datového souboru.

norm=sum(eigen)

eigen[1]/norm

eigen[2]/norm

Skutečné hodnoty jednotlivých hlavních komponent odpovídají lineární kombinaci vlastních vektorů (eigenvectors) a jednotlivých ukazatelů. Níže je ukázán postup pro výpočet prvních dvou hlavních komponent.

eigVector1<-eigen$vectors[,1]

eigVector2<-eigen$vectors[,2]

matrixData = data.matrix(relDat) # vytvoříme matici se vstupními daty

result1<-(matrixData%*%eigVector1) # matici vynásobíme vektorem vlastních čísel a získáme hodnoty první komponenty

result2<-(matrixData%*%eigVector2) # matici vynásobíme vektorem vlastních čísel a získáme hodnoty druhé komponenty

plot(result1, result2, xlab=”První komponenta”, ylab=”Druhá komponenta”) # výsledné dvě komponenty vyneseme v bodovém grafu

Data a kód pro video výše ke stažení zde.

Zpracování v IBM SPSS




Zadání pro samostatnou práci

  • Vytvořte si svůj vlastní soubor dat, který bude kombinovat data o volbách a sociodemografická data na úrovni obcí. Využijte k tomu data o volbách publikovaných zde. Vyberte si poslední prezidentské volby (Okrsková data – 27. 1. 2018 (2.kolo) nebo poslední volby do Poslanecké sněmovny (Okrsková data). Tabulku upravte – agregujte na úroveň obcí a vypočítejte % podíl hlasů z celkového počtu voličů pro politické strany a vyberte jen ty , které přesáhly 5 % hranici. V případě prezidentských voleb vypočtěte % podíl pro oba kandidáty z druhého kola. Vyberte si obce jen za určitý kraj (kromě Prahy).
    Tabulku dále doplňte o dalších alespoň 10 číselných atributů (relativní hodnoty) ze Sčítání lidu domů a bytů. Tato data naleznete na \\adelka-nas.vsb.cz\Public\Interpretace_geodat\SLDB2011. Tyto ukazatele by měly být pestré a pokrývat vhodně danou populaci (viz ukázková data). Vyzkoušejte a interpretujte PCA pro tento datový soubor. Vytvořte mapové výstupy pro první dvě komponenty.
  • Termín odevzdání: 31. 5. 2020

doc_icon Data pro vedené i samostatné cvičení

logolink

Cvičení je vytvořeno v rámci projektu Inovace bakalářských a magisterských studijních oborů na Hornicko-geologické fakultě VŠB-TUO pod číslem CZ.1.07/2.2.00/28.0308. Tento projekt je realizován za spoluúčasti EU.