############# Zobrazení antropologických dat ###################
## BOX PLOT
DATA <- read.csv("06_data.csv", sep=";", header = TRUE)
attach(DATA)
str(DATA)

muzi <- DATA[Sex=="male",]
zeny <- DATA[Sex=="female",]

boxplot(zeny$Proportion, muzi$Proportion)
boxplot(Proportion ~ Sex, data=DATA)

boxplot(Proportion ~ Side*Sex, data=DATA)
boxplot(Proportion ~ Side:Sex, data=DATA)

# nastavime notch - zarez krabice kolem medianu
boxplot(Proportion ~ Side:Sex, data=DATA, notch = T)
# nastaveni barvy pro vsechny boxy
boxplot(Proportion ~ Side:Sex, data=DATA, notch = T, col = "greenyellow")
# nastaveni barvy pro jednotlive boxy
boxplot(Proportion ~ Side:Sex, data=DATA, notch = T, col = c(rep("tomato",2),rep("deepskyblue3",2)))
# muzeme graf vykreslit i horziontalne
boxplot(Proportion ~ Side:Sex, data=DATA, notch = T, col = c(rep("tomato",2),rep("deepskyblue3",2)), horizontal = TRUE)
# pokud chceme horizontalni graf, mely by byt vodorovne i popisky osy y
boxplot(Proportion ~ Side:Sex, data=DATA, notch = T, col = c(rep("tomato",2),rep("deepskyblue3",2)), horizontal = TRUE, las = 1)
# zaroven muzeme ovlivnit i napr. barvu boxu
boxplot(Proportion ~ Side:Sex, data=DATA, notch = T, col = c(rep("tomato",2),rep("deepskyblue3",2)), horizontal = TRUE, las = 1,
        border = c(rep("firebrick",2),rep("darkslateblue",2)))

# ale upravime jeste standardni zobrazeni (popiseme vhodne osy a zmenime typ pisma na patkove)
par(family = "serif")
boxplot(Proportion ~ Side:Sex, data=DATA, notch = T, col = c(rep("tomato",2),rep("deepskyblue3",2)), 
        main = "Proportion of clavicule", ylab = "Proportion [mm]", xlab="Categories")

boxplot(Proportion ~ Side:Sex, data=DATA, notch = T, col = c(rep("tomato",2),rep("deepskyblue3",2)), 
        main = "Proportion of clavicule", ylab = "Proportion [mm]", xlab="Categories", 
        names = c("f - dx", "f - sin", "m - dx", "f - sin"), cex = 2, pch = 4)
# cex - velikost bodu
# pch - typ bodu
graphics.off() 

# chceme individualne upravit osy grafu - tedy zakazeme (axes = FALSE) osy generovane funkci boxplot a vytvorime vlastni
windows()
boxplot(Proportion ~ Side:Sex, data=DATA, notch = T, col = c(rep("tomato",2),rep("deepskyblue3",2)), 
        main = "Proportion of clavicule", ylab = "Proportion [mm]", xlab="Categories", 
        cex = 2, pch = 4, axes=FALSE)
axis(1,at=2:3, labels = c("zeny","muzi"))         # axis na pozici 1 (x, dole) - pouze pozice 2 a 3, labels
axis(2)                                           # axis na pozici 2 (y, vlevo)
axis(3, tick = FALSE)                             # axis na pozici 3 (x, nahore) - vypneme tick
axis(4, tck=-0.01)                                # axis na pozici 4 (y, vpravo) - chceme zmensit znacky meritka

# vidime, ze osy y nestaci a mela by byt delsi - do funkce boxplot vlozime argument ylim a chce to nastavit vhodnejsi okraje grafu
windows()
par(family = "serif", mar = c(4,4,7,4), oma=c(2,2,2,2))
boxplot(Proportion ~ Side:Sex, data=DATA, notch = T, col = c(rep("tomato",2),rep("deepskyblue3",2)), 
        main = "Proportion of clavicule", ylab = "Proportion [mm]", xlab="Categories", 
        cex = 2, pch = 4, axes=FALSE, ylim=c(250,450))
