1 1 - Bodové a intervalové rozložení četností - OSNOVA Úvod • jde o tzv. pilotní analýzu • Motivace: Někdo nám poskytne data —y chceme se s nimi seznámit, pochopit jejich podstatu, nějak si je graficky znázornit a získat nad nimi nadhled • podle typu dat volíme různé způsoby reprezentace a vizualizace dat (jiné grafy používáme pro diskrétní data (známky, pohlaví, typ pracího prášku, apod.) a jiné pro spojitá data (výška a váha člověka, krevní tlak, přesný věk pacienta, apod.) • záleží také, zda zkoumáme pouze jednu vlastnost, nebo více vlastností najednou • Podle toho, jaká data máme, používáme buď jednorozměrné/vícerozměrné bodové nebo intervalové rozdělení četností Jednorozměrné bodové rozdělení četností Příklad 1.1. Načtěte soubor znamky.txt. Znakům X, Y, Z vytvořte návěští (X - známka z matematiky, Y - známka z angličtiny, Z - pohlaví studenta). Popište, co znamenají jednotlivé varianty (u znaků X a Y: 1 - výborně, 2 - chvalitebně, 3 - dobře, 4 - neprospěl, u znaku Z: 0 - žena, 1 - muž). data <- read.delim('známky.txt', sep='', dec='') ## VI V2 V3 ##1220 ##2131 ##3431 ##4110 ##5121 ## 6 4 4 1 • Popis tabulky: — Dvaceti žáků jsme se zeptali, jakou dostali na konci roku známku z matematiky (1.sloupec) a z angličtiny (2.sloupec) a zaznamenali jsme si jejich pohlaví (3.sloupec) — v každém jednom řádku jsou informace o jednom konkrétním žákovi — žák ... objekt našeho zkoumání — známka z matematiky/angličtiny a pohlaví ... znaky každého objektu (žáka) — znaku můžeme přiřadit konkrétní číslo, které má samo o sobě výpovědní hodnotu (známka z předmětu), nebo jde o kódování jisté vlastnosti: např. 0-žena, 1-muž * znak pohlaví je příklad kódování 0 = ženy, 1 = muži * 1 - výborně, 2 - chvalitebně, 3 - dobře, 4 - neprospěl — známky 1 - výborně, 2 - chvalitebně, 3 - dobře, 4 - neprospěl ... varianty znaku známka 1 data <- read.table('známky.txt', sep='\t', dec='.') head(data) fl <- factor(data$matematika, levels = c(1,2 , 3 ,4) , labels=c('výborne','chvalitebné','dobre','nedostatečné')) f2 <- factor(data$anglictina, levels = c (1 , 2 , 3 ,4) , labels=c('vyborne','chvalitebné','dobre','nedostatečné')) f3 <- factor(data$pohlavi , levels = c(0 , 1) , labels = c('zena' , 'muz')) data2 <- data.frame(f1, f2, f3) names(data2) = c('matematika','angličtina','pohlavi') head(data2) Příklad 1.2. Vytvořte a) variační řadu známek z matematiky a angličtiny; b) sloupkový diagram absolutních četností znaků X=Matematika a Y=Angličtina; c) polygon absolutních četností znaků X=Matematika a Y=Angličtina. • pro každou variantu můžeme stanovit její — absolutní četnost rij * kolik žáků mělo známku 2 — relativní četnost pj * poměr žáků, kteří měli z matiky 2 ku celkovému počtu žáků * Pj * 100 - kolik % žáků mělo známku 2 — absolutní kumulativní četnost Nj * kolik žáků mělo známku < 2 — relativní kumulativní četnost Fj * poměr žáků, kteří měli známku z matiky < 2 vzhledem k celkovému počtu žáků * Fj * 100 - kolik % žáků mělo známku < 2 — všechny výše zmíněné četnosti můžeme zapsat do přehledné tabulky ... variační řady • teď si naprogramujeme — variační řadu pro známky z matematiky matematika <- data2$matematika nl <- sum(matematika=='výborne') n2 <- sum(matematika=='chvalitebné') n3 <- sum(matematika=='dobre') n4 <- sum(matematika=='nedostatečné') nj <- c (nl , n2 , n3 , n4) n <- sum(nj) pj <- nj/n Nj <- cumsum(nj) Fj <- cumsum(pj) variacni.rada <- data.frame(nj=nj, Nj=Nj, pj=pj, Fj=Fj) 2 row.names(variační.rada) <- c('vyborne', 'chvalitebné', 'dobre', ' nedostatečné ' ) variacni.rada (VR.Mat <- variacni_rada(X=matematika, názvy=c('výborne', 'chvalitebné', 'dobre', ' nedostatečné') — Sloupkový diagram názvy.známek <- c('výborne', 'chvalitebné', 'dobre', 'nedostatečné') # Matematika barplot(VR.Mat$nj, col='white', border='white', axes=T, xlab='Známka', ylab='Pocetupozorovani', names=nazvy.známek, main='Sloupkovyudiagramuproupredmetumatematika') abline(h=0:9, col='grey80', lty=2) barplot(VR.Mat$nj, col='blue', axes=F, density=20, border='darkblue', add=T) — Polygon četností plot (1:4, VR.Mat$nj, type='n', xlim = c(0.5,4.5) , ylim = c(l,9), xlab='Známka',ylab='Absolutniucetnost', main='Polygonucetnostiuproupredmetumatematika', axes=F) abline(h=0:9, col='grey80', lty=2) abline(v=0:9, col='grey80', lty=2) lines(l:4, VR.Mat$nj, col='darkblue', lwd=2 ) points(l:4, VR.Mat$nj,col='darkblue',pch=20, cex=1.2) axis(l, at=0:5, lab=c('',názvy.známek,'')) axis(2, at=0:10) Příklad 1.3. Vytvořte variační řady známek z matematiky a angličtiny pouze a) pro ženy, pohlavi<-data2$pohlavi variacni_rada(X=matematika[pohlavi=='zena'], nazvy=nazvy.známek) b) pro muže. Dvourozměrné bodové rozložení četností Příklad 1.4. Nadále budeme pracovat s celým datovým souborem. Vytvoříme kontingenční tabulku simultánních absolutních četností znaků X=Matematika a Y=Angličtina. • vezměme si nyní z datové tabulky známky z matematiky (znak X) a z angličtiny (znak Y) • dvourozměrný datový soubor; X ... 4 varianty; Y ... 4 varianty • pro každou dvojici variant (celkem 16 dvojic) můžeme stanovit — rijk ... simultánní absolutní četnost dvojice znaků xy] a y^] * njk = pocet(X = xy] a Y = yy]) 3 * počet studentů, kteří měli z matiky laz angličtiny 1, ... • ... marginální absolutní četnost varianty xy] — rij. = riji + • • • + rij4 — počet studentů, kteří měli z matiky 1 bez ohledu na to, co měli z angličtiny • n.k ... marginální absolutní četnost varianty y\k\ — n.k = nit H-----h nAk — počet studentů, kteří měli z angličtiny 1 bez ohledu na to, co měli z matematiky K.Tab <- table(matematika, angličtina) K.Tab2 <- cbind(K.Tab, suma=apply(K.Tab, 1, sum)) (K.Tab3 <- rbind(K.Tab2, suma=apply(K.Tab2, 2, sum))) Příklad 1.5. Vytvořte kontingenční tabulku řádkově a sloupcově podmíněných relativních četností znaků X=Matematika a Y=Angličtina. • Pk(j) ■ ■ ■ řádkově podmíněná relativní četnost varianty y^] za předpokladu xy] nik — PkQ) = ~ — poměr počtu studentů, kteří měli z matiky laz angličtiny 1 vzhledem k počtu studentů, kteří měli z matiky 1 • Pj(k) ■ ■ ■ sloupcově podmíněná relativní četnost varianty xy] za předpokladu yyy\ — Pj(k) = — — poměr počtu studentů, kteří měli z matematiky laz angličtiny 1 vzhledem k počtu studentů, kteří měli z angličtiny 1 Tab <- table(matematika, angličtina) # Radkové podminene relativni četnosti round(prop.table(Tab, margin=l), digits=3) # Sloupcové podminene relativni četnosti round(prop.table(Tab, margin=2), digits=3) Intervalové rozdělení četností Práci s intervalovým rozložením četností si ukážeme na datovém souboru lebky.txt. Popis datového souboru: Máme k dispozici údaje o rozměrech lebek staroegyptské populace. Jedná se o 216 mužů a 109 žen. Znak X ... největší délka mozkovny v mm Znak Y ... největší šířka mozkovny v mm Znak Z .. .pohlaví osoby (1-muž, 0-žena) Příklad 1.6. Načtěte soubor lebky.txt. Podle Sturgersova pravidla najděte optimální počet třídicích intervalů pro znaky X a Y a vhodně stanovte meze třídicích intervalů, a to zvlášť pro muže a zvlášť pro ženy. 4 • spojitá data —y třídíme je do intervalů (oo; u\) , (ui; U2), • • •, (ur; ur+i), (ur+i, 00) • (uj] Uj+i) .. -j-tý třídicí interval • třídicí intervalu vyvolíme stejně dlouhé • Sturgesovo pravidlo r 1 + 3.3 log10 n data <- read.delim('lebky.txt', sep='\t', dec='.', header=F) names(data) <- c('delka', 'sirka', 'pohlaví') head(data) # Muzi data.M <- data[data$pohlavi=='muz' , ] n.M <- dim(data.M) [1] (Sturges.M <- round(1+3.3*logl0(n.M), digits=0)) délka.M <- data.M$delka range(délka.M) max(délka.M) - min(delka.M) round((max(délka.M) - min(délka.M))/Sturges.M, digits=0) Příklad 1.7. Vytvořte histogram pro X a pro Y (s uvedenými absolutními a relativními četnostmi jednotlivých třídicích intervalů), a to zvlášť pro muže a zvlášť pro ženy. hist(délka.M, breaks = seq(163, 199, by=4) , ylim = c(0 , 52) , main='Histogram', xlab='Delkaulebky', ylab='Početnosti', col='white', border='white', density=20, axes=F) abline(h=seq( 0, 60, by=10), col='grey80', lty=2) hist(délka.M, breaks=seq(163, 199, by=4), col='blue', border='darkblue', density=20, add=T) axis(l, at=seq(163, 199, by=4)) axis(2, at=seq( 0, 50, by=10)) abs.c <- hist(délka.M, breaks=seq(163, 199, by=4), plot=F)$counts střed <- hist(délka.M, breaks=seq(163, 199, by=4), plot=F)$mids rel.c <- round(abs.c/sum(abs.c)*100, 0) četnosti <- paste (abs . c , '',u', rel . c , ' 7«' , sep='') text(stred, abs.c+2, četnosti, cex=0.8) 5