Search
Data mining (machine learning) v praxi:
Typy vstupních dat
Příklady byly převzaty z knížek Data mining with R a R Cookbook a dále upraveny.
a <- 39 b <- 12 + 16i c <- 'hello' d <- T e <- NA str(a) rm(a) ls() rm(list=ls()) ls()
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]
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"
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
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 <- 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)
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)
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.
Úkol: Nainstalujte balík ggplot2 a nastavte si pracovní adresář v RStudiu
Podrobný návod lze najít na 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.
r-cheat-sheet-3.pdf
Další je možné nalézt na: www.rstudio.com/resources/cheatsheets
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í:
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.
Test významnosti kvantifikuje to, jak moc naše experimenty potvrzují to, že máme zamítnout nulovou hypotézu.
Klasický test hypotézy
Alternativní postup
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: <latex>DX=DY=\sigma^2</latex>
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)
# 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!
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
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)