axis(1,at=2:3, labels = c("zeny","muzi"))
axis(2)
axis(3, tick = FALSE)
axis(4, tck=-0.01)
graphics.off()

## HISTOGRAM
hist(DATA$Age)
hist(DATA$Age, col = rev(heat.colors(13)))       # histogram vybarvime
hist(DATA$Age, col = rev(heat.colors(13)), main = "Histogram veku ze souboru DATA", xlab = "věk", ylab = "četnost") # popiseme osy

# histogram delky claviculy - chceme jej prolozit krivkou cetnosti
# Note: parametr prob = TRUE => nastaví, že se nejedná o relativní frekvenci, ale densitu, tzn. plocha sloupce je relativní četnost!!
DELKA <- na.omit(DATA$Length_cl)
par(family="serif")
hist(DELKA, prob=TRUE ,col = "darkolivegreen3", main = "Histogram delky claviculy", xlab = "délka [mm]", ylab = "relativní četnost")
lines(density(DELKA), col="darkgreen", lwd=2)
lines(density(DELKA, adjust=2), lty="dotted", col = "chartreuse4")      # "vyhlazeni" krivky za pouziti parametru adjust

# pokud chceme krivku cetnosti zobrazit i v predchozím histogramu zobrazujícím věkové kategorie:
par(family="serif")
hist(na.omit(DATA$Age),  prob=TRUE, col = rev(cm.colors(13)), main = "Histogram veku ze souboru DATA", xlab = "věk", ylab = "relativní četnost")
lines(density(na.omit(DATA$Age)), lty=1, col = "darkviolet")
lines(density(na.omit(DATA$Age), adjust=2), lty="dotted", col = "darkviolet")

# zajimave by bylo porovnani veku zen a muzu pomoci histogramu
# Nezapominame, ze mame tato data:
DATA <- read.csv("06_data.csv", sep=";", header = TRUE)
attach(DATA)
str(DATA)
# zvlast mame objekty pro muze a zeny
muzi <- DATA[Sex=="male",]
zeny <- DATA[Sex=="female",]
# a pro prehlednost vytvorime dva vektory kam ulozime vek muzu a zen zvlast:
vek_zeny <- na.omit(zeny[,"Age"])
vek_muzi <- na.omit(muzi[,"Age"])

# zobrazime histogramy - o stejnem poctu intervalu, k tomu slouzi parametr breaks
hist(vek_zeny, breaks = 7)
hist(vek_muzi, breaks = 7)

# idealni na porovnani by bylo, kdybychom grafy "prelepili" pres sebe, k tomu slouzi argument add u druheho histogramu
# note: jako prvni vykreslime hist. pro muze, protoze cetnost je u muzu vyssi
hist(vek_muzi, breaks = 7)
hist(vek_zeny, breaks = 7, add = TRUE)
# graf neni zatim prilis prehledny a vidime, ze bude nutne, aby vypln histogramu byla pruhledna (k tomu slouzi napr. balicek scales)
# install.packages("scales")
library(scales)
hist(vek_muzi, breaks = 7, col=alpha("dodgerblue",0.5))
hist(vek_zeny, breaks = 7, add = TRUE, col=alpha("darksalmon",0.5))
graphics.off()

################## DOMACI UKOL 7 ##################
### A) Vytvorte boxplot jako je na obrazku vlevo. Zobrazovanou promennou je Shoulder_w. 
# Dejte si pozor zejmena na osy a jejich popis vcetne smeru textu. Muzete zmenit typ bodu, popisy os (smysluplne) i barvy.

### B) Vytvorte histogram jako je na obrazku vpravo. Zobrazovanou promennou je opet Shoulder_w.
# Dejte si pozor, aby krivka cetnosti byla v grafu kompletni (např. upravenim rozsahu osy y).
# Muzete libovolne zmenit barvy a popisy os (smysluplne).

## BODOVÝ GRAF
DATA <- read.csv("06_data.csv", sep=";", header = TRUE)
attach(DATA)
str(DATA)
leva <- na.omit(DATA[Side == "sin",])
prava <- na.omit(DATA[Side == "dx",])

SINDX <- merge(leva, prava, by = "No_sub")
attach(SINDX)

# zobrazeni samostatnych dat v promene Proportion.x
plot(Proportion.x, pch=19, col="seagreen1", main = "Rozložení proměnné Proportion.x")
# zobrazeni samostatnych dat v promene Proportion.y
plot(Proportion.y, pch=19, col="seagreen1", main = "Rozložení proměnné Proportion.x")

# chceme porovnat zavislost promene Proportion leve a prave strany
# nyni jsou hodnoty Proportion leve strany oznaceny jako Proportion.x a prave strany jako Proportion.y
plot(Proportion.x ~ Proportion.y, data = SINDX, pch=19, col="seagreen1")
plot(Proportion.x ~ Proportion.y, data = SINDX, pch=19, col="seagreen1", xlab="Hodnoty pravé strany [mm]", ylab="Hodnoty levé strany [mm]",
     main = "Závislost proměnné Proportion levé a pravé strany")
# upravime typ pisma a zmenime rozsah os
par(family="serif")
plot(Proportion.x ~ Proportion.y, data = SINDX, pch=19, col="seagreen1", xlab="Hodnoty pravé strany [mm]", ylab="Hodnoty levé strany [mm]",
     main = "Závislost proměnné Proportion levé a pravé strany", xlim = c(250,500), ylim = c(280,470))

# chceme pridat popisky k jednotlivym bodum
par(family="serif")
plot(Proportion.x ~ Proportion.y, data = SINDX, pch=19, col="seagreen1", xlab="Hodnoty pravé strany [mm]", ylab="Hodnoty levé strany [mm]",
     main = "Závislost proměnné Proportion levé a pravé strany", xlim = c(250,500), ylim = c(280,470))
text(Proportion.x ~ Proportion.y, data = SINDX, labels=No_sub, cex=0.9, font=1, pos=4)
graphics.off()

# popisky jsou velmi neprehledne, ale vidime, ktere pripady vybocuji a pokud budeme provadet analyzu, muzeme je vymazat
SINDX_2 <- SINDX[No_sub != 123 & No_sub != 97 & No_sub != 177,]

# znovu zobrazime data, bez vybocujicich pripadu!
windows()
par(family="serif")
plot(Proportion.x ~ Proportion.y, data = SINDX_2, pch=19, col="seagreen1", xlab="Hodnoty pravé strany [mm]", ylab="Hodnoty levé strany [mm]",
     main = "Závislost proměnné Proportion levé a pravé strany", xlim = c(250,500), ylim = c(280,470))
# chcemegrafem prolozit linearni model - vhodne graf popiseme, volbou mtext (text pod nazvem grafu)
mtext("Proložení lineárním modelem", side = 3, font = 3, line = 0.5)
# side - na ktere strane (dole, vlevo, nahore, vpravo) se text vypise
# font - viz tahak, nastavujeme kurzivu
# line - nastavuje vzdalenost od okraje plochy grafu - vypisuje text na "linie" v margin
# Pokud chceme prolozit zobrazenými body linearni model vyuzijeme funkce lm, ktera linearni model pocita automaticky a vysledek ulozime do promenne 
mod <- lm(Proportion.x ~ Proportion.y, data=SINDX_2)
# pro zajimavost summary objektu mod, ve kterem najdeme napr. koeficienty hledaneho linearniho modelu
summary(mod)
# nyni staci linearni model zobrazit do grafu, pouzijeme funkci abline (umoznuje zadani primek do grafu)
abline(mod, col="darkslategrey", lwd=2, lty=6)
graphics.off()

# navic funkce lmodel2 (vypocet OLS, MA i SMA)
# install.packages("lmodel2")
library(lmodel2)
mod_pok <- lmodel2(Proportion.x ~ Proportion.y, data=SINDX_2)
summary(mod_pok)
plot(mod_pok, "MA")
# least squares (OLS)
# major axis (MA)
# standard major axis (SMA)
# ranged major axis (RMA) - musí byt zadany parametry range.y, range.x

# muzeme jeste zobrazit graf prava vs. leva zvlast pro zeny a muze
windows()
par(family="serif")
plot(Proportion.x ~ Proportion.y, data = SINDX_2[Sex.x == "female",], pch=19, col="coral1", xlab="Hodnoty pravé strany [mm]", ylab="Hodnoty levé strany [mm]",
     main = "Závislost proměnné Proportion levé a pravé strany", xlim = c(250,500), ylim = c(280,470))
points(Proportion.x ~ Proportion.y, data = SINDX_2[Sex.x == "male",], pch=19, col="deepskyblue1", xlab="Hodnoty pravé strany [mm]", ylab="Hodnoty levé strany [mm]",
       main = "Závislost proměnné Proportion levé a pravé strany", xlim = c(250,500), ylim = c(280,470))
mod_f <- lm(Proportion.x ~ Proportion.y, data=SINDX_2[Sex.x == "female",])
mod_m <- lm(Proportion.x ~ Proportion.y, data=SINDX_2[Sex.x == "male",])
abline(mod_f, col="coral4", lwd=2, lty=6)
abline(mod_m, col="darkcyan", lwd=2, lty=6)
# pomoci funkge legend pridame legendu
legend(250,470,legend = c("Lineárni model ženy", "Lineární model muži"), col = c("coral4","darkcyan"),
       lty = 6, cex = 0.8)
graphics.off()

# BODOVE GRAFY A GRID - ukazka
# obecny graf se 150 body z normalniho rozlozeni, kde mean = 17, sd = 5.5
windows()
plot(rnorm(150, 17, 5.5), ylab = "osa y", xlab = "osa x", main = "Nazev grafu", pch = 4)
grid(nx = NULL, ny = NULL, col = "lightgray", lty = "dotted", lwd = par("lwd"), equilogs = TRUE)

# u bodu vykreslenych v ukazce nevadi, ze je mrizka vykreslena pres body, ale nekdy to muze byt problem
windows()
body_nahodne <- rnorm(150, 17, 5.5)
plot(body_nahodne, ylab = "osa y", xlab = "osa x", main = "Nazev grafu", pch = 17, cex = 2, col = "slateblue4")
grid(nx = NULL, ny = NULL, col = "slategray3", lty = "dotted", lwd = par("lwd"), equilogs = TRUE)
# mrizka boy nepekne prepisuje - resenim je vykreslit body az po mrizce znovu
points(body_nahodne, pch = 17, cex = 2, col = "slateblue4")

# zaroven by napriklad v tomto pripade bylo vhodne aby popis osy y byl vertikalne
# las - label orientation
windows()
par(family = "serif")
body_nahodne <- rnorm(150, 17, 5.5)
plot(body_nahodne, ylab = "osa y", xlab = "osa x", main = "Nazev grafu", pch = 17, cex = 2, col = "slateblue4", las = 1)
grid(nx = NULL, ny = NULL, col = "slategray3", lty = "dotted", lwd = par("lwd"), equilogs = TRUE)
# mrizka boy nepekne prepisuje - resenim je vykreslit body az po mrizce znovu
points(body_nahodne, pch = 17, cex = 2, col = "slateblue4")

# prazdny graf s rozsahem os x = 0 az 100; y = 0 az 1
par(mar=c(4,4,3,3))
plot(0,0,type="n",xlim=c(0,100),ylim=c(0,1))

### DOMACI UKOL 8
### A) Vytvořte bodový graf jako je na obrázku. Zobrazovanou proměnnou je Length_cl. 
# Dejte si pozor aby mřížka nepřekrývala body. Barvy můžete zvolit libovolně, stejně tak typy bodů.
