head <- 'TO-DO' # nacteni dat a uprava promenne sex na faktor # (1) pocet pozorovani, # odhad vektoru strednich hodnot (prumer) a variancnich matic # pro jednotliva pohlavi colMeans(head[head$sex == "f", 2:6]) # zeny cov((head[head$sex == "f", 2:6])) 'TO-DO' # pro muze # (2) orientacni overeni linearity vztahu mezi promennymi plot(head[head$sex == "f", 2:6]) 'TO-DO' # pro muze # (3) overeni predpokladu vicerozmerne normality MVN::mvn('TO-DO', subset = 'TO-DO', mvnTest = 'TO-DO', multivariatePlot = "qq")$multivariateNormality # (4) predpoklad shodnosti variancnich matic biotools::boxM('TO-DO', grouping = 'TO-DO') # (5) K otestovani hypotezy o shodnosti strednich hodnot vektoru # pro obe pohlavi pouzijeme Hotellinguv T2 test z knihovny ICSNP. library(ICSNP) HotellingsT2('TO-DO') # (6) model pro rozliseni zen a muzu # funkce lda z knihovny MASS library('MASS') head.lda <- lda(sex ~ body.H + head.L + head.W + bigo.W + bizyg.W, data = head) head.lda # Prior prob. - apriorni pravdepodobnosti (tj. odhadnute z puvodnich hodnot), # group means - vektory skupin. prumeru # coeff. of l.d. - koeficienty lin. diskriminacni fce # (7) predikce pohlavi fitted <- predict(head.lda) # To jak nas model rozhodl najdeme pod $class. Vypiseme si tedy vsechny udaje # do tabulky, kde radky budou predikce a sloupecky skutecne hodnoty tab <- table(fitted$class, head$sex) colnames(tab) <- c("skut. f", "skut. m") row.names(tab) <- c("pred. f", "pred. m") tab # Vypocitame podil spravne a mylne zarazenych pozorovani. # Spravne klasifikovana pozorovani jsou na hlavni diagonale nasi tabulky. # Secteme je a podelime souctem vsech pozorovani. sum(diag(tab))/sum(tab) # Nespravne klasifikovana pozorovani jsou mimo hl. diagonalu (tab[1,2] + tab[2,1])/sum(tab) # Tento podil nespravne zarazenych pozorovani muzeme porovnat s nahodnou # klasifikaci, kde bereme v potaz jen apriorni pravdepodobnosti. p <- head.lda$prior 2*p[1]*p[2] # Pozn. Pokud bychom uvazovali jen na zaklade apriornich pravdepodobnosti, # tj. na zaklade relativnich cetnosti skupin, tak procento SPRAVNE zarazenych # pozorovani by bylo: 1 - 2*p[1]*p[2] # (8) zarazeni novych pripadu predict(head.lda, newdata=list(body.H = c(1820, 1700), head.L = c(190, 185), head.W = c(165, 154), bigo.W = c(110, 99), bizyg.W = c(152, 130))) # pod $class najdeme, jak bylo pozorovani modelem zarazeno # v $posterior jsou potom jednotlive aposteriorni pravdepodobnosti # (9) vyber modelu pomoci dopredne krok. metody # funkce greedy.wilks z baliku klaR library('klaR') greedy.wilks(sex ~ body.H + head.L + head.W + bigo.W + bizyg.W, data = head) # pokud funkce vybere mene promennych, sestavime novy model a podivame se # na podil spravne zarazenych pozorovani 'TO-DO' # sestaveni modelu s promennymi vybranymi v predchozim kroku 'TO-DO' # klasifikacni tabulka a podil spravne zarazenych pozorovani pro novy model 'TO-DO' # samostatne zkuste vypracovat pr. 2 a take neresene priklady