## SZTE TTIK - R gyakorlat 01 ## Adatállományok a honlapon: ## http://www.inf.u-szeged.hu/~csicsman/oktatas/adatbanyaszat/adatbanyaszat.html ## László Anna ## 2015.03.02. ## Referencia, ajánlott irodalom: ## - The R Project for Statistical Computing: http://www.r-project.org/ ## - RStudio: http://www.rstudio.com/ ## - Help, support, docs from the software and/or internet ## - Coursera - Computing for Data Analysis course at Johns Hopkins by Roger Peng (4 weeks long, started on 23rd of September) ## - Bob Muenchen: R for SAS and SPSS Users (http://r4stats.com) ## - Quick-R: http://www.statmethods.net/interface/guis.html - great descriptions about methods and examples ## - Peter Dalgaard: Introductory Statistics with R (in Statistics and computing series), 2nd ed. Springer, 2008. ## - Alain F. Zuur, Elena N. Ieno, Erik H.W.G. Meesters: A Beginner’s Guide to R (in Use R! series), Springer, 2009. ## - Randall Schumacker, Sara Tomek: Understanding Statistics Using R, Springer, 2013. ## - Reiczigel Jenő, Harnos Andrea, Solymosi Norbert: Biostatisztika nem statisztikusoknak (http://biostatkonyv.hu/) – Biostatistics for not statisticians, Pars Kft. Nagykovácsi, 2014. ## Ingyen letölthető az alkalmzás: ## R: http://www.r-project.org/ -> http://cran.rapporter.net/ ## RStudio: http://www.rstudio.com/ide/download/desktop ## Vagy: TinnR - R programozásra, debuggolásra nagyon ajánlott - http://www.sciviews.org/Tinn-R/ ## Vagy RCommander: kattintós felület (library(Rcmdr)) ## Help - használjunk létező utasításokat help(summary) ?mean ?means ## means kulcsszó nincs ??means ## szélesebb körben keresés demo() ## demok kilistázása demo(colors) showCols2() demo(graphics) RSiteSearch("means") ## neten keresés ## Számít a kis és nagybetű!! ## A SAS-sal és SPSS-sel ellentétben (amik külön kezelik a különböző rendszereket), ## az R az 5 alap funkció kategóriát integrálja: ## - adatbeolvasás és adatkezelés (data input and management) ## - statisztikai elemzés és grafikus megjelenítések (statistical analysis and graphical procedures) ## - adatok kiíratása (output management (SAS: ODS, SPSS: OMS)) ## - makrók (macro language: to repeat written commands) ## - matrix nyelv algoritmusok programozására (matrix language: to write new algorithms (SAS: IML, SPSS: Matrix)) ##### R, mint kalkulátor 5+12 7-9 5*7 8/2 2^4 1+2^3 (1+2)^3 7+9 - (9+7) ## kommutativitás (10+20)+30 - (10+(20+30)) ## asszociativitás (1+2)*3 - (1*3+2*3) ## disztributivitás ##### Adattípusok ## R-ben minden objektum ## 5 alapvető adattípus van: ## character, numeric (real), integer (with L suffix), complex, logical (True, False) Inf ## infinite - végtelen NaN ## definiálatlan érték vagy hiányzó érték ## sequence (sor) x <- c(1,4,7,2,6,2,3,2,4,5,6,6,NaN) ## értékadó operátor, mint "="; c(): concatenate c <- c("apple","pear","plum"); c ## a c() függvénnyel sztringeket is konkatenálhatunk ## ";"-vel több utasítás is futtatható egy sorban y <- 3:10 y ## autoprint, ugyanaz, mint print(y) print(y) ## [1] a vektor első elemét jelenti class(x) ## adattípus lekérése z <-as.numeric(x) ## adatkonverzió y <-as.logical(x) y f <- as.factor(x) f x2 <- as.numeric(f) ## szám jellegű factor adatok még visszaalakíthatók numerikussá x2 f2 <- c("aa","bb") ## string factor már NEM alakítható numnerikussá! Hiányzó értékek lesznek x2 <- as.numeric(f2) ## vektor x <- vector("numeric", length=8) ## a korábbi x vektort felülírtuk: [1] 0 0 0 0 0 0 0 0 0 0 ## alapértelmezetten 0-val tölti föl a vektor elemeket x <- rbinom(n=10,size=20,prob=0.5) ## 10 elemű random binomiális eloszlású minta generálása: egyenletesen 0 és 20 közötti értékekkel x ## indexelés x[1] ## egyszerű szám (numeric) szelekció x[2:3] ## sorozat (sequence) szelekció x[c(2,6)] ## vektor szelekció x[x>10] ## logikai szelekció - feltételhez kapcsolt ## mátrix: 2D vektor m <- matrix(1:6, nrow=2, ncol=3) ; m ## oszloponként tölti föl (columnwise) m2 <- matrix(1:6,nrow=3,ncol=2) ; m2 m %*% m2 ## mátrix szorzás ## lista list(1,"a",TRUE,1+4i,4.78,8L,"Hello World!") ## 7 vektort tartalmaz: [[4]] - a 4. vektor list(c(1,5,2,6,7),3:6,c("a","b","c","d","e","f","g")) ## factor: kategorikus (diszkrét) változó: nomenklatúra ans <- factor(c("yes","yes","no","yes","no","no","no")) ans table(ans) ans12 <- unclass(ans) ans12 ## baseline beállítása: az első elem ans <- factor(c("yes","yes","no","yes","no","no","no"),levels=c("yes","no")) ans12 <- unclass(ans) ; ans12 ## data frames - adatállomány d <- data.frame(x=1:4,y=5:8,z=2:5) x ## x már korábban definiált d$x ## a "d" adatállománybeli x változóra így hivatkozunk ##### Adatimport ## Munkakönyvtár beállítása: Session -> Set Working Directory -> Choose directory -> válasszuk ki a saját könyvtárat, ahol az adatok vannak setwd("C:/Anna/SAS/2014-15-II/05_R/data") ## http://www.ats.ucla.edu/stat/spss/examples/da/daspss_dl.htm ## Az "a" változó a kezelés 3 szintjét tartalmazza: 1-control, 2-positive, 3-negative ## "b" változó is 3 értékű diszkrét változó: 1 = low F & low E, 2 = High F & Low E, 3 = High F & High E. ## Függő változó: memory score. a <- read.table("Keppel_ch12_memory.txt", header=TRUE) ## az első sorban a változó nevek szerepelnek View(a) head(a, n = 6) ## Az adatállomány első 6 sorának kiíratása names(a) ## változók nevei names(a)[1] <- "subject" ## változók átnevezése names(a)[2] <- "treatment" names(a)[3] <- "factor_FE" names(a) attach(a) ## Adatbeolvasás CSV file-ból ## http://www.ats.ucla.edu/stat/spss/examples/da/daspss_dl.htm ## A csoportosító változó 3 értéket vesz föl: oktatási technikák - group ## a célváltozó diákok "megértési pontozása" - score b <- read.csv2("Keppel_ch13_comprehension.csv") ## ;-vel tagolt értékek ## , separated values - read.csv() attach(b) str(b) ## adatállomány struktúrája ## SPSS adatállomány importja ## http://www.ats.ucla.edu/stat/spss/examples/alr2/alr2spssch1.html ## Változók: életkor, szívbetegség jelenléte (coronary heart disease (CHD)), 100 megfigyelés library(foreign, pos=4) ## Csomag külső adatok olvasására: Minitab, S, SAS, SPSS, Stata, Systat, dBase, ... szoftverekből Dataset <- read.spss("Hosmer_ch1_CHD.sav", use.value.labels=TRUE, max.value.labels=Inf, to.data.frame=TRUE) colnames(Dataset) <- tolower(colnames(Dataset)) ## kisbetűs változónevek attach(Dataset) ## Adatstruktúra: ## Sorokban: megfigyelések, esetek (vásárlók, betegek, kísérleti állatok, növények, ...) ## Oszlopokban: változók - tulajdonságok, jellemzők, mérések, karakterisztikák, attribútumok (nem, életkor, testtömeg, testmagasság, vérnoymás, fizetés, ...) ## Hosszanti adatelrendezés: Longitudinal data (wide or long file format) ## Hosszanti adatstruktúráról szélesre váltani: ## http://stackoverflow.com/questions/14296918/complex-long-to-wide-data-transformation-with-time-varying-variable ## http://www.statmethods.net/management/sorting.html dat <- read.table(text = " id cohort s 1 1 2 1 1 2 1 1 1 1 1 4 2 3 1 2 3 1 2 3 3 3 2 1 3 2 2 3 2 3 3 2 3 3 2 4", header=TRUE) datframe <- data.frame(dat, period=sequence(rle(dat$id)$lengths) ) ## period lesz az új változó az időpontokkal; rle(): Run Length Encoding widedat <- reshape(datframe, v.names="s", sep="", idvar=c("id", "cohort"), timevar="period", direction="wide") widedat[is.na(widedat)] = 0 ## a hiányzó értékeket 0-ra cseréli widedat ## kiíratás, ugyanaz, mint: print(widedat) ## wide formátumról vissza long-ba: longdat <- reshape(widedat, direction="long", timevar="period") ## visszakaptauk a "dat" adatállományt, csak a sorok vannak más sorrendben longdat[order(longdat$id),] ## sorok rendezése ##### Adatkezelés ## oszlopok és sorok összefűzése cbind(x,y) ## ha nem azonos hosszúságú a két vektor, nem lehet őket összefűzni y <- 1:13 cbind(x,y) rbind(x,y) rm(x,y) ## objektumok törlése x <- rbinom(n=10,size=20,prob=0.5) x sort(x) ## értékek rendezése (alapértelmezett emelkedő sorrend) x_dec <- sort(x,decreasing=T) ##### Új változó hozzáadása az adatállományhoz meglévő változó értékei alapján a <- transform(a, mem_gr=ifelse(memory>8,1,0)) ## mem_gr lesz az új változó ##### Szűrés (filtration) aa <- a[c(2:5)] ## az "a" adatállomány 2-5 változóinak megtartása aa <- a[-1] ## Az első változó kihagyása: drop (exclude) aa <- a[treatment==1 | treatment==2,c(2:5)] ## sorok leválogatása: ahol treatment értéke 1 vagy 2 ##### Hiányzó értékek kezelése nrow(aa) ## sorok száma ah <- na.omit(aa) ## "aa" egy data frame - azon sorok törlése, amelyekben bármely oszlopban van hiányzó érték attach(ah) x <- c(1,2,NA,4,NA,5) bad <- is.na(x) ## logikai vektor x[!bad] x <- 1:4 y <- c(2:4,NA) good <- complete.cases(x,y) x[good] y[good]