setwd('/home/mojmir/projects/muni/antropologie') source('procrustes_algo.R') data <- 'TODO' # vypiseme si vsechny sloupce print(names(data)) # (1) transformace dat # prediktory ID <- data$id 'TODO - priradte dalsi prediktory z dat ktere budeme potrebovat' # jmena landmarku (vyuzijeme pozdeji) x.landmark = 'TODO' y.landmark = 'TODO' # pocty pocet_landmarku = 'TODO' pocet_jedincu = 'TODO' pocet_opakovani = sum(ID == 1 & strana == 'L') pocet_mereni_strany = 'TODO' # vytvoreni pole s dimenzi pocet_jedincu x 2 x pocet_landmarku hand.lmks.array.1A = array(dim=c(pocet_landmarku, 2, pocet_jedincu)) hand.lmks.array.1A[,1,] = 'TODO' hand.lmks.array.1A[,2,] = 'TODO' # prejmenovani dimenzi dimnames(hand.lmks.array.1A)[[1]] <- paste ("L",1:pocet_landmarku , sep ="") dimnames(hand.lmks.array.1A)[[2]] <- 'TODO' # (2) preskalovani jednotek # prepocet jednotek z pixelu na mm - 150 pixelu na 1 palec, 1 palec = 25.4mm skala = 'TODO' hand.lmks.array.1A = hand.lmks.array.1A * skala # TODO: vypiste si hand.lmks.array.1A[,1,1] a zkontrolujte ze hodnoty davaji smysl! # (3) krabicove diagramy centroidove velikosti # centroidova velikost (funkce cs je uz naprogramovana za vas) CS.1A = apply(hand.lmks.array.1A, 'TODO', cs) # vuci interakci strane a pohlavi boxplot(CS.1A ~ strana : pohlavi, ylab='centroidova velikost', notch=TRUE) points(tapply(CS.1A, strana : pohlavi, mean), pch=16, cex=2) # krabicovy diagram centroidove velikosti vuci pohlavi (s aritmetickymi prumery) 'TODO' # vuci strane 'TODO' # (4) nakreslete PSC a PMS do jednoho obrazku # procrustova optimalni transformace PSC.1A = 'TODO' PMS.1A = 'TODO' # nastevani okraju grafu par(mar=c(5,5,1,1)) # prvni graf "naprazdno" (type="n") abychom si ho pripravili plot(PSC.1A[,1,], PSC.1A[,2,], type= "n", pch=1, asp=1, xlab= "x - PSC ", ylab= "y - PSC ") # pridavani PSC do grafu for(i in 1:n1A){ points('TODO', pch=16, cex=0.5) } # pridani PMS 'TODO' # (5) zobrazeni pro prvniho jedince kod.1L <- ID == 1 & strana =="L" kod.1R <- 'TODO' n1L <- sum(kod.1L) # pocet mereni leve ruky prvniho jedince PMS.1L <- 'TODO' # pro vyber mereni pouzijte PSC.1A[,,kod.1R] PMS.1R <- 'TODO' # priprava grafu par(mfcol = c(1,2) , mar = c(5,5,1,1) ) # graf "naprazdno" plot(PSC.1A[,1,] , PSC.1A[,2 ,] , type ="n", pch=1, asp =1, xlab ="x - PSC", ylab ="y - PSC", sub ="ID -1, L", font.sub =2) # vykresleni vsech mereni leve ruky prvniho jedince for(i in 1: n1L ) points(PSC.1A[,1, kod.1L ] , PSC.1A[,2 , kod.1L ] , pch=1) # PMS leve ruky prvniho jedince (PMS.1L) points('TODO' , pch =16 , col ="red", cex=0.8) # PMS vsech dohromady (PMS.1A) 'TODO' # to stejne pro pravou ruku 'TODO' # (6) 'TODO' # (7) Deformace PMS prvniho jedince source('tps.R') # presvedcte se, ze mate soubor stazeny z ISu # prvni graf - deformace jeho PMS na PMS jeho leve ruky PMS.1 = apply(PSC.1A[,,ID == 1] , c(1,2) , mean ) VZOR = PMS.1 OBRAZ = PMS.1L par(mfrow=c(2,4), oma=c(0,0,0,0), mar=c(0,0,0,0) + 0.1) TPSsiet(VZOR, OBRAZ, 20) points(OBRAZ, pch= 16) # dalsi tri grafy - deformace jeho PSC pro vsechny 3 opakovani na jeho PMS leve ruky for(i in c(1,2,3)){ VZOR = 'TODO - vyberte i-te opakovani 1.jedince jeho leve ruky' OBRAZ = 'TODO' 'TODO - vykresleni site a PSC bodu' } # to stejne pro pravou ruku 'TODO' # (8) Zobrazte deformaciu PMS 1L na PMS 1R prveho jedinca VZOR <- 'TODO' OBRAZ <- 'TODO' # priprava na vykresleni 4 grafu v jednom radku par(mfrow=c(1,4), oma=c(0,0,0,0), mar=c(0,0,0,0) +0.1) 'TODO - sit a body pro VZOR a OBRAZ' for(magn in c(0.6,1,1.4)) { OBRAZmagn <- 'TODO - zvetseni rozdilu mezi obrazem a vzorem o magn-krat' TPSsiet(VZOR, OBRAZmagn, 20) points(OBRAZmagn, pch= 16) } # (9) Zobrazte deformaciu PMS 1L na PMS 1R pro vsechny jedince par(mfrow=c(1,4), oma= c(0,0,0,0), mar= c(0,0,0,0) +0.1) # PMS leve a prave ruky pro vsechny jedince PMS.1AL <- 'TODO' PMS.1AR <- 'TODO' ## Zobrazte deformaciu PMS L na PMS R VZOR <- PMS.1AL OBRAZ <- PMS.1AR # zobraze deformaci se zvetsenima o 1x, 8x a 16x (stejne jako v (8)) # (10) Vypocitejte uhel ktery svira spojnice landmarku 2 a 11 s osou y par(mfrow= c(1,2), oma= c(0,0,0,0), mar= c(0,0,0,0) +0.1) # vykresleni nerotovane site VZOR <- PMS.1AL OBRAZ <- PMS.1AR 'TODO - vykresleni TPS site a bodu' # vykresleni spojnice lines(VZOR[c(2,11),], lty=1, col= "gray", lwd=2) # funkce, ktera vypocita uhel mezi dvema vektory uhol.2D <- function(v1, v2) { 'TODO - vzpomente si na skalarni soucin' } P2 <- VZOR[2,] P11 <- VZOR[11,] # vypocet uhlu ktery svira spojice 2 a 11 s y (vektor (0,1)) uhol <- uhol.2D('TODO', c(0,1)) # rotace vsech body pomoci matice rotace GAMA <- matrix(c(cos(uhol),- sin(uhol), sin(uhol), cos(uhol)),2,2) VZORrot <- VZOR %*% GAMA OBRAZrot <- OBRAZ %*% GAMA # vykresleni rotovane site TPSsiet(VZORrot, OBRAZrot, 20) lines(VZORrot[c(2,11),], lty=1, col= "gray", lwd=2) points(OBRAZrot, pch= 16) # (11) Zobrazte PSC a PMS tak, aby spojnice landmarku 2 a 11 byla rovnobezna s osou y par(mfcol= c(1,2), mar= c(5,5,1,1)) # vykresleni nerotovane PSC & PMS plot(PSC.1A[,1,], PSC.1A[,2,], type= "n", pch=1, asp=1, xlab= "x - PSC", ylab= "y - PSC") 'TODO - vykresleni spojnice' for(i in 1:pocet_jedincu){ 'TODO - PSC pro i-teho jedince, pouzijte pch=16 a cex=0.5' } 'TODO - vykresleni PMS' # rotace vsech bodu PSC PSC.1Arot <- PSC.1A for(i in 1:pocet_jedincu){ PSC.1Arot[,, i] <- 'TODO - orotujte body i-teho jedince z PSC.1A' } PMS.1Arot <- 'TODO - rotace PMS' # vykresleni rotovane PSC & PMS 'TODO - stejne jako pro nerotovanou, akorat musite pouzit rotovane body' # (12) Zrcadleni ZRKADLO <- diag(2) ZRKADLO[1,1] <- -1 VZORzrk <- VZORrot %*% ZRKADLO 'TODO - vyzkousejte prikaz `c(1,0) %*% ZRKADLO`, co jste prave udelali?' par(mfrow=c(1,3), oma=c(0,0,0,0), mar=c(4,0,0,0) +0.1) # rotovane body PMS L plot(VZORrot[,1], VZORrot[,2], type="n", bty="n", axes=FALSE, asp=1, xlab="", ylab="") text(VZORrot[,1], VZORrot[,2], labels=1:12) title(xlab="PMS L", font.lab=2) # rotovane a ZRCADLENE body PMS pseudo-L 'TODO' 'TODO - TPS sit s body' title(xlab="TPS model; PMS L na PMS pseudo - L", font.lab=2) PMS.1ALrot <- 'TODO - rotace PMS.1AL o GAMA' PSC.1ALrot <- PSC.1Arot[,, strana=="L"] # zrcadlene PSC PSC.1ALzrk <- array(dim=dim(PSC.1ALrot)) for(i in 1:pocet_mereni_strany){ PSC.1ALzrk[,,i] <- 'TODO - zrcadleny i-ty clovek z PSC.1ALrot' } PMS.1ALzrk <- 'TODO' # Zobrazte vsetky PSC a ich PMS 'TODO'