{{indexmenu_n>1}}
====== Cvičení 1 ======
=== Úvod do DVZ ===
* úloha DVZ v kostce
* data mining vs. statistika
**Data mining** (machine learning) v praxi:
- Sběr dat
- Průzkumová analýza a příprava dat
- Trénování modelu
- Vyhodnocení modelu
- Zlepšení modelu
**Typy vstupních dat**
* **(jednotka) pozorování** - nejmenší jednotka se (všemi) měřenými vlastnostmi, př. lidé, objekty, transakce, geografické regiony, el. měření, ...
* **dataset** - obsahuje (několik, hodně) pozorování a jejich vlastnosti - atributy. Je to kolekce dat skládající se z **pozorování** (instance, example) a **atributů** (features). Atributy jsou zpravidla **numerické** (číselné), //kategorické// (nominální) či jejich speciální typ **ordinální**.
== Instalace R, R studio ==
* instalace R [[http://cran.rstudio.com/|CRAN web]], R studio [[https://www.rstudio.com/products/rstudio/download/|Rstudio download]]
* přehled (konzole, workspace)
* nastavení pracovního adresáře (menu Session - Set Working Directory)
== Úvod do R ==
Příklady byly převzaty z knížek Data mining with R a R Cookbook a dále upraveny.
* **Přiřazení a základní datové typy**
a <- 39
b <- 12 + 16i
c <- 'hello'
d <- T
e <- NA
str(a)
rm(a)
ls()
rm(list=ls())
ls()
* **Vektory**
a <- c(4,7,23.5,76.2,80)
length(a)
mode(a)
str(a)
a[2]
a[2:3]
a[-2]
b <- c(4,6,8,24)
c <- c(10,2,4)
b + c
x <- c(0,-3,4,-1,45,90,-5)
y <- x > 0
y <- x[x > 0]
* **Factors** - reprezentace kategorických (nominálních) proměnných - např. pohlaví pacientů
g <- c('f','m','m','m','f','m','f','m','f','f')
g <- factor(g)
str(g)
table(g)
g <- factor(c('m','m','m','m'), levels = c('f','m'))
str(g)
gender <- factor(c("MALE", "FEMALE", "MALE"))
blood <- factor(c("O", "AB", "A"), levels = c("A", "B", "AB", "O"))
#ordinálni typ
symptoms <- factor(c("severe", "mild", "moderate"), levels = c("mild", "moderate", "severe"), ordered = TRUE)
symptoms > "moderate"
* **Lists** - generalizace vektorů - kolekce objektů (různého typu)
a <- c('jkl',12,T,F,NA)
str(a)
a <- list('jkl',12,T,F,NA)
str(a)
subject <- list(name = "Pepa",
temperature = 38.2,
flu_status = TRUE
)
subject$name
* **Matice**
m <- matrix(c(45,23,66,77,33,44,56,12,78,23),nrow=2,ncol=5)
m <- matrix(c(45,23,66,77,33,44,56,12,78,23),nrow=2,ncol=5,byrow=T)
m[2,3]
m[1,]
m[,4]
m[1,c(3,5)]
m[1,-c(3,5)]
m <- matrix(rep(10,20),nrow=4,ncol=5)
results <- matrix(c(10,30,40,50,43,56,21,30),nrow=2,ncol=4,byrow=T)
colnames(results) <- c('1qrt','2qrt','3qrt','4qrt')
rownames(results) <- c('store1','store2')
results['store1',]
results['store2',c('1qrt','4qrt')]
* **Data Frames**
data <- data.frame(site=c('A','B','A','A','B'), season=c('Wi','Su','Su','Sp','Fa'), pH=c(7.4,6.3,8.6,7.2,8.9))
data$site
data$pH
data[1,]
data[,1]
data[data$pH>7,]
data[data$site=='A',]
data$NO3 <- c(234.5,256.5, 654, 356.7,776.4)
t <- c(-12.5, 28.4, 31.2, 14, 8.9)
data <- cbind(data,t)
s <- c('B','Wi',7.5,1)
data <- rbind(data,s)
nrow(data)
ncol(data)
dim(data)
names(data)
names(data)<-c('area','season','pH','NO3')
table(data$site)
str(data)
summary(data)
* **Generování dat**
x <- 1:1000
seq(from=-2,to=1,by=0.5)
seq(from=1, to=5, length.out=4)
seq(from=2,to=-2,by=-0.2)
rep(5,times=10)
rep(1:2,times=3)
gl(2,5,labels=c('female','male')
rnorm(10) # runif, rbinom, rpois,...
rnorm(4, mean=10, sd=3)
* ** Řídící struktury **
if ( podmínka ) { příkazy } else { příkazy }
for ( přes co iterovat ) { příkazy }
while ( podmínka ) { příkazy }
repeat { příkazy }
break
next
f <- function ( parametry ) {
příkazy
return( výsledek )
}
Podrobnější informace lze nalézt na stránkách http://www.r-project.org/ v sekci Manuals.
==Instalace balíků, nastavení workspace v RStudiu==
* instalace potřebných balíků: **install.packages("package_names")**
* nahrání potřebných balíků: **library(package_names)**
* nastavení workspace v RStudiu: Menu Session -> Set Working Directory -> Choose Directory, nebo pomocí příkazů **setwd()**, **getwd()**
**Úkol:** Nainstalujte balík ggplot2 a nastavte si pracovní adresář v RStudiu
==Psaní funkcí v RStudiu==
Podrobný návod lze najít na [[http://www.rstudio.com/ide/docs/using/source|Editing and Executing Code]]
**Úkol:** Napište funkci pro nalezení modus veličiny x (modus náhodné veličiny X je hodnota, která se v daném statistickém souboru vyskytuje nejčastěji). Později tuto funkci použijeme pro průzkumovou analýzu dat.
/*
Mode <- function (x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
*/
== R cheat sheet ==
[[https://www.rstudio.com/wp-content/uploads/2016/10/r-cheat-sheet-3.pdf|r-cheat-sheet-3.pdf]]
Další je možné nalézt na: [[https://www.rstudio.com/resources/cheatsheets/|www.rstudio.com/resources/cheatsheets]]
====== Statistické okénko ======
===== Rozdělení pravděpodobnosti =====
**K zopakování:** hustota pravděpodobnosti, distribuční funkce, kvantilová funkce
**Normální rozdělení**
# hustota
dnorm(x = 0, mean = 0, sd = 1)
# distribuční funkce
pnorm(q = 0, mean = 0, sd = 1)
# kvantilová funkce
qnorm(p = 0.5, mean = 0, sd = 1)
**Studentovo rozdělení**
# hustota
dt(x = 0, df = 5)
# distribuční funkce
pt(q = 0, df = 5)
# kvantilová funkce
qt(p = 0.5, df = 5)
K zopakování:
* F_{X}(x) - distribuční funkce rozdělení náhodné veličiny X
* q_{X}(\alpha) - \alpha-kvantil rozdělení náhodné veličiny X
* F_{N(\mu, \sigma^2)}(x) - distribuční funkce normálního rozdělení se střední hodnotou \mu a rozptylem \sigma^2
* q_{N(\mu, \sigma^2)}(\alpha) - \alpha-kvantil normálního rozdělení se střední hodnotou \mu a rozptylem \sigma^2
* \Phi(x)=F_{N(\mu = 0, \sigma^2 = 1)}(x) - distribuční funkce normovaného normálního rozdělení se střední hodnotou \mu = 0 a rozptylem \sigma^2 = 1
* \Phi^{-1}(\alpha) = q_{N(\mu = 0, \sigma^2 = 1)}(\alpha) - \alpha-kvantil normovaného normálního rozdělení se střední hodnotou \mu = 0 a rozptylem \sigma^2 = 1
* Platí: q_{N(\mu, \sigma^2)}(\alpha)=\mu + q_{N(0, \sigma^2)} = \mu + \sigma \Phi^{-1}(\alpha)
**Příklad 1 (Konfidenční intervaly)**
Úspěšnost klasifikace p leží uvnitř nějakého specifického intervalu s určitou mírou důvěry. S=850 správně klasifikovaných příkladů pro
N=1000 instancí. Odhadněte relativní úspěšnost klasifikace (výběrovou relativní četnost aproximujte normálním rozdělením):
* bodový odhad
* intervalový odhad (uvažujte \alpha = 0.1)
===== Studentův t-test =====
Test významnosti podává informaci o tom, jak moc můžeme důvěřovat tomu, že mezi oběma veličinami je skutečně rozdíl.
* nulová hypotéza H_0 - mezi oběma veličinami NENÍ rozdíl
* alternativní hypotéza H_1 - rozdíl mezi oběma veličinami JE
Test významnosti kvantifikuje to, jak moc naše experimenty potvrzují to, že máme zamítnout nulovou hypotézu.
**Klasický test hypotézy**
- Zvolíme požadovanou hladinu významnosti \alpha.
- Spočítáme realizaci testové statistiky t.
- Určíme kritickou hodnotu \kappa tak, aby P[T \textgreater \kappa]\leq \frac{\alpha}{2}, tj. \kappa = q_T(1-\frac{\alpha}{2}).
- Pokud t \textgreater \kappa nebo t \textless -\kappa, H_0 zamítáme, tj. můžeme rozdíl prohlásit za významný.
**Alternativní postup**
- Určíme pravděpodobnost, že při platnosti H_{0} nabývá testová statistika T své stávající hodnoty anebo hodnot ještě extrémnějších, tj. takzvanou **dosaženou hladinu významnosti**, neboli **p-hodnotu**.
- Dosaženou hladinu významnosti P (1) zveřejníme (a každý si udělá závěr sám), (2) porovnáme se stanovenou požadovanou hladinou významnosti a H_0 zamítáme, pokud P \textless \alpha.
**Prakticky:** Čím je p-hodnota (p-value) nižší, tím je výsledek významnější.
**Test stř. hodnot dvou normálních rozdělení s neznámým rozptylem**
Předpoklad: DX=DY=\sigma^2
- Máme 2 odhady s_X^2, s_Y^2 téhož parametru \sigma^2. Spočítáme sdružený odhad:\\ S^2=\frac{(m-1)S_X^2+(n-1)S_Y^2}{m+n-2}.
- Místo normálního rozdělení použijeme Studentovo rozdělení s //m+n-2// stupni volnosti.
- Za předpokladu EX=EY:\\ T = (\overline{X}_m-\overline{Y}_n)\frac{1}{S\sqrt{\frac{1}{m}+\frac{1}{n}}}
**Jak postupovat v prostředí R**
**Příklad 2 (dvouvýběrový nepárový t-test)**
U pacientů léčených lékem A byly naměřeny následující hodnoty systolického tlaku: 132, 136, 120, 139, 138, 145, 150, 135, 131, 122, 120, 129, 127, 117, 129 [mmHg]. U pacientů léčených lékem B pak následující hodnoty: 137, 135, 154, 135, 147, 119, 137, 129, 150, 140, 135, 145, 124 [mmHg]. Na hladině významnosti 5 % otestujte hypotézu, že se krevní tlak u těchto dvou skupin pacientů liší.
tlakA <- c(132, 136, 120, 139, 138, 145, 150, 135, 131, 122, 120, 129, 127, 117, 129)
tlakB <- c(137, 135, 154, 135, 147, 119, 137, 129, 150, 140, 135, 145, 124)
**Klasický test hypotézy**
# zvolíme hladinu významnosti
alpha <- 0.05
# spočítáme testovou statistiku
s2 <- ((m-1)*var(tlakA)+(n-1)*var(tlakB))/(m+n-2)
t <- (mean(tlakA)-mean(tlakB))/(sqrt(s2)*sqrt(1/m+1/n))
t
#[1] -1.665809
# určíme kritickou hodnotu kappa
kappa <- qt(1-alpha/2, df=m+m-2)
kappa
#[1] 2.048407
abs(t) > kappa
# FALSE
# => H0 nezamítáme!
**Alternativní postup**
m <- length(tlakA)
n <- length(tlakB)
# zvolíme hladinu významnosti
alpha <- 0.05
# spočítáme testovou statistiku
s2 <- ((m-1)*var(tlakA)+(n-1)*var(tlakB))/(m+n-2)
t <- (mean(tlakA)-mean(tlakB))/(sqrt(s2)*sqrt(1/m+1/n))
t
#[1] -1.665809
# p-hodnota = 2 * P[X <= t] = 2 * F(t)
# F(t) - distribuční funkce
p_val = 2 * pt(t, df = m+n-2)
p_val
[1] 0.1077565
# porovnáme p-hodnotu se stanovenou hladinou významnosti alpha
# lze použít i funkci t.test
t.test(tlakA, tlakB, paired=FALSE, var.equal = TRUE)
Two Sample t-test
data: tlakA and tlakB
t = -1.6658, df = 26, p-value = 0.1078
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-13.69012 1.43371
sample estimates:
mean of x mean of y
131.3333 137.4615
**Příklad 3 (jednostranný test)** Uvažujte přírůstek váhy 19 krys mezi 28. a 84. dnem po narození. 12 z nich bylo krmeno potravou bohatou na bílkoviny, 7 z nich potravou chudou na bílkoviny. Na hladině významnosti 5 % otestujte hypotézu, že krysy krmené nízkoproteinovou dietou přibíraly méně.
high_protein <- c(134, 146, 104, 119, 124, 161, 107, 83, 113, 129, 97, 123)
low_protein <- c(70, 118, 101, 85, 107, 132, 94)
**Řešení:**\\
$H_0: \mu_L = \mu_H$ (L = low protein, H = high protein)\\
$H_1: \mu_L < \mu_H$ (jednostranný test)\\
Hladina významnosti $\alpha = 0.05$\\
Počet stupňů volnosti: $\nu = m+m-2 = 12 + 7 -2 = 17$\\
Kritická hodnota: $\kappa = q_{t(17)}(0.05) = -1.74$\\
Sdružený odhad rozptylu: $s^2 = 446.12$\\
Za předpokladu platnosti $H_0$, testová statistika: $t = (\overline{X}_L-\overline{H}_H)\frac{1}{S\sqrt{\frac{1}{m}+\frac{1}{n}}}=-1.89$\\
Protože $t<\kappa$ (tedy $t$ se nachází v kritické oblasti), $H_0$ zamítáme. Na 5% hladině významnosti můžeme prohlásit, že krysy krmené nízkoproteinovou dietou skutečně přibírají méně.