# nastaveni spravneho pracovniho adresare, ve kterem mate `data` # Muzete kliknout na `Session -> Set Working Directory - Choose directory` a vybrat slozku s daty. Z konzole # potom zkopirujte `setwd(...)` prikaz nize na zacatek souboru. setwd('TODO') # (1) Euklidovske vzdalenosti # nacteni dat do dataframe data = read.table('data-3d-base-xyz.txt', header=T) # vypsani prvnich 5 radku head(data) # vypsani poslednich 5 radku 'TODO' # vypsani nazvu sloupcu names(data) # vytahneme si x, y, z souradnice landmarku POdx = data[,c('x.POdx', 'y.POdx', 'z.POdx')] POsin = 'TODO' BA = 'TODO' head(POdx) # prevedeme dataframe na matice pro jednodusi praci POdx = as.matrix(POdx) POsin = 'TODO' BA = 'TODO' # rozdily souradnic BA.POdx.diff = 'TODO' BA.POsin.diff = 'TODO' POdx.POsin.diff = 'TODO' # funkce pro euklidovskou vzdalenost euclid.vzdalenost = function(d){ # d je rozdil dvou vektoru, funkce spocita jejich vzdalenost dist = 'TODO' return(dist) } # vyzkousime funkci na prvnim bodu # TODO: zkontrolujte, ze vzdalenost BA a POdx je biologicky mozna euclid.vzdalenost(BA.POdx.diff[1,]) # pro pouziti na vsechny radky pouzijeme funkci apply podel dimenze TODO dist.podx.ba = apply(BA.POdx.diff, 'TODO', euclid.vzdalenost) dist.posin.ba = 'TODO' dist.podx.posin = 'TODO' # podle zadani se ma vzdalenost jmenovat base.B base.B = dist.podx.posin # (2) Prumerne delky stran a smerodatne odchylky... dist.podx.ba.zeny = dist.podx.ba[data$sex == 'F'] cat('Prumerna vzdalenost POdx - BA pro zeny: ', mean(dist.podx.ba.zeny), 'mm', '\n') cat('Smerodatna odchylka POdx - BA pro zeny: ', 'TODO', 'mm', '\n') 'TODO - dalsi vzdalenosti + pro muze' # alternativni reseni tapply(dist.podx.ba, data$sex, mean) # (3) Vypocitejte vnitrni uhly trojuhelniku... uhol.cos.veta = function(a, b, c){ # TODO } rad.na.stupne = function(rad){ # TODO } stupne.na.rad = # TODO # vyzkouseni funkci: # pi rad = 180 stupnu print(rad.na.stupne(2*pi)) # 360 stupnu = 2*pi rad (=6.283185) print(stupne.na.rad(360)) # kontrola, ze vase funkce funguji spravne stopifnot(round(rad.na.stupne(stupne.na.rad(100))) == 100) uhel.rad.ba = uhol.cos.veta('TODO') 'TODO' 'TODO' # ze zadani base.A = rad.na.stupne(uhel.rad.ba) # kontrola, ze uhel je biologicky realny (uhel u BA je vetsi nez 130 stupnu) stopifnot(all(ba.stupne > 130)) # (4) Nakreslete histogram hodnot z uhlu na kruznici... library(circular) # nejdrive nakreslime pouze uhel BA x = circular('TODO', type="angles", units="radians", template="none", rotation="counter") rose.diag(x, col='TODO', prop=2, shrink=1.5) lines(density.circular(x, bw=7.5)) # nakreslime vsechny tri vedle sebe par(mar=c(0,0,0,0), mfcol=c(1,3)) 'TODO' 'TODO' 'TODO' # (5.1) Vypocitejte vysku lebecni baze base.H 'TODO' # (5.2) Vypocitejte vysku lebky skull.H 'TODO' skull.H = 'TODO' # (6) Linearne-uhlovy korelacni koeficient skull.H a base.A r.lin.uhl = function(x, y){ # linearne-uhlovy Pearsonuv korelacni koeficient rxc = cor(x, cos(y)) rxs = cor(x, sin(y)) rsc = cor(cos(y), sin(y)) r = sqrt((rxc^2 + rxs^2 - 2*rxc*rxs*rsc) / (1 - rsc^2)) return(r) } base.A.rad = stupne.na.rad(base.A) r.skull.base = r.lin.uhl(skull.H, base.A.rad) stopifnot(r.skull.base > 0.6) r.skull.base.zeny = r.lin.uhl('TODO') cat('Lin-uhl korelacni koeficient pro zeny:', r.skull.base.zeny) 'TODO pro muze' # (A) plot(skull.H[data$sex == 'M'], cos(base.A.rad[data$sex == 'M']), pch=16, xlab='TODO', ylab='TODO', xlim=c(115, 150), ylim=c(-0.95, -0.65)) points(skull.H[data$sex == 'F'], cos(base.A.rad[data$sex == 'F'])) legend('bottomright', legend = c("f", "m"), pch=c(16, 1)) # (B) # TODO pro sin