0 uvod - university of novi sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/r_skripta.pdf1 ovaj material je...

93
1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S je okruženje za računanje i vizulizaciju odgovora na statistička pitanja.Razvija se od 1976 godine, od strane John Chambersa-a i njegovih kolega iz Bell Laboratorije (SAD). R je implementacija otvorenog izvornog koda S. Naziv R se delom bazira na početnom slovu imena prvih autora programa (Robert Gentleman i Ross Ihaka, Novi Zeland, 1991-1993), a delo. 1993 Bell Laboratorija je dala ’Insightful Corp.’ (sada TIBCO) ekskluzivnu licencu za razvijanje i prodaju S jezika. Insightful proda je svoju implementaciju S pod nazivom S-PLUS i uz to je i izgradio i brojne funkcije (većinonom GUIs). Postoje samo male razlike između R i S-PLUS-a, tako da većina kodova iz R radi i u S-PLUS i obrnuto. Primer aplikacije na R ćemo predstaviti na osnovu podataka do kojih je dosao Lee Salk (O ulozi otkucaja srca između majke i novorođenčeta). Slučajno su izabrana novorođenčad koja su čula otkucaje srca odraslog čoveka. Na sledećem grafiku prikazana je grupa beba sa porođajnom tezinom ispod 3000g, zatim je izvršeno poređenje dobijanja na težini u raponu od 2 do 5 dana između kontrol ne grupe i grupe novorođečadi koja je čula otkucaje. Dobrobiti novorođenčeta od slušanja otkucaj a srca? Dobitak na težini između 2 i 5 dana Glavne prednosti: R je besplatan software Nove statističke metode se prvo implementiraju u R Nedostaci R zahteva navikavanje, jer se zasniva na komandnim linijama, a ne na GIU U R grafika nije interaktivna (npr. nemamo opciju 'undo')

Upload: others

Post on 26-Dec-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

1

Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011

0 Uvod

0.1 Sta je R?

S je okruženje za računanje i vizulizaciju odgovora na statistička pitanja.Razvija se od 1976

godine, od strane John Chambersa-a i njegovih kolega iz Bell Laboratorije (SAD). R je implementacija

otvorenog izvornog koda S. Naziv R se delom bazira na početnom slovu imena prvih autora programa

(Robert Gentleman i Ross Ihaka, Novi Zeland, 1991-1993), a delo. 1993 Bell Laboratorija je dala

’Insightful Corp.’ (sada TIBCO) ekskluzivnu licencu za razvijanje i prodaju S jezika. Insightful prodaje

svoju implementaciju S pod nazivom S-PLUS i uz to je i izgradio i brojne funkcije (većinonom GUIs).

Postoje samo male razlike između R i S-PLUS-a, tako da većina kodova iz R radi i u S-PLUS i obrnuto.

Primer aplikacije na R ćemo predstaviti na osnovu podataka do kojih je dosao Lee Salk (O ulozi otkucaja

srca između majke i novorođenčeta). Slučajno su izabrana novorođenčad koja su čula otkucaje srca

odraslog čoveka. Na sledećem grafiku prikazana je grupa beba sa porođajnom tezinom ispod 3000g,

zatim je izvršeno poređenje dobijanja na težini u raponu od 2 do 5 dana između kontrolne grupe i grupe

novorođečadi koja je čula otkucaje.

Dobrobiti novorođenčeta od slušanja otkucaja srca?

Dobitak na težini između 2 i 5 dana

Glavne prednosti:

R je besplatan software

Nove statističke metode se prvo implementiraju u R

Nedostaci

R zahteva navikavanje, jer se zasniva na komandnim linijama, a ne na GIU

U R grafika nije interaktivna (npr. nemamo opciju 'undo')

Page 2: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

2

0.2 Preuzimanje R

R is besplatan software (GNU licenca).

Korisnici Windowsa: Preuzmite R Windows instalaciju sa

http://cran.r-project.org/bin/windows/base/

Nakon toga dupli klik na instalaciju, kako bi ste instalirali R kao i bilo koji drugi Windows software.

Mozete naknadano preuzeti i instalirati pakete koje želite iz CARN na sledeći način:

> Packages > Install packaegs. Isto tako, mozete instalirati Tinn-R programski ediotor za Windows.

Možete ga preuzeti sa :

http://sourceforge.net/projects/tinn-r/

Pokrenite R izvršavanjem ’R.exe’.

Mac korisnici: Univerzalni binarni za Mac OS X 10.4.4

http://cran.r-project.org/bin/macosx/

Dupli klik na ikonicu R.mpkg. Mozete preuzeti i instalirati pakete preko interneta:

> Packages and Data > Packages Installer menu.

Linux/Unix korinisci: Prekompajlirani binarni za mnoge Linux sisteme su dostupni na:

http://cran.r-project.org/bin/linux/

Ili korisnici mogu sastaviti R od izvora. Videti:

http://cran.r-project.org/

0.3 Literatura

• Ligges, Uwe. Programmieren mit R. SpringerVerlag Berlin 2005 (Njemacka)

• R web-strnanica daje sledeci uvod u R

http://cran.r-project.org/doc/manuals/R-intro.pdf

• Lista najčešće postavljenih pitanja vezanih za R

http://cran.r-project.org/doc/manuals/R-FAQ.html

• Indexi R komandi sa objasnjenjem (Njemački,u izradi)

http://de.wikibooks.org/wiki/GNU_R:_Befehle-Index

Page 3: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

3

• Kratka lista bitnih komandi

http://cran.r-project.org/doc/contrib/Short-refcard.pdf

Ova lista je posebno korisna kako bi se podsetili na komande.

0.4 Biblioteka

R ima previše komandi za učitavanja kada se krene sa upotrebom. R komande su organizovane

kao paketi. Na primer, paket ’base’sadrži osnovne komande, paket ’stats’ sadrži statističke komande kao

sto su distribucije. Paket ’datasets’ sadrže primere paketa podataka. Izbora važnih paketa

(library(lib.loc=.Library)) je napunjen na početku. Dalji paketi trebaju se dodati ''rucno'' . Na primer,

paket 'lattice' se dodaje na sledeci nacin

>library(lattice)

Pokretanje paketa zihteva instalaciju paketa na računar.

Lista instaliranih paketa može se videti na installed.packages().

Lista komadi koje sadrži paket xyz može biti viđena sa library(help=”xyz ”).

Komande available.packages(), download.packages(), install.packages(), update.packages() mogu

pomoći pri instalaciji i ažuriranju podataka.

1. Osnove

1.1 R kao kalkulator

Svi počeci su teški. Zato mi počinjemo sa nečim poznatim.

> 2+3 [1] 5 > 3*6 [1] 18 > # Ovo je komentar > 2^6; 7/3 # više komandi je odvojeno sa ';' [1] 64 [1] 2.333333 > 4+3*5^2 # pravila o prednosti operacija važe kao i uvek [1] 79 > 1.2 [1] 1.2 > 1,2 # nemačka decimalna notacija ne funkcioniše Error: Unexpected ',' in "1," > 1.2e3 # ovo je jednako 1.2 * 10^3. 'e' kao 'exponent (eksponent)' [1] 1200 > 5 %/% 3 # celobrojni količnik [1] 1 > 5 %% 3 # ostatak pri deljenju [1] 2

Page 4: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

4

> exp(1) # eksponencijalna funkcija [1] 2.718282 > exp(log(5)) # log() je prirodni logaritam [1] 5 > sin(pi/2) # sinus [1] 1 > cos(pi/2) # kosinus od pi/2 je nula. Napomena: R ne nudi nulu kao

#odgovor! [1] 6.123234e-17 > max(4,2,5,1) # maksimum svih elemenata [1] 5 > sum(4,2,5,1) # suma svih elemenata [1] 12 > prod(4,2,5,1) # proizvod svih elemenata [1] 40 > factorial(4) # 4 faktorijal [1] 24 > choose(5,2) # 5 nad 2 [1] 10 # Još neke funkcije : # exp(), log(), log10(), log2(), # sin(), cos(), tan(), asin(), acos(), atan(), # sinh(), cosh(), tanh(), asinh(), acosh(), atanh() # sum(), prod(), abs(), sqrt(), max(), min(), factorial(), choose() # round(), floor(), ceiling(), trunc(), signif()

1.2 Pomoć pri radu

> help(solve) # Prikazuje stranicu za pomoć za komandu "solve". > ?solve # Isto kao help(solve). > help("exp") > help.start() # Prikazuje html-stranu sa raznim linkovima. > help.search("solve") # Prikazuje listu komandi koje mogu biti povezane sa stringom

# “solve”. > ??solve # Isto kao help.search("solve"). > example(exp) # Prikazuje primere za korišćenje funkcije 'exp'. > example("*") # Imajte na umu da se posebni znakovi moraju navesti unutar

# navodnika. 1.3 Zadaci, poređenja i logički izrazi

> # promenljivoj x je dodeljena vrednost 5. > x [1] 5 > 6 -> x # ekvivalentno sa x <- 6 ali neuobičajeno.

Page 5: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

5

> x [1] 6 > x = 7 # ekvivalentno sa x <- 7 ali neuobičajeno > x [1] 7 > y <- x^2 + 3 # dodeli 7^2 + 3 promenljivoj y > y [1] 52 > myfunction <- exp # uvođenje nove funkcije > myfunction(log(5)) [1] 5 > myfunction <- sqrt > myfunction(81) [1] 9 Birajući elemente koji imaju određena ‘svojstva’ pristupamo podskupovima skupova velikih

grupa podataka. ‘Svojstva’ se formulišu preko logičkih izraza koje sada uvodimo.

> 4 == 4 # Da li su obe strane jednake? [1] TRUE # TRUE je konstanta u R-u. > 4 == 5 [1] FALSE # FALSE je konstanta u R-u. > 4 == 3 + 1 [1] TRUE > cos(pi/2) == 0 # UPOZORENJE: Nikad ne treba upoređivati dve

#numeričke vrednosti sa ==. Umesto toga proveriti da li #je apsolutna vrednost od cos(pi/2) manja od dovoljno #malog broja koji predstavlja prag vrednosti.

[1] FALSE > 3 <= 4 [1] TRUE > 5 > 2*2 [1] TRUE > 5 > 2+3 [1] FALSE > 4 != 3 # ! je negacija, != znači ‘nije jednako’. [1] TRUE > 3 != 3 [1] FALSE > 2 != 3 [1] TRUE > TRUE & TRUE # & je znak za logičko I. Rezultat je TRUE ako su oba

# izraza tačna. [1] TRUE > TRUE & FALSE [1] FALSE > TRUE | FALSE # | je znak za logičko ILI. Rezultat je TRUE ako je bar

# jedan od izraza tačan. [1] TRUE > FALSE | FALSE [1] FALSE

Page 6: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

6

> FALSE | TRUE [1] TRUE > 5 > 3 & 0 != 1 [1] TRUE > 5 > 3 & 0 != 0 [1] FALSE > ! TRUE # ! je znak za logičko NE. Rezultat od !(izraz) je TRUE

# ako i samo ako je ‘izraz‘ netačan. [1] FALSE > ! FALSE [1] TRUE > ! ( 5 == 5 ) [1] FALSE

1.4 Ispisivanje i crtanje

Objekti se ispisuju sa print(). U interaktivnom modu R-a '> print(x)' je isto što i ‘> x‘. Komanda cat() vrši konkatenaciju svojih argumenata u jedan string karaktera i ispisuje ga. Komanda plot() crta funkcije i vektore.

> print(sqrt(2)) # isto što i '> x'(u interaktivnom modu) [1] 1.414214 > print(sqrt(2),digits=5) # ispisuje 5 cifara [1] 1.4142 # vidi ?format za više o formatiranju > sqrt(2) [1] 1.414214 # ako nije naglašeno drugačije, ispisuje 7 cifara > options(digits=10) # 10 cifara se ispisuje od sada > sqrt(2) [1] 1.414213562 > y <- 42 > cat("I odgovor je",y,"ako ne grešim.\n") # Oznakom \n prelazimo u novi red. I odgovor je 42 ako ne gresim. > cat("Danas je:\t",date(),"\n") # date() vraća današnji datum i vreme. Danas je: Fri Jan 01 06:00:00 2010

> plot(sin, from=-10, to=10) Ovde smo koristili ‘\n‘ za novi red i '\t' za ubacivanje taba – vidi ?Quotes za kompletnu listu.

Page 7: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

7

Histogram vektora v se crta sa hist(v). Komanda ecdf(v) vraća empirijsku kumulativnu distribuciju funkcije (‘ECDF’) vektora v.

> v <- c ( 1:7, rep(2,4), rep(3,6), rep(4,3), 6:7, 7, 7 ) > hist(v) > ecdf(v) # ecdf() vraća ecdf ali je ne ispisuje. Empirical CDF Call: ecdf(v) x[1:7] = 1, 2, 3, ..., 6, 7 > plot(ecdf(v))

1.5 Vektori

Page 8: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

8

Vektori predstavljaju nabrajanja proizvoljnih objekata. Za kreiranje vektora koristimo komande 'c', 'seq' i 'rep'.

> c(2,5,3,7) # poveže elemente u vektor [1] 2 5 3 7 > seq(from=1,to=10,by=3) # kreira niz od 1 do 10 sa korakom 3 [1] 1 4 7 10 > seq(from=3,to=7) # kraća forma za seq(from=3,to=7,by=1) [1] 3 4 5 6 7 > seq(1,11,3) # kraća forma za seq(from=1,to=11,by=3).

# Ovde je bitan redosled 1, 11 i 3! [1] 1 4 7 10 > seq(3,7) # kraća forma za seq(from=3,to=7). Ponovo je bitan

# redosled! [1] 3 4 5 6 7 > 3:7 # kraća forma za seq(from=3,to=7) [1] 3 4 5 6 7 > c(2:5, 3:7) [1] 2 3 4 5 3 4 5 6 7 > rep(3,5) # replicira prvi objekat (ovde je to 3) 5 puta [1] 3 3 3 3 3 > rep(0:2,3) [1] 0 1 2 0 1 2 0 1 2 > rep(7:9,2:4) # Ako su oba vektora iste dužine. [1] 7 7 8 8 8 9 9 9 9 # Ovde: Replicira 7 dva puta, 8 tri puta, 9 četiri puta

Koristimo elemenat vektora koristeći operator [].

> x <- c(12,15,13,17,11) > x[4] # Četvrti element vektora x. [1] 17 > x[3:5] # Podvektor sastavljen od trećeg, četvrtog i petog #

elementa vektora x. [1] 13 17 11 > x[-2] # Minus znači ‘bez’. [1] 12 13 17 11 > x[-(3:5)] # Svi elementi osim trećeg, četvrtog i petog. [1] 12 15

Standardne operacije na vektorima su element po element. U binarnoj operaciji, dužina jednog

vektora mora da bude umnožak dužine drugog. Primeri:

> c(2,5,3) + c(4,2,7) [1] 6 7 10 > c(2,5,3) * c(4,2,7) [1] 8 10 21 > 2 + c(2,5,3) # Isto kao c(2,2,2) + c(2,5,3) [1] 4 7 5 > 2 * c(2,5,3) # Isto kao c(2,2,2) * c(2,5,3) [1] 4 10 6 > c(2,5,3)^2 # Isto kao c(2,5,3) c(2,2,2)

Page 9: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

9

[1] 4 25 9 > c(2,5,3) c(3,2,1) [1] 8 25 3 > c(3,2) * c(2,5,3,4) # Isto kao c(3,2,3,2) * c(2,5,3,4) [1] 6 10 9 8 > c(2,5,3,4) c(3,2) # Isto kao c(2,5,3,4) c(3,2,3,2) [1] 8 25 27 16 > c(3,2) c(2,5,3,4) [1] 9 32 27 16 > exp( c(0,1,log(5)) ) [1] 1.000000 2.718282 5.000000 > sum(5:7) # 5 + 6 + 7 [1] 18 > prod(4:6) # 4 * 5 * 6 [1] 120 > x <- 1:5 > x > 3 # Koji elementi su veći od 3 [1] FALSE FALSE FALSE TRUE TRUE > (x %% 2) == 1 # Koji elementi su parni [1] TRUE FALSE TRUE FALSE TRUE

Standardne operacije na vektorima su po elementima. U binarnom sistemu, dužina jednog vektora

pomnožena je dužinom drugog vektora. Primer:

> c(2,5,3) + c(4,2,7)

[1] 6 7 10 > c(2,5,3) * c(4,2,7) [1] 8 10 21 > 2 + c(2,5,3) # Isto kao c(2,2,2) + c(2,5,3) [1] 4 7 5 > 2 * c(2,5,3) # Isto kao c(2,2,2) * c(2,5,3) [1] 4 10 6 > c(2,5,3)^2 # Isto kao c(2,5,3) c(2,2,2) [1] 4 25 9 > c(2,5,3) c(3,2,1) [1] 8 25 3 > c(3,2) * c(2,5,3,4) # Isto kao c(3,2,3,2) * c(2,5,3,4)

[1] 6 10 9 8 > c(2,5,3,4) c(3,2) # Isto kao c(2,5,3,4) c(3,2,3,2) [1] 8 25 27 16 > c(3,2) c(2,5,3,4) [1] 9 32 27 16 > exp( c(0,1,log(5)) ) [1] 1.000000 2.718282 5.000000 > sum(5:7) # 5 + 6 + 7 [1] 18 > prod(4:6) # 4 * 5 * 6 [1] 120 > x <- 1:5 > x > 3 # Elementi koji su > 3

Page 10: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

10

[1] FALSE FALSE FALSE TRUE TRUE > (x %% 2) == 1 # Elementi koji su neparni [1] TRUE FALSE TRUE FALSE TRUE

Snažne odlike R-a su indeksranje sa logičkim indeksima vektora. Time, mi možemo izabrati pomoćni

vektor koji se sastoji od svih elemenata sa određenim svojistvima.

> v <- c(12,15,13,17,11) > v[c(TRUE,FALSE,TRUE,TRUE,FALSE)] [1] 12 13 17 > v[c(TRUE,FALSE,TRUE)] # Kraći indeksi vektora su dopunjeni sa 'FALSE' [1] 12 13 > v[c(TRUE,FALSE,TRUE,TRUE,FALSE,TRUE,TRUE)] [1] 12 13 17 NA NA > v>12 [1] FALSE TRUE TRUE TRUE FALSE > v[v>12] [1] 15 13 17 > v<=16 & (v%%2)==1 [1] FALSE TRUE TRUE FALSE TRUE > v[ v<=16 & (v%%2)==1 ] [1] 15 13 11 > v[ v>=13 | (v%%2)==0 ] [1] 12 15 13 17 > v[v>12] <- 0 # Skup svih elemenata većih od 12 do 0 > v [1] 12 0 0 0 11 > v[v==0] <- 2 # Dodeliti 2 svim elementima koji su jednaki 0 > v [1] 12 2 2 2 11 > v==2 [1] FALSE TRUE TRUE TRUE FALSE Ovde su izabrane komande na vektorima. > v <- c(13, 15, 11, 12, 19, 11, 17, 19) > length(v) # Vraća dužinu vektora v [1] 8 > rev(v) # Vraća okrenut vektor [1] 19 17 11 19 12 11 15 13 > sort(v) # Vraća sortiran vektor [1] 11 11 12 13 15 17 19 19 > sort(v,partial=4) # Vraća vector I četvrti element [1] 11 11 12 13 19 15 17 19 # Slaže se sa sortiranim vektorom > indexvec <- order(v) > indexvec # Indeksi vektora su sortirani [1] 3 6 4 1 2 7 5 8 > v[indexvec] # v[ order(v) ] je isti kao sort(v) [1] 11 11 12 13 15 17 19 19 > duplicated(v) # Identifikuje duple elemente [1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE

Page 11: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

11

> unique(v) # Vraća vector bez duplih elemenata [1] 13 15 11 12 19 17 > rank(v) # Vraća rang elemenata vektora v [1] 4.0 5.0 1.5 3.0 7.5 1.5 6.0 7.5 > some <- ( v > 13 ) > some [1] FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE > any(some) # Vraća TAČNO ako je na poslednjem mestu TAČNO; inače NETAČNO [1] TRUE > all(some) # Vraća TAČNO ako je na svim mestima TAČNO; inače NETAČNO [1] FALSE > which(some) # Vraća indekse na kojima su TAČNO [1] 2 5 7 8 > which.max(v) # Vraća indeks maksimalnog elementa vektora [1] 5 > which.min(v) # Vraća indeks minimalnog elementa vektora [1] 3

1.6 Matrice

Matrice su obično kreirane sa 'matrix', pretvaranjem vektora u matricu ili spajanjem skupa vektora. > m <- matrix( data = 1:8, nrow=4, ncol=2 ) > m [,1] [,2] [1,] 1 5 [2,] 2 6 [3,] 3 7 [4,] 4 8 > matrix ( 1:8,4,2 ) # Isto kao matrica( data = 1:8, nrow=4, ncol=2 ) Indeksiranje je “vrsta po koloni” > m[3,2] # Prikazuje element treće vrste i druge kolone. [1] 7 > m[2,] # Druga vrsta [1] 2 6 > m[,2] # Druga kolona [1] 5 6 7 8 > m[2:3,1:2] # Podmatrica [,1] [,2] [1,] 2 6 [2,] 3 7 Komanda 'matrix' podrazumeva vektore podataka po kolonama, što znači, prva kolona se prva puni.. Ako želite podatke po vrstama, onda dodati 'byrow = TRUE'. > y <- matrix( data = 1:8, nrow=4, ncol=2, byrow = TRUE ) > y [,1] [,2]

Page 12: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

12

[1,] 1 2 [2,] 3 4 [3,] 5 6 [4,] 7 8 > t(y) # t(y) je transponovana matrica y [,1] [,2] [,3] [,4] [1,] 1 3 5 7 [2,] 2 4 6 8 > z <- as.matrix(1:6) # Pretvaranje vektora 1:6 u matricu sa jednom kolonom > z [,1] [1,] 1 [2,] 2 [3,] 3 [4,] 4 [5,] 5 [6,] 6 > dim(z) [1] 6 1 > dim(z) <- c(2,3) # Pretvaranje matrice 6x1 u matricu 2x3 > z [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 > dim(z) [1] 2 3 > is.matrix( 1:6 ) [1] FALSE > is.matrix( as.matrix(1:6) ) [1] TRUE > cbind(1:3,5:7) # Vezuje vektore po kolonama [,1] [,2] [1,] 1 5 [2,] 2 6 [3,] 3 7 > rbind(1:3,5:7,10:12) # Vezuje vektore po kolonama [,1] [,2] [,3] [1,] 1 2 3 [2,] 5 6 7 [3,] 10 11 12 Komanda 'diag' kreira dijagonalnu matricu. > diag(1,nrow=3,ncol=3) # Kreira 3x3 jediničnu matricu. [,1] [,2] [,3] # Dijagonalna matrica sa tri kolone I tri vrste [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 > diag(3) # Isto kao diag(1,nrow=3,ncol=3) > diag(5:7,3,4) [,1] [,2] [,3] [,4]

Page 13: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

13

[1,] 5 0 0 0 [2,] 0 6 0 0 [3,] 0 0 7 0 Kao I na vektorima, standardne operacije na matricama definisane su po elementima. > m1 <- matrix(1:6,nrow=3) ; m1 [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 > m2 <- matrix(16:11,nrow=3) ; m2 [,1] [,2] [1,] 16 13 [2,] 15 12 [3,] 14 11 > m1 + m2 [,1] [,2] [1,] 17 17 [2,] 17 17 [3,] 17 17 > m1 * m2 [,1] [,2] [1,] 16 52 [2,] 30 60 [3,] 42 66 Zapis poput m1*m2 nije matrični proizvod. Operator za matrično množenje je '%*%'. Proizvod m x n matrice y, i k x l matrice z je definisan samo ako je n == k. Po definiciji, y% * %z je

> mat1 <- matrix(1:6,2,3) > mat2 <- matrix(5:0,2,3) > mat1 [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 > mat2 [,1] [,2] [,3] [1,] 5 3 1 [2,] 4 2 0 U matričnom množenju vektora i matrice, vector je prikazan kao vrsta vektora za 'vektor %*% matrica' i kao kolona vektora za 'matrica %*% vektor'. Pravilo za 'vektor %*% vektor' se interpretira kao skalarni proizvid 'vrsta vektora %*% kolona vektora'. > mat3 <- t(mat2) ; mat3 [,1] [,2] [1,] 5 4 [2,] 3 2 [3,] 1 0

Page 14: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

14

> mat1 %*% mat3 # 2 x 3 matrica puta 3 x 2 matrica [,1] [,2] [1,] 19 10 [2,] 28 16 > mat3 %*% mat1 # 3 x 2 matrica puta 2 x 3 matrica [,1] [,2] [,3] [1,] 13 31 49 [2,] 7 17 27 [3,] 1 3 5 > v <- 7:9 > v %*% mat3 # v je interpretirano kao vrsta vektora [,1] [,2] [1,] 14 8 > v %*% v # Skalarni proizvod v sa samim sobom [,1] [1,] 194 # kolona vektora %*% vrsta vektora mora da se sprovede > as.matrix(v)%*% t( as.matrix(v) ) [,1] [,2] [,3] [1,] 1 2 3 [2,] 2 4 6 [3,] 3 6 9 Zapisi vektora nisu uvek interpretirani kao vrsta vektora niti su uvek interpretirani kao kolone vektora. Interpretacija zavisi od vrednosti funkcije. 1.7 Tipovi podataka u R-u

Sve promenljive i objekti su klasifikovani kao (npr. matrice, liste, skupovi podataka) i vrste podataka kao (npr. logički podaci, numerički podaci, kompleksni podaci, simboli) koji su vrste tipova podataka koje objekti sadrže. Tipovi podataka u R: Tip podatka Opis Primer logički TAČNO ili NETAČNO TAČNO, NETAČNO numerički celi i realni brojevi 5, -2, 3.1415, sqrt(2) kompleksni kompleksni brojevi 2.1+3i, 5+0i simboli niz karaktera "Ovo je tekst", "5" Tipovi mogu biti pretvoreni komandama as.logical(), as.numeric(), as.complex() i as.character(). Pretvaranje (zvano prinuda) tipova podataka obično ne rade korisnici ali implicitno R uradi tamo gde je potrebno. Pimetimo da implicitno pretvaranje ide u pravcu logički →numerički → kompleksno → simbolički. Tip podataka promenljive proverava se komandama is.logical(), is.numeric(), is.complex(), is.character(). Tip podataka promenljive se pronalazi pomoću mode() a klasa promenljive sa class(). Primeri: > x <- TRUE; mode(x) [1] "logical" > as.numeric(TRUE) ; as.numeric(FALSE) [1] 1 # Interna reprezentacija TRUE je 1 [1] 0 # Interna reprezantica FALSE je 0 > c("1.0",2) # 2 je implicitno prevedeno u 'character' [1] "1.0" "2"

Page 15: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

15

> v <- c(1,2,2,2,5); as.numeric(v==2) [1] 0 1 1 1 0 > sum(v==2) # Isto kao sum( as.integer(v==2) ) > [1] 3 # Koliko elemenata je jednako 2? > 2*c(TRUE, FALSE) # Implicitno prevedeno logički -> numerički tip [1] 2 0 > as.numeric(c("1.0", "2)) # Eksplicitno prevedeno simbol -> numerički tip [1] 1 2 > 2*c("1.0","2") # Implicitno prevođenje logički -> numerički tip ne radi Error in 2 * c("1.0", "2") : ne numerički argument za binarni operator

2. Osnovne statistike u R-u

Neke raspodele implementirane u R-u

R programski jezik omogućava rad sa sledećim raspodelama:

Raspodela Komanda u R-u

beta raspodela beta

binomna raspodela binom

Košijeva raspodela Cauchy

Hi-kvadratna raspodela chisq

eksponencijalna raspodela exp

Fišerova raspodela f

gama raspodela gamma

geometrijska raspodela geom

hipergeometrijska raspodela hyper

log-normalna raspodela lnorm

logistička raspodela logis

multinomijalna raspodela multinom

normalna raspodela sa više promenljivih mvnorm

negativna binomna raspodela nbinom

normalna raspodela norm

Poasonova raspodela pois

rapodela Vilkoksove statisktike ranga signrank

raspodela Vilkoksove statistike sume ranga Wilcox

Studentova t-raspodela t

uniformna raspodela unif

Page 16: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

16

Vejlbulova raspodela weilbull

Odavde, normalna raspodela se najčešće koristi, mahom zbog njene veze sa centralnom graničnom

teoremom. Često se koriste i binomna i uniformna raspodela, dok se hi-kvadratna, Studentova i

Fišerova raspodela koriste u standardnim statističkim testovima. Ostale raspodele se u nastavku

neće pominjati.

Za svaku raspodelu, R nudi sledeće četiri komande:

dxxx: funkcija gustine raspodele xxx,

pxxx: funkcija raspodele date raspodele xxx,

qxxx: kvantilna funkcija raspodele xxx,

rxxx: generator slučajnih brojeva iz raspodele xxx,

gde se za svaku pojedinačnu raspodelu odgovarajuća komanda u R-u (videti tabelu) stavi na mesto

“xxx”. Tako je, na primer dnorm komanda koja daje gustinu normalne raspodele, dok dt daje

gustinu Studentove t-raspodele.

Normalna raspodela

Funkcija gustine normalne raspodele sa zadatim očekivanjem i standardnom devijacijom data je sa:

Očekivana vrednost slučajne promenljive sa ovom raspodelom je , a njena varijansa .

Standardizovana normalna raspodela ima očekivanu vrednost 0 i standardnu devijaciju 1. Dakle,

odgovarajuća funkcija gustine je dnorm(x, mean=0, sd=1). Ako 'mean' i 'sd' nisu eksplicitne u okviru

dnorm() komande, uzimaju se vrednosti 0 i 1, respektivno. Dakle, dnorm(x) je ekvivalentno sa

dnorm(x, mean=0, sd=1), i njenoj funkciji raspodele pnorm dodeljuje se vrednost:

Kvantilna funkcija raspodele za predstavlja najmanju vrednost x takva da je

. Formalnije:

Primetimo da se u slučaju apsolutno neprekidnih raspodela kvantilna funkcija svodi na inverznu

funkciju funkcije raspodele.

Komanda rnorm(n) generiše slučajan uzorak obima n standardizovane normalne raspodele. Imajući

ovo na umu, podsetimo se da se 68% podataka uzorka iz realizovane standardizovane normalne

Page 17: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

17

raspodele nalazi u rasponu jedne standardne devijacije, a čak 95% u rasponu dve standardne

devijacije:

> pnorm(1)-pnorm(-1) #68% podataka

[1] 0.6826895

> pnorm(2)-pnorm(-2) #95% podataka

[2] 0.9544997

> pnorm(3)-pnorm(-3) #99.7% podataka

[3] 0.9973002

Još jedno svojstvo kojeg se treba podsetiti jeste da ako je , onda je:

I obrnuto važi, svako obeležje sa nestandardizovanom normalnom raspodelom može se

standardizovati:

Ako želimo plotovati komandu dnorm (standardizovanu i nestandardizovanu) između -4 i 4 sa

isprekidanom linijom debline 3, možemo uneti:

> # Histogram 10000 simuliranih vrednosti

> # i njihov odnos sa funkcijom gustine,

> # probability=TRUE crta histogram verovatnoca, ne vrednosti,

> # breaks=seq(...) odredjuje koje vrednosti koji stubic broji:

> hist(rnorm(10000),col="grey",probability=TRUE,breaks=seq(-5,to=5,by=0.2))

> plot( dnorm, from=-4,to=4,add=TRUE ,lwd=3, lty="dashed")

i odmah zatim:

> # skalirana nestandardizovana normalna raspodela

> # lwd je linewidth, lty je linestyle

> hist( (rnorm(10000,mean=5,sd=10)-5) / 10,col="grey",probability=TRUE,

Page 18: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

18

+ breaks=seq(-5,to=5,by=0.2) )

> plot( dnorm, from=-4,to=4,add=TRUE ,lwd=3, lty="dashed")

Binomna raspodela

Znamo da je binomna raspodela zapravo raspodela slučajne promenljive koja broji broj uspešnih ogleda iz serije ogleda. Preciznije, funkcija gustine dbinom(k,m,p) daje verovatnoću da su od ukupnih m ogleda k uspešno realizovane, ako je verovatnoća uspešnosti ogleda . Funkciji gustine binomne raspodele dodeljuje se vrednost:

Očekivana vrednost je pritom mp, dok je varijansa mp(1-p). Funkciji raspodele binomne raspodele

dodeljuje se vrednost:

Pritom, kvantilna funkcija raspodele qbinom(q,m,p) za predstavlja najmanju vrednost x

takvu da je dbinom (x,m,p) veće ili jednako od q. Komanda rbinom(n,m,p) generiše slučajan uzorak

obima n ove raspodele:

> dbinom(1,3,1/6) # Verovatnoca da ce pasti jedna sestica,

# ako se kocka baca 3 puta

[1] 0.3472222

> dbinom(0,1,1/2) # Verovatnoca da ce pasti pismo pri bacanju novcica

[1] 0.5

> dbinom(1,1,1/2) # Verovatnoca da ce pasti glava pri bacanju novcica

[1] 0.5

Page 19: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

19

> sum(dbinom(5:10,60,1/6)) # Verovatnoca da padne izmedju pet i deset

# sestica, ako se kocka baca 60 puta

[1] 0.5631944

> sum(dbinom(0:60,60,1/6)) # Ukupna suma pojedinacnih verovatnoca

[1] 1

> qbinom(0.5833866,60,1/6)

[1] 11

> qbinom(0.5833865,60,1/6) # qbinom se svodi na inverznu funkciju od pbinom

[1] 10

> qbinom(pbinom(0:29,60,1/6),60,1/6) == 0:29

[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

TRUE

16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

TRUE

> rbinom(8,60,1/6)

[1] 12 10 11 11 4 12 7 11

Poslednja komanda, rbinom(8,60,1/6) daje ispis osam brojeva, od kojih svaki predstavlja broj

sestica koje su pale nakon bacanja kocke 60 puta.

Uniformna raspodela

Uniformna raspodela na intervalu [a,b] ima funkciju gustine:

Standardizovana uniformna raspodela definisana je nad intervalom [0,1], tako da joj je funkcija

gustine data sa dunif(x, min=0, max=1). Naravno, ako se minimalna i maksimalna vrednost ne

naglase, one uzimaju vrednosti 0 i 1, respektivno. Funkciji raspodele se dodeljuje vrednost:

Očekivana vrednost slučajne promenljive sa raspodelom je 1/2 a varijansa 1/12.

Ispitivanje raspodele zadatog skupa podataka

mean(v) računa uzoračku srednju vrednost

vektora podataka v,

var(v) računa uzoračku varijansu

, n=length(v),

sd(v) računa standardnu devijaciju uzorka , n=length(v)

cov(v,w) računa uzoračku kovarijansu

za zadata dva

vektora podataka v i w i n=length(v)=length(w),

Page 20: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

20

cor(v,w) računa uzorački koeficijent korelacije za vektore v i w,

median(v) ispisuje vrednost medijane uzorka,

quantile(v) ispisuje kvartile uzorka v,

summary(v) ispisuje srednju vrednost, varijansu, medijanu i kvartile uzorka,

boxplot(v) pravi box-plot i whisker plot,

hist(v) pravi histogram vrednosti u v,

ecdf(v) vraća emirijsku funkciju raspodele v.

Podsetimo se šta su kvartili i medijana. Neka je . Ako se podaci sortiraju u varijacioni niz,

iza kvantila reda p nalazi se p-ti deo svih vrednosti u vektoru. Za više detalja, može se pozvati

``?quantile''. Kvantil reda 0.25 naziva se prvim kvartilom, reda 0.5 medijanom, a reda 0.75 trećim

kvartilom. Kvartili dakle, dele varijacioni niz na četiri dela.

U nastavku slede primeri:

> mean(c(1,2,21)) # (1+2+21)/3

[1] 8

> mean(c(0,1,2,21)) # (0+1+2+21)/4

[1] 6

> mean(c(-1,0,1))

[1] 0

> var(c(-1,0,1)) # ( (-1)^2+1^2 ) / ( 3-1 )

[1] 1

> var(c(-2,0,2))

[1] 4

> var(rep(1,4))

[1] 0

> mean(rep(1,4))

[1] 1

> mean(1:4) # ( 1+2+3+4 ) / 4

[1] 2.5

> cov(1:4,1:4) # isto sto i var(1:4)

[1] 1.666667 # ( (1-2.5)^2+(2-2.5)^2+(3-2.5)^2+(4-2.5)^2 ) / ( 4-1 )

> cor(1:4,1:4) # = cov(1:4,1:4) / sqrt( var(1:4)*var(1:4) )

[1] 1

> cor(1:4,-1:4)

[1] -1

> cor(1:4,17:20)

[1] 1

> cor(1:4,20:17)

[1] -1

> median(c(1,2,9,1100))

[1] 5.5

> quantile(c(1,2,9,1100))

0% 25% 50% 75% 100%

1.0 1.75 5.50 281.75 1100.00

> summary(c(1,2,15))

Min. 1st Qu. Median Mean 3rd Qu. Max.

1.0 1.5 2.0 6.0 8.5 15.0

> mean(rnorm(1000000))

[1] 0.0004818741

Page 21: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

21

Box plot i whisker plot mogu postlužiti za vizualizaciju podataka i kvartila podataka. Horizontalna linija u sredini pokazuje medijanu podataka. Horizontalna linija nad medijanom pokazuje treći kvartil i horizontalna linija ispod medijane pokazuje prvi kvartil. Sama kutija (box) pokazuje gde se središnjih 50% podataka u varijacionom nizu nalaze (interkvartilno rastojanje), a dužina svake vertikalne linije (whisker) odgovara jednoj i po dužini interkvartilnog rastojanja. Svi podaci van ovih linija nazivaju se autlajeri (outliers) i označeni su kružićima na boxplotu.

>summary(c(1,2,1500))

Min. 1st Qu. Median Mean 3rd Qu. Max.

1.0 1.5 2.0 501.0 751.0 1500.0

> boxplot(c(1,2,1500))

> summary(rnorm(10000))

Min. 1st Qu. Median

Mean 3rd Qu. Max.

-3.858000 - 0.690200

0.005504 - 0.003528

0.667200 3.944000

>

boxplot(rnorm(10000))

> summary(rbinom(10000,60,1/6))

Min. 1st Qu. Median Mean 3rd Qu. Max.

1.00 8.00 10.00 10.01 12.00 22.00

> summary(runif(1000000))

Min. 1st Qu. Median Mean 3rd Qu. Max.

1.036e-06 2.496e-01 5.002e-01 5.000e-01 7.506e-01 1.000e+00

Page 22: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

22

> hist(rnorm(10000))

> plot(ecdf(rnorm(100)))

Generatori slučajnih brojeva

Slučajni brojevi kakvi se mogu generisati u R-u zapravo su pseudo-slučajni brojevi. Postoji više razloga zašto je to tako. Najpre, slučajna promenljiva sa normalnom raspodelom može uzimati kontinuum mnogo potencijalnih vrednosti, ali kompjuteri mogu prikazivati samo konačno mnogo vrednosti. Takođe, na ovaj način se dobijaju rezultati koje je moguće reprodukovati, zato što pseudo-slučajne brojeve odlikuju sledeće osobine:

(gotovo da) nema ponavljanja u generisanom nizu brojeva,

slučajan niz može se reprodukovati,

slučajan niz se generiše što je moguće brže.

Generator pseudo-slučajnih brojeva kreće od takozvanog seed-a, koristići komandu set.seed(). Niz

se tada generiše primenom poznate determinističke funkcije u svakoj iteraciji. Stoga, ako generator

krene od istog seed-a, on će generisati isti niz brojeva. Po pravilu, ako se generator eksplicitno ne

definiše, R koristi Mersenne-Twister generator (Matsumoto i Nishimira 1998). Ovo se može menjati

uz pomoć komande RNGkind(), videti ``?RNGkind''. Ako se ni seed ne naglasi, generator kreće od

vremenskog trenutka kada se R pokrenuo. Pogledajmo primere:

> rnorm(3)

[1] 1.0844412 -2.3456977 0.4291247

> set.seed(1234) # koristi ovaj seed za generator

> rnorm(3)

[1] -1.2070657 0.2774292 1.0844412

> rnorm(3)

[1] -2.3456977 0.4291247 0.5060559

Page 23: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

23

> set.seed(1234) # restartuj generator sa ovim seedom

> rnorm(3) # dobijaju se iste vrednosti kao ranije

[1] -1.2070657 0.2774292 1.0844412

> rnorm(3)

[1] -2.3456977 0.4291247 0.5060559

> RNGkind("Wichmann-Hill") # koristi drugaciji generator

> set.seed(1234) # kreni od istog seed-a

> rnorm(3) # vrednosti se sada razlikuju zbog drugacijeg

generatora

[1] -0.2160838 0.8444022 0.6975076

> RNGkind("Mersenne-Twister")

> set.seed(1234)

> rnorm(3)

[1] -1.2070657 0.2774292 1.0844412

3 Čitanje i unos podataka

3.1 Liste

Skupovi podataka su reprezentovani kao takozvani okviri podataka (data frames) u R. Sad

uvodimo specijalne liste. Liste su kolekcije proizvoljnih objekata. Tako npr. lista može da se

sastoji od matrice, vektora, logičke vrednosti, stringa (niza karaktera)... Liste kreiramo sa list()

komandom. Elementima liste pristupamo sa [[]] - operatorom. I bitno je razlikovati opeartor [[]]

od [].

npr.

> L <- list( c(1,5,3), matrix(1:6, nrow=3), c("Hello", "world") )

> L [[1]] [1]1 5 3

[[2]]

[,1] [,2]

[1,] 1 4 [2,] 2 5

[3,] 3 6

[[3]]

[1] "Hello" "world"

> L[[1]] # Prvi element iz liste L

[1] 1 5 3

> L[[2]][2,1] # Element [2,1] izdrugog elementaliste L [1] 2 # Primetimo da je L[[2]] matricačijim elementima možemo pristupiti sa []

Page 24: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

24

> L[[c(3,2)]] # Rekurzivno: 2. komponentu iz 3. elementaiz L, (string u ovom slučaju)

[1] "world"

> list(1:4,7:8) # Lista sačinjena od dva vektora [[1]] [1] 1 2 3 4

[[2]]

[1] 7 8 > c(1:4,7:8) # c() povezuje (spaja) dva vektora u jedan

[1] 1 2 3 4 7 8

# kada povezuje liste, c() spaja liste kao u lanac > L2 <- c( list(1:3,2:4), list( c("Hello","world"), c(1,5,3) ) ) > L2

[[1]] [1] 1 2 3

[[2]] [1] 2 3 4

[[3]]

[1] "Hello" "world" [[4]]

[1] 1 5 3

> mode(L2) # mode() pokazuje tip objekta koji se nalazi u listi [1] "list" # zaista, L2 je lista

> L2[[2]] <- NULL # postavlja drugi elemenat liste u NULL > L2 # ekvivalentno je brisanju drugog elementa liste

[[1]] # u ovom slucaju to je bio vektor (2,3,4) [1] 1 2 3

[[2]] [1] "Hello" "world"

[[3]] [1] 1 5 3

Listama možemo alternativno pristupati imenom promenljivih umesto brojem. U primeru

navedenom iznad, moramo se setiti da je drugi element u L bila matrica. Sledeća definicija je

Page 25: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

25

lakša za pamćenje jer ćemo elementima liste pristupati njihovim imenom. Elementi iz liste su povezani sa $-operatorom. Dodelimo imena elementima L liste.

> L <- list( v=c(1,5,3), m=matrix(1:6, nrow=3), text=c("Hello", "world") )

> L$v [1] 1 5 3

> L$m [,1] [,2]

[1,] 1 4 [2,] 2 5 [3,] 3 6

> L$text

[1] "Hello" "world" > L$m[2,1] # L$m je matrica čijim elementima možemo pristupiti sa []

[1] 2

> L$text[2] [1] "world"

> L[[1]] # bez obzira što smo elementima liste dodelili imena pristup sa brojevima i dalje funkcioniše [1] 1 5 3

3.2 Okviri podataka

Okviri podataka su tipične reprezentacije skupova podataka u R-u. Okviri podatakasu liste sa ograničenjem da su svi elementi vektori iste dužine. Komandom data.frame() kreiramo okvir

podataka.

> group <- data.frame(name = c("Hans", "Caro", "Lars", "Ines", "Samira","Peter", "Sarah"), gender = c("male", "female", "male", "female","female", "male", "female"), favourite_colour = c("green", "blue", "yellow","black", "yellow", "green", "black"),

income = c(800,1233,2400,4000,2899,1100,1900) )

> group name gender fav_col income 1 Hans male green 800

2 Caro female blue 1233 3 Lars male yellow 2400

4 Ines female black 4000 5 Samira female yellow 2899 6 Peter male green 1100

7 Sarah female black 1900

Page 26: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

26

> group$income [1] 800 1233 2400 4000 2899 1100 1900

> group$gender[2] [1] female

Levels: female male

> group$name[,1] name 1 Hans

2 Caro 3 Lars

4 Ines 5 Samira 6 Peter

7 Sarah

> group$name [1] Hans Caro Lars Ines Samira Peter Sarah Levels: Caro Hans Ines Lars Peter Samira Sarah

> group[1,]

name gender favourite_colour income 1 Hans male green 800

Okviri podataka obično sadrže velike skupove podataka koje je teško posmatrati, upravo zbog obima. Komanda str() daje nam pregled svih promenljivih u okviru podataka. Komanda

summary() ispisuje sumiran izveštaj datog okvira podataka. > str(group)

'data.frame': 7 obs. of 4 variables: $ name : Factor w/ 7 levels "Caro","Hans",..: 2 1 4 3 6 5 7

$ gender : Factor w/ 2 levels "female","male",..:3 1 2 1 1 3 1 $ favourite_colour: Factor w/ 4 levels "black","blue",..: 3 2 4 1 4 3 1 $ income : num 800 1233 2400 4000 2899 ...

> summary(group)

name gender favourite_colour income Caro :1 female :4 black :2 Min. : 800 Hans :1 male :3 blue :1 1st

Qu.:1166 Ines : 1 green :2 Median

:1900 Lars : 1 yellow:2 Mean :2047

Page 27: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

27

Peter :1 3rdQu.:2650 Samira:1 Max. :4000

Sarah :1

Pisanje komande 'group$' iznova i iznova je naporno. Da bismo uštedeli nešto vremena koristimo naredbu attach(group). Ova komanda kao da nalepi 'group' u putanju pretrage R-a (zamislimo

mesto gde R traži varijable) tako da možemo pristupiti svim elementima bez pominjanja 'group$'.

> gender[2] Error: object "gender" not found

> attach(group) # poveže (kopira) 'group' u putanju pretrage (search path)

> gender[2] # 'gender' je sada poznata promenljiva [1] female Levels: female male

> name[3]

[1] Lars Levels: Caro Hans Ines Lars Peter Samira Sarah

> name[3] <- "Samira" # ova naredba vrši izmene samo u kopiji group-e u putanji pretrage, ne i našu # promenljivu na kojoj radimo

> name [1] Hans Caro Samira Ines Samira Peter Sarah

Levels: Caro Hans Ines Lars Peter Samira Sarah

> group$name # originalni okvir podataka 'group' ostaje nepromenjen [1] Hans Caro Lars Ines Samira Peter Sarah Levels: Caro Hans Ines Lars Peter Samira Sarah

> detach(group) # odvoji 'group' od putanje pretrage (komandu detach možemo

shvatiti kao inverznu > name[3] # komandi attach), posle detach(group), 'name' nam nije poznata Error: object "name" not found

Posmatranjem 'group' možemo pomisliti da ljudi čija je omiljena boja 'žuta' imaju viša primanja.

Da bismo istražili ovo, treba da selektujemo podskup 'group' sa omiljenom bojom 'žuta'. Ovo možemo učiniti na sledeći način:

> group[group[["favourite_colour"]]=="yellow",] # pristupamo koloni koja ima ime fav_col==yellow

name gender favourite_colour income 3 Lars male yellow 2400

Page 28: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

28

5 Samira female yellow 2899

Do istog rešenja možemo doći na jednostavniji način kroz naredbu subset():

> subset(group,favourite_colour=="yellow") Primetimo, kolona omiljena boja je identički jednaka boji ‘žuta’ , pa nam nije potrebna. Brišemo

kolonu tako što selektujemo sve sem treće kolone.

> subset(group,favourite_colour=="yellow",select=-3) name gender income 3 Lars male 2400

5 Samira female 2899

Takođe može da nam padne napamet da napravimo podskupkoji čine ljudi čija je omiljena boja 'green' ili 'black'. Tada bi podskupfavourite_colour {green, black} bio praktičan. Simbol je

predstavljen u R sa operatorom %in%.

> subset( group, favourite_colour %in% c("green","black") )

name gender favourite_colour income 1 Hans male green 800

4 Ines female black 4000 6 Peter male green 1100 7 Sarah female black 1900

Da li sad podgrupa sa omiljenom bojom 'žuta' ima viši prihod? Možemo da izračunamo

očekivanje od 'yellow'-group prihoda, pa dobijemo da je očekivani prihod veći nego kod ostalih grupa.Naravno, ovo ne daje odgovor na pitanje, jer je obim uzorka premali da daje bilo kakve značajne rezultate.

> yellow_group <- subset(group,favourite_colour=="yellow")

> mean(yellow_group$income) [1] 2649.5

> subset( group, favourite_colour %in% c("green","black") )$income [1] 800 4000 1100 1900

> mean( group$income ) [1] 2047.429

> mean( subset(group,favourite_colour != "yellow")$income ) [1] 1806.6

> mean( subset(group,favourite_colour %in% c( "green","blue","black"))$income )

Page 29: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

29

[1] 1806.6 # je ekvivalentno sa prethodnom komandom

Takođe, moguće je podeliti okvir podataka u listu sačinjenu od respektivnih podgrupa. Na primer možemo podeliti 'group' prema 'favourite colour' (omiljenoj boji). Ovo radimo naredbom split()

koja vraća listu od okvira podataka. Komanda unsplit() vraća unazad ono što smo učinili sa komandom split() i ona povezuje nazad listu od okvirova podatakau jedan okvir podataka.

> L <- split(group, group$favourite_colour) > L # L je lista okvira podataka

$black name gender favourite_colour income 4 Ines female black 4000

7 Sarah female black 1900

$blue name gender favourite_colour income 2 Caro female blue 1233

$green

name gender favourite_colour income 1 Hans male green 800 6 Peter male green 1100

$yellow

name gender favourite_colour income 3 Lars male yellow 2400 5 Samira female yellow 2899

> all( unsplit(L,group$favourite_colour)== group ) # identično?

[1] TRUE Ukoliko želimo da proširimo naš okvir podataka, to radimo komandom merge(). Sledi primer.

> snd_colour <- data.frame(favourite_colour=c("green","blue","yellow"), + second_colour=c("red","yellow","brown")) > merge(group,snd_colour,all.x=TRUE)

favourite_colour name gender income second_colour 1 black Ines female 4000 <NA> 2 black Sarah female 1900 <NA>

3 blue Caro female 1233 yellow 4 green Hans male 800 red

5 green Peter male 1100 red 6 yellow Lars male 2400 brown

Page 30: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

30

7 yellow Samira female 2899 brown

Primetimo da svi sa favourite colour=="green" imaju second colour=="red". Boja "black" nije povezana ni sa bilo kojom drugom bojom, pa respektivni unosi u proširenom okviru podataka

ostaju NA (not available (nedostupni podaci)). Za više o komandi merge(), pogledajmo ?merge ili help(merge).

3.3 NA, Inf, NaN, NULL

Skupovi podataka su često nekompletni. Ponekad postoje vrednosti koje iz nekih razloga nisu poznate. Ove vrednosti koje nedostaju pamte se kao NA (= not available). R je dobar u radu sa

nedostajućim podacima. Mnoge komande su prilagođeneza rad sa njima. Komanda za detektovanje nedostajućih vrednosti je is.na().

> v <- c( 1,3,NA,5 ) > v[1] <- NA

> v

[1] NA 3 NA 5 > is.na(v)

[1] TRUE FALSE TRUE FALSE

> 5*v [1] NA 15 NA 25

> v*NA [1] NA NA NA NA

> sum(v) [1] NA

> exp(v)

[1] NA 20.08554 NA 148.41316 > is.na(v)==FALSE

[1] FALSE TRUE FALSE TRUE

> w1 <- v[is.na(v)==FALSE] # uklanja sve nedostajuće vrednost iz vektora v > w1 # tj. definisali smo novi vektor w1 u koji smo smestili sve vrednosti iz v, koje

[1] 3 5 # nisu NA > w2 <- v[!is.na(v)] # isto kao w1

Page 31: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

31

Mnoge komande dozvoljavaju ignorisanje nedostajućih podataka. Ovo radimo modifikacijom 'na.rm=TRUE'(uklanja NA-ove) u komandama koje dozvoljavaju ovu modifikaciju.

> sum(v,na.rm=TRUE) # rm je skraćeno od remove

[1] 8 Ugrađene konstante Inf i -Inf su predstavljene sa i . Sve van određenog intervala R vidi kao

Inf ili -Inf. Ovaj interval zavisi od sistema (32bit or 64bit). Druga ugrađena konstanta je NaN

(not a number). Sva računanja koja nisu definisana rezultuju u NaN. > 1.7e308

[1] 1.7e+308

> 1.8e308 [1] Inf

> exp(709) [1] 8.218407e+307

> exp(710) [1] Inf

> 5/0

[1] Inf > exp(Inf)

[1] Inf

> Inf*(-2) [1] -Inf

> Inf*Inf [1] Inf

> 0/0 [1] NaN

> 0*Inf

[1] NaN > Inf –Inf

[1] NaN 'NULL' predstavlja null objekat (tj. 'there is no object' (ovaj objekat ne postoji)) u R. NULL često

vraćaju funkcije i izrazi čije vrednosti nisu definisane. Dakle, NaN je nedefinisana numerička vrednost i NULL često koristimo kao nedefinisan objekat.

Page 32: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

32

3.4 Uređivanje podataka

Kad je pozvan uz okvir podataka ili matricu, edit() otvara posebno tabelarno okruženje za uređivanje podataka. Ovo je zgodno za pravljenje malih promena pošto je skup podataka učitan.

Zapamtimo da edit(x) uređuje lokalnu kopiju objekta, i ne skladišti nov rezultat (tj. promene koje smo uneli) u nov objekat, tako da su sve promene izgubljene ukoliko ne snimimo uređeni skup

podataka. Nastavljamo sa demonstracijom na okviru podataka 'group' izpododeljka 3.2. > edit(group) # sve promene će biti izgubljene

> newgroup <- edit(group) # newgroup uzima vrednosti edit(group) > group <- edit(group) # promene su skladištene u group

> fix(group) # ekvivalentna komanda sa 'group <- edit(group)' Ako je edit() pozvan sa funkcijom, onda je editor otvoren sa funkcijom što nam dalje dozvoljava

uređivanje samog načina na koji je funkcija definisana.

3.5 Čitanjei pisanje okvira podataka Učitajmo okvir podataka iz fajla read.table(). Napišimo okvir podataka fajla sa komandom

write.table(). Tipičan poziv:

read.table("filename.txt",header=TRUE) write.table(dataframe, file="filename.txt")

Pre učitavanja naših podataka iz fajla u okvir podataka, moramo pripremiti naš fajl sa podacima. Podaci bi nam mogli izgledati otprilike ovako:

težinska_kat pušač životni_vek 3 0 50.5

3 0 52.8 3 1 54.7

3 0 56.0 2 0 58.1 2 1 60.2

2 0 62.8 2 0 64.5

1 1 66.3 1 0 68.4 1 0 70.2

1 1 72.1

Page 33: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

33

Pokrenimo Excel i otvorimo novu tabelu. Unesimo podatke kao u tabeli gore. Onda snimimo ovaj eksel fajl kao tekst na sledeći način. Otvorimo karticu File/Save as/... onda u ćeliji gde piše

'Save as type' biramo 'Text (Tab delimited)'. Snimimo fajl sa nazivom 'lifespandata'. Excel automatski dodaje ekstenziju'.txt' za tekst fajlove. Alternativno možemo otvoriti 'lifespandata.txt'

npr. Notepadom ili bilo kojim drugim tekst editorom i možemo pisati iznad tabele. Separator polja može da bude jedan ili više razmaka ili tabova (ili tačka zarez ; ).

Ne zaboravimo da se fajl nalazi u trenutnom radnom direktorijumu. Koristimo meni (File/Change directory) ili getwd() i setwd() da bismo odredili, odnosno postavili radni

direktorijum, respektivno. Onda učitamo fajl sa komandomread.table(). Prva linija fajla sadrži imena varijablai zovemo je 'header', pa uključimo opciju 'header=TRUE'.

> setwd("D:/Rcourse/") # "" su obavezni. Napomena koristimo/umesto\ > riscfactor <- read.table(file="lifespandata.txt",header=TRUE)

> # Alternativno koristimo file.choose() (choose-file-meni iskoči u grafičkom interfejsu): > # riscfactor <- read.table(file=file.choose(),header=TRUE)

> riscfactor težinska_kat pušač životni_vek 1 3 0 50.5

2 3 0 52.8 3 3 1 54.7

4 3 0 56.0 5 2 0 58.1 6 2 1 60.2

7 2 0 62.8 8 2 0 64.5

9 1 1 66.3 10 1 0 68.4 11 1 0 70.2

12 1 1 72.1

> str(riscfactor) 'data.frame' : 12 obs. of 4 variables: $ weightcls : int 3 3 3 3 2 2 2 2 1 1 ...

$ smoker : int 0 0 1 0 0 1 0 0 1 0 ... $ lifespan : num 50.3 52.8 54.7 56 58.1 60.2 62.8 64.5 66.3 68.4 \ldots

> write.table(riscfactor,file="lifespanout.txt") Važno je znati kako da ubacimo podatke u fajl sa podacima ili ekselovtabelarni prikaz. Postoji

mnogo načina da uradimo ovako nešto ali samo jedan će namolakšati život. Ključna stvar je upamtiti da

sve vrednosti iste promenljive idu u ISTU KOLONU.

Page 34: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

34

Sledi primer. Ako smo imali eksperiment sa tri tretmana (control, pre-heated, prechilled),

i 4 merenja po tretmanu, dobra je ideja da kreiramo tabelarni prikaz na sledeći način:

Control Pre-heated

Pre-chilled

6.1 6.3 7.1

5.9 6.2 8.2 5.8 5.8 7.3

5.4 6.3 6.9 Ipak, ovo nije idealno za baratanje sa podacima u R-u. Mnogo bolje je da imamo jednu kolonu za

sva merenja i jednu kolonu koja bi vezala svako od merenja sa tretmanom pri kome je nastalo konkretno merenje.

Response Treatment 6.1 Control

5.9 Control 5.8 Control

5.4 Control 6.3 Pre-heated 6.2 Pre-heated

5.8 Pre-heated 6.3 Pre-heated

7.1 Pre-chilled 8.2 Pre-chilled 7.3 Pre-chilled

6.9 Pre-chilled

Ovakva organizacija podataka je pogodnija i prirodnija za R, jer je R posebno dobar u grupisanju vektora (u konkretnom primeru 'Response') prema kriterijumu (ovde 'Treatment'). Kasnije ćemo posmatrati relaciju 'Response~Treatment'. Nije jednostavno nadovezati vektore u R-u.

Sledeće dve opcije (naredbe) detaljnije objašnjavaju važne osobine read.table() i write.table().

read.table(file, header = FALSE, sep = "", dec = ".", row.names, fill = FALSE, ...) • header: logička vrednost koja govori o tome da li fajl sadrži imena promenljivih u svojoj prvoj

vrsti. Ako nedostaje, vrednost je određena iz formata fajla : 'header' je 'TRUE' ako i samo ako prva vrsta sadrži jedno polje manje nego broj kolona.

• sep: polje za separaciju karaktera (vrednosti). Vrednosti na svakoj liniji fajla su odvojene ovim karakterom. Ako je ' sep = "" ' (predefinisanoza 'read.table') separator je 'prostor bez

teksta',odnosno jedan ili više razmaka, tabova, entera,...

Page 35: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

35

• row.names: je vektor sačinjen od imena vrsta. Ovo može biti vektor koji dodeljuje stvarna imena vrstama, ili brojna vrednost koja kolonama tabele daje imena vrsta, ili niz karaktera koji

dodeljuje ime kolone u tabeli koja sadrži imena vrsta.

Ako postoji header i prva vrsta sadrži jedno polje manje nego broj kolona, onda je prva kolona u unosu korišćena za imena vrsta. Inače ako 'row.names' nedostaje, vrste su numerisane.

• fill: logička vrednost. Ako je 'TRUE' onda imamo slučaj sa vrstama koje imaju nejednaku dužinu, prazna polja su implicitno definisana. Inače dobijamo ispis sa error porukom.

... Pored ovih navedenih postoje i mnoge druge opcije, pogledajmo ?read.table.

write.table(x,file="", append=FALSE, quote=TRUE, sep=" ", eol="\n", dec = ".", row.names=TRUE,...)

• x: objekat koji ćemo zapisati, najčešće matrica ili okvir podataka. Ako nije matrica, onda R pokušava da veže 'x' za okvir podataka.

• file: niz karaktera koji dodeljuje ime fajlu koji pišemo. '""' ukazuje izlaz na konzoli.

• append: logički. Ako je njegova vrednost 'TRUE', onda je njegov izlaz dodat fajlu. Ako je 'FALSE', bilo koji postojeći fajl istog imena je uništen. Imajući ovo u vidu treba biti pažljiv.

• quote: logička vrednost ('TRUE' ili 'FALSE') ili numerički vektor. Ako je vrednost 'TRUE', bilo

koji karakter ili faktor kolona će biti okružen sa duplim navodnicima. Ako je vrednost numerički vektor, njegovi elementi su tretirani kao indeksi kolona za navođenje. U oba slučaja, imena vrsta i kolona su navedena ako su ispisana u fajlu sa podacima. Ako je vrednost 'FALSE' ništa nije

navedeno.

• sep: separator niza karaktera. Ovaj niz karaktera odvaja vrednosti unutar svake kolone od 'x'. • dec: niz karaktera koji se koristi za decimalne tačke u numeričkim ili složenim kolonama: mora

biti jedan karakter.

... Za više opcija pogledati ?write.table. Postoje prečice za različite tipove unosa fajlova koje će nam uštedeti vreme. Sledi lista primera

koja precizira šta se podrazumeva pod različitim komandama.

Command header sep dec fill

read.table() FALSE "" "." FALSE read.csv() TRUE "," "." TRUE

Page 36: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

36

read.csv2() TRUE ";" "," TRUE read.delim() TRUE "nt" "." TRUE

read.delim2() TRUE "nt" "," TRUE

3.6 Primeri različitih ulaznih fajlova

Pre učitavanja ulaznog fajla, trebali bismo otvoriti fajl sa podacimada bismo ispitali kog je fajl formata. Slede primeri koji pokazuju prve linije ulaznog fajla i preciziraju komande za učitavanje

podataka.

Primer 1: Prve tri linije fajlasu:

tež_kat "pušač" životni_vek

"3" 0 50.3 3 0 52.8

R komanda (string "3" je konvertovan u 3)

> riscfactor <- read.table("lifespandata2.txt",header=TRUE) Primer 2: Prve tri linije fajla su:

tež_kat "pušač" životni_vek

3 0 50.3 3 0 52.8

Dve komande u R-u koje rade isto su:

> riscfactor <- read.csv("lifespandata.csv") > riscfactor <- read.table("lifespandata.csv",header=TRUE,sep=",",fill=TRUE)

Primer 3: Prve tri linije fajla su:

tež_kat;pušač;životni_vek 3;0;50,3 3;0;52,8

R command

> riscfactor <- read.csv2("lifespandata.csv2") Primer 4: Prve tri linije fajla su:

težinska

klasa

pušač životni_vek

3 0 50.3

Page 37: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

37

3 0 52.8

Primetimo da ime prve promenljive sadrži razmak. Ovo je problem ako su razmaci istovremeno i separatori. Ovde R očekuje 4 unosa po liniji. Komanda u R-u:

> riscfactor <- read.table("lifespandataspace.txt",header=TRUE)

zato završava sa greškom. Dodavanje opcije fill=TRUE rezultujesa 4 promenljive sa tako da 4. promenljiva ’životni_vek’ ima samo NA unose. Možemo izbeći ovaj problem tako što zamenimo

polje 'težinska klasa' sa npr. 'težinska.klasa' ili 'težinskaklasa' or '"težinska klasa"' ili ako zamenimo separator sa nekim drugim karakterom, a ne sa 'praznim prostorom' (npr. razmak ili tab) kao u fajlu 'lifespandataspace.csv'.

3.7 Faktori

U okviru podataka 'riscfactors', vrednosti kolone 'weightcls' su tipa 'numeric'. Ipak, vrednosti '1', '2' i '3' u vektoru 'weightcls' su pre namenjene imenima različitih grupa nego pravim numeričkim

vrednostima. Ovo definitivno pravi razliku u R-u,pa nam treba da preciznije definišemo R-u naše potrebe, što postižemo uz pomoć naredbe factor(). Komanda levels() vraća imena različitih grupa

u faktoru. Obratimo pažnju na različito ponašanje naredbe str() i summary() prouzrokovano načinom na koji posmatramo argument, bilo da je on numerički vektor ili faktor.

> x <- c("female","male","male","female","female") > levels(x)

NULL > str(x)

chr [1:5] "female" "male" "male" "female" "female"

> x <-factor(x) > levels(x) [1] "female" "male"

> str(x)

Factor w/ 2 levels "female","male": 1 2 2 1 1 > y <- rep(c(17,17,18),4); str(y)

num [1:12] 17 17 18 17 17 18 17 17 18 17 ...

> summary(y) Min. 1st Qu. Median Mean 3rd Qu. Max. 17.00 17.00 17.00 17.33 18.00 18.00

> y <- factor(y); str(y)

Factor w/ 2 levels "17","18": 1 1 2 1 1 2 1 1 2 1 ...

Page 38: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

38

> summary(y) 17 18

8 4

Ako su numeričke vrednosti korišćene za imenovanje a ne kao prave numeričke vrednosti, onda markiramo vektor kao faktor. Sledeća definicija riscfactors2 popravlja definiciju riscfactors (faktora rizika).

> riscfactors2 <- data.frame( weightcls=factor( rep(3:1,c(4,4,4)) ),

+ smoker=factor( rep(c(0,0,1),4) ), lifespan=seq(50,72,2) ) > summary(riscfactors2) tež_kls pušač životni_vek

1 1:4 0:8 Min. : 50.0 2 2:4 1:4 1st Qu.: 55.5

3 3:4 Median : 61.0 4 Mean : 61.0 5 3rd Qu.: 66.5

6 Max. : 72.0 (Other):6

> summary(riscfactors) weightcls smoker lifespan Min. : 1 Min. : 0.0000 Min. : 50.0

1st Qu.: 1 1st Qu.: 0.0000 1st Qu.: 55.0 Median

:

2 Median

:

0.0000 Median

:

61.0

Mean : 2 Mean: 0.3333 Mean: 61.0 3rd Qu.: 3 3rd Qu.: 1.0000 3rd Qu.: 66.5

Max. : 3 Max. : 1.0000 Max. 72.0

Ako je kolona ulaznog fajla faktor, onda ili definišemo klasu kolone sa colClasses= ili konvertujemo promenljivu nakon učitavanja podataka:

> riscfactor <- read.table("lifespandata.txt",header=TRUE, + colClasses=c("factor","numeric","numeric"))

> riscfactor <- read.table("lifespandata.txt",header=TRUE) > class(riscfactor$wghtcls) [1] "integer"

> riscfactor$wghtcls <- factor(riscfactor$težkls) > class(riscfactor$težkls)

[1] "factor"

Page 39: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

39

4. Crtanje

Naredbe za crtanje dele se na 3 vrste:

1. Funkcije visokog nivoa – kreiraju novi crtež ( sa osama, oznakama, naslovima,...)

2. Funkcije niskog nivoa – omogućavaju dodavanje informacija na postojeći crtež

(nove tačke, linije, oznake,...)

3. Interaktivne grafičke funkcije – omogućavaju interaktivno dodavanje i izvlačenje informacija iz

postojećeg crteža.

4.1 Funkcije visokog nivoa:

Standardna (plotting) naredba za crtanje visokog nivoa je plot( ). Ponašanje ove naredbe zavisi od izbora tipa argumenta (ulaznog podatka). Dat je pregled mogućih tipova ulaznih podataka i zavisnost izlaznih podataka od izbora argumenata (ulaznih podataka).

plot(x,y) : Ako su x i y numerički vektori funkcija plot(x,y) pravi scatterplot od y(x)

plot(y) : Ako je y numerički vektor onda je data funkcija identična funkciji plot(1:length(y),y)

plot(f) : Ako je f faktor onda funkcija plot(f) pravi barplot od f

plot(f,y) : Ako je f faktor a y numerički vektor onda funkcija plot(f,y) pravi boxplot od y za svaki nivo f-a

Primeri: Dužina pređenog puta (ft) potrebnog za zaustavljanje vozila koje je kreće određenom brzinom (mp/h).

>data(cars) # cars je skup podataka iz biblioteke 'datasets' vidi ?cars >?cars >attach(cars) >str(cars) >plot(speed,dist)

Page 40: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

40

Skup podataka za sledeći primer preuzet je sa stranice http://evol.bio.lmu.de/_statgen/Rcourse/ws1112/

> rent <- read.table("miete03.asc",header=TRUE) > attach(rent) > str(rent) 'data.frame': 2053 obs. of 13 variables: $ nm : num 741 716 528 554 698 ... $ nmqm : num 10.9 11.01 8.38 8.52 6.98 ... $ wfl : int 68 65 63 65 100 81 55 79 52 77 ... $ rooms : int 2 2 3 3 4 4 2 3 1 3 ... $ bj : num 1918 1995 1918 1983 1995 ... $ bez : int 2 2 2 16 16 16 6 6 6 6 ... $ wohngut : int 1 1 1 0 1 0 0 0 0 0 ... $ wohnbest: int 0 0 0 0 0 0 0 0 0 0 ... $ ww0 : int 0 0 0 0 0 0 0 0 0 0 ... $ zh0 : int 0 0 0 0 0 0 0 0 0 0 ... $ badkach0: int 0 0 0 0 0 0 0 0 0 0 ... $ badextra: int 0 0 0 1 1 0 1 0 0 0 ... $ kueche : int 0 0 0 0 1 0 0 0 0 0 ... > plot(nm) > plot(factor(rooms))

Page 41: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

41

> plot(rooms,nm) # rooms - numericki vector

> plot(factor(rooms),nm) # vektor rooms je konvertovan u factor

> plot(dnorm,from=-3, to=3) > plot(sin,from=-2*pi, to=2*pi) > plot(cos,from=-2*pi, to=2*pi, add=TRUE, lty='dashed') #dodaje cos(x) na postojeci grafik I menja tip linije na isprekidanu

Page 42: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

42

> boxplot(nmqm,col='orange') # boxplot vektora net rent/m2 > boxplot(nmqm~rooms,col='lightgray',border='green') # odnos net rent/m2 i broja soba Grupisanje vektora ‘nmqm’ saglasno nivoima faktora ‘rooms’ vrši se operatorom ~ > boxplot(list( nmqm[which(rooms==1)], nmqm[which(rooms==2)], nmqm[which(rooms==3)], nmqm[which(rooms==4)], nmqm[which(rooms==5)], nmqm[which(rooms==6)] ),col='lightgray',border='green') # detto boxplot(nmqm~rooms,..)

Vektor rooms mogu da predstavim barplot-om funkcijom barplot(). Prvo se kreira tabela broj stanova sa 1 sobom, 2sobe,… funkcijom table().

> barplot(table(rooms),xlab='Rooms') > barplot(table(bez),xlab='District')

Page 43: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

43

Postoje brojni argumenti koji mogu biti prosleđeni grafičkim funkcijama visokog nivoa. Sledeća lista sadrži najvažnije argumente:

add=TRUE forsira funkciju da se ponaša kao funkcija niskog nivoa,stavljajući novi crtež na postojeći

type=” ” argument kontroliše tip crteža na sledeći način:

type=” p ” crta pojedinačne tačke (points)

type=” l ” crta linije

type=” b ” crta tačke povezane linijom (both)

type=” o ” crta tačke prevučene linijom

type=” h ” crta vertikalnu liniju od tačke na grafiku f(x) do f(0) (high-density)

type=” s ” stepenasta funkcija

type=” S ” type=”n ” crtež koordinatnog sistema bez grafika,idealan za kreiranje crteža grafičkim funkcijama niskog nivoa

xlab=string ylab string definiše nazive koordinatnih osa

main=string naslov crteža, velikog formata, smešten na vrhu

sub=string podnaslov crteža, malog formata, smešten ispod x-ose

axes=FALSE poništava pravljenje osa,korisno kada dodaješ svoje ose naredbom axis()function axes=TRUE se podrazumeva

log="x" log="y" log="xy" pravi logaritamske koordinatne ose cex=1 veličina za koju se uvećavaju objekti u odnosu na uobičajenu ova opcija se koristi kada je osnovna veličina teksta jako mala

Grafički parametri takođe mogu biti trajno promenjeni naredbom par(), npr:

> par(col="green",lty="dashed") Poništavanje ove operacije se radi na sledeći način

Page 44: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

44

> oldpar <- par(col="green",lty="dashed") čuva stare parametre u ‘oldpar’ > ... naredbe za crtanje ... > par(oldpar) resetuje sve parametre

4.2 Funkcije za crtanje niskog nivoa

Koriste se za dodavanje novih informacija (tačke,linije,tekst,...) postojećem crtežu. Neke korisne funkcije iz ove kategorije su: points(x, y) dodaje tačke postojećem crtežu

lines(x, y) dodaje tačke ili povezane linije postojećem crtežu

text(x, y, nazivi, ...) dodaje tekst u tačkama zadatim sa (x,y)

abline(a; b) dodaje liniju bx+a

abline(h=y ) može da se koristi za specifikaciju y koordinate kao visina (height)

abline(v=x ) može da se koristi za specifikaciju x koordinate kao vertikala

title(main=main,sub=sub ) dodaje naslove

axis(side=side, ...) dodaje osu postojećem crtežu sa strane, korisno za dodavanje svojih osa kada axes= FALSE

legend(x, y, legend, ...) dodaje legendu postojećem crtežu legend( , fill=v ) boja obojenih kutija (kod boxplota)

legend( , col=v ) boja linija i tačaka

legend( , lty=v ) tip linije

legend( , lwd=v ) širina linija

legend( , pch=v ) crta kataktere

arrows(x0,y0,x1,y1, ...) crta strelice od (x0,y0) do (x1,y1)

p.arrows(x0,y0,x1,y1, ...) iste strelice ali sa obojenim vrhom

plot.new() prazni postojeci prozor za crtanje

mtext() dodaje tekst na margine Sledi demonstracija dodavanja matematičkog zapisa postojećem crtežu. Primer: crtanje funkcije y=x

> x <- seq(from=0,to=5,by=0.1) > plot(x,x,type="l") > text(4.5,4,"y=x",cex=2) > plot(x,x^2,type="l") > text(4.5,15,"y=x^2",cex=2)

Page 45: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

45

> x <- seq(from=0,to=5,by=0.1) > plot(x,x,type="l") > text(4.5,4,expression(y==x),cex=2) > plot(x,x^2,type="l") > text(4.5,15,expression(y==x^2),cex=2) expression() formira matematički zapis

Lista skraćenica koje se mogu koristiti za dodavanje matematičkog zapisa na crteže:

Page 46: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

46

Više informacija, uključujući kompletnu listu skraćenica, može se naći na sledeći način: > demo(plotmath) > help(plotmath) > example(plotmath)

4.3 Interaktivni crteži

R je opremljen funkcijama koje omogućavaju korisniku da dodaje ili oduzima informacije sa postojećih crteža korišćenjem miša. locator(n,type="n") očekuje od korisnika da označi određene lokacije na crtežu,koristeći levi taster miša,nastavlja se dok se ne označi n lokacija ili dok nije pritisnut drugi taster miša;

identify(x,y,labels ) omogućava da korisnik istakne tačke definisane preko x i y,koristeći levi taster miša,crtajuci odgovarajuće komponente naziva (labels); vraća indekse označenih tačaka pritiskom na desni taster miša;

Page 47: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

47

Ove funkcije se na primer mogu koristiti prilikom traženja outlier-a u podacima.

> plot(sin,from=-2*pi,to=2*pi,) > plot(cos,from=-2*pi,to=2*pi,add=TRUE,lty="dashed",col="red") > text(locator(1),"sin",adj=0) > text(locator(1),"cos",adj=1,col="red") > legend(locator(1),legend=c("sin","cos"),col=c("black","red"),lty=c(1,2))

4.4 Primeri crteža

Primer 1:

> attach(cars) > str(cars) > plot(speed,dist) > legend("topleft",legend="4 speed-17",lty="solid") > abline(-17,4) > title(main="Distance taken to stop a car from a certain speed")

Page 48: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

48

Primer 2:

> oldpar <- par(las=1,cex=2) > x <- seq(-1,1,by=0.01) > y1 <- x^2 > y2 <- x^4 > plot(x,y1, type="l",axes=FALSE,main="Example",xlab="x", ylab=expression(paste("balck: ", x^2, " red: ", x^4)) ) > lines(x,y2, type="l", col=2) > axis(1, at=c(-1, 0, 1), labels=c("-1.0", "0.0", "1.0" ),col = "gold",lty = "solid", lwd = 2 ) > axis(2, at=c(0, 0.5, 1.0), labels=c("0.0", "0.5", "1.0" ),col = "blue", lty = "solid", lwd = 2 ) > legend( -0.5,0.75,legend=c(expression(y==x^2), expression(y==x^4)),col=c("black", "red"), lwd=2 ) > box() > par(oldpar)

Page 49: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

49

Primer 3: Da li na novorođenčad dobro utiče slušanje kucanja srca?

> data<-read.table("heartbeats.txt",header=TRUE) > attach(data) > str(data) 'data.frame': 210 obs. of 3 variables: $ wghtcls : int 1 1 1 1 1 1 1 1 1 1 ... $ treatment: int 0 0 0 0 0 0 0 0 0 0 ... $ wghtincr : int -190 -130 -120 -110 -100 -80 -70 -70 -60 -50 ... > h<-treatment[wghtcls==1] > i<-wghtincr[wghtcls==1] > boxplot(i~h,names=c("Kontrola","Otkucaji"),xlab="Dobitak na tezini (g) izmedju 2. i 5. Dana ",notch=TRUE) > title(main=" Da li na novorođenčad dobro utiče slušanje kucanja srca?") > detach(data)

Page 50: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

50

Primer 4:

> data<-read.table("heartbeats.txt",header=TRUE) > attach(data) > h<-treatment[wghtcls==1] > i<-wghtincr[wghtcls==1] > mtitle<-"Do newborns benefit from hearing heartbeats?" > sbtitle<-"Lightweight group: Birth weight below 3000 g" > xlb<-"Weight gain (g) between day 2 and day 5" > dev.new(height=6,width=9.5) > par(cex.main=1.5,cex.axis=1.4,cex.lab=1.4,font.main=1,mar=c(5,5,3,1)) > stripchart(i~h,method="stack",col="blue",pch=16,cex=1.4, + group.names=c("Control","Heartbeats"),ylim=c(0.4,3),main=mtitle,xlab=xlb) > text((min(i)+max(i))/2,2.9,sbtitle,cex=1.4) > abline(v=0,lty=3) > m0<-mean(i[h==0]) > m1<-mean(i[h==1]) > lines(c(m0,m0),c(0.9,1.5))

Page 51: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

51

> text(m0+25,0.8,paste(round(m0),"g (Mean)"),cex=1.3) > lines(c(m1,m1),c(0.9+1,1.5+1)) > text(m1+25,0.8+1,paste(round(m1),"g (Mean)"),cex=1.3) > arrows(m0,1.6,m1,1.6,col="red") > text(m1+40,1.6,paste("Difference =",round(m1-m0)," g"),cex=1.3,col="red", + adj=0) > n0<-length(i[h==0]) > n1<-length(i[h==1]) > text(-170,1.2,paste("n =",n0),cex=1.3) > text(-170,1.2+1,paste("n =",n1),cex=1.3) > detach(data)

Prevela Ana Bešlin

4.5. Uređaji (devices)

Kada smo napravili dobar crtež, sledeći korak je da ga sačuvamo u pdf dokumentu. To ćemo

učiniti na ovaj način:

> plot(...) # Započinjemo crtanje sa funkcijom visokog nivoa kao što je plot() > ... # Naredne funkcije nižeg nivoa obogaćuju crtanje # Kada smo završili sa crtanjem: > dev.print(device=pdf, file="filename.pdf" )

Page 52: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

52

Sada dokument filename.pdf sadrži isti crtež koji smo videli na ekranu. Ostatak paragrafa objašnjava dalje

načine čuvanja crteža u dokumente.

Crteži se mogu prikazati u prozorima i sačuvati u dokumentima. Reč “uređaj” se odnosi i na

prozore i na dokumenta. Komanda dev.new() otvara novi prozor koji postaje aktivan uređaj. U svakom

trenutku postoji tačno jedan aktivan uređaj (ili ni jedan). Sve grafičke operacije se obavljaju nad aktivnim

uređajem. Komanda plot.new() se koristi da se obriše sav sadržaj aktivnog uređaja (pokreće novi plot).

Ukoliko nema aktivnog uređaja, plot.new() otvara novi prozor koji postaje aktivni uređaj. Sve funkcije za

crtanje visokog nivoa prvo pozivaju plot.new(). Tako da, ukoliko pokušamo prikazati dva grafika sa

funkcijom plot(), drugi grafik će biti upisan preko prvog. Ukoliko želimo videti oba grafika u isto vreme,

pozivamo dev.new() pre pozivanja komande plot() po drugi put. Postoji lista otvorenih uređaja, koja je

kružno numerisana lista. Uređaj sa brojem 1 je uvek “null uređaj”, koji samo čuva mesto. Ukoliko

pokušamo koristiti ovaj uređaj, kreiraćemo novi. Naredna lista komandi nam omogućava da koristimo

ovu listu uređaja.

dev.new(height=7,width=7) Otvara novi prozor koji postaje aktivni uređaj. Osnovna veličina prozora je

kvadrat od 7 inča.

dev.off() Zatvara aktivni uređaj. Naredni uređaj sa liste postaje aktivan.

graphics.off() Zatvara sve otvorene uređaje.

plot.new() Briše sav sadržaj aktivnog uređaja. Ukoliko nema aktivnog uređaja, onda plot.new() otvara

novi prozor koji postaje aktivan uređaj.

dev.set( n ) Postavi uređaj pod brojem n za aktivan uređaj

dev.prev()

dev.cur()

dev.next() Prikaži ime i broj prethodnog/trenutnog/narednog uređaja iz liste uređaja.

dev.list() Prikaži sve otvorene uređaje.

dev.print(device=dev,file="filename" ) Kopira sadržaj aktivnog uređaja u dokument "filename". Tip

dokumenta se deklariše sa device=dev, a može biti pdf, postscript, jpeg, bitmap, pictex, xg, bmp,

png.

dev.copy(device=dev,file="filename" ) Isto kao dev.print(), ali ne zatvara uređaj.

dev.print(which=n ) Kopira sadržaj aktivnog uređaja u uređaj sa liste pod brojem n.

dev.copy2pdf(file="filename.pdf" ) Isto kao dev.copy(device=pdf,le="lename.pdf").

dev.copy2eps(file="filename.eps" ) Kopira sadržaj aktivnog uređaja u eps dokument.

Alternativa kopiranju uređaja u dokument jeste crtanje direktno u dokument. Ovo je takođe korisno pri

pisanju R skripti. Na primer, pdf("fillename.pdf") otvara pdf dokument filename.pdf kao pdf uređaj. Sve

Page 53: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

53

grafičke operacije se onda direktno odvijaju nad ovim pdf uređajem. Primetićemo da se pdf dokument

često zatvara samo kada pdf uređaj zatvorimo sa dev.off(). Ovo je lista komandi koja otvara uređaje.

pdf("filename ") Otvara pdf dokument filename kao pdf uređaj. postscript("filename ") Otvara postscript dokument filename kao uređaj. jpeg("filename ") Otvara jpeg dokument filename kao jpeg uređaj. bitmap("filename ") Otvara bitmap dokument filename kao bitmap uređaj. tiff("filename ") Otvara tiff dokument filename kao tiff uređaj. xfig("filename ") Otvara xfig dokument filename kao xfig uređaj.. pictex("filename ") Otvara pictex dokument filename kao pictex uređaj. bmp("filename ") Otvara bmp dokument filename kao bmp uređaj. windows() Na Windows-u: otvara grafički prozor. X11() Na Unix-u/Linux-u: otvara grafički prozor . quartz() Na Mac-u: otvara grafički prozor.

Pravljenje dobrog crteža retko uspeva iz prvog pokušaja. Nažalost, ne postoji način da se vratimo

korak unazad sa komandama za crtanje. Najbolje rešenje je da kucamo komande u script dokument i tek

onda izvršimo skriptu. Alternativa je blagovremeno čuvanje stanja pre nego što nastavimo. Evo i primera.

plot(exp,from=0,to=3) > dev.copy(dev.new) # Sačuvaj trenutno crtež tako što ćeš ga snimiti u novom prozoru X11cairo 3 > text(2,5,"text at wrong position") # Da bi poništili sve komande pri crtanju do prethodnog snimanja, zatvori trenutni # prozor i napravi da je prethodno stanje aktivni prozor. > dev.set(dev.prev()) > dev.copy(dev.new) # Sačuvaj trenutni crtež X11cairo 3 > text(1,10,"text at good position")

4.6. Lista komandi visokog nivoa za crtanje

Korisne komande visokog nivoa za crtanje su izlistane ovde:

Page 54: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

54

barplot() Vizualizuje vektor stubičastim grafikonom boxplot() Box and whisker plot contour() Kontura površine je nacrtana u 2D-u. coplot() Conditioning-Plots dotchart() Crta lokacije elemenata vektora na realnoj liniji. hist() Histogram. image() 3d podaci vizualizovani pomoću boja. mosaicplot() Crtež u obliku mozaika. pairs() Daje matricu sa tačkastim dijagramima. persp() 3D crtež površine. pie() Kružni grafik. qqplot() Kvantilno-kvantilni crtež.

> x <- rnorm(50) > dotchart(x) # crte tačke od x > qqnorm(x) # crta uzoračke kvantile od x u odnosu na kvantile # standardne normalne raspodele > qqline(x) # dodaje liniju koja prolazi kroz prvi i treći kvartil

> library(mvtnorm) # višedimenzionalna normalna i t raspodela > x <- seq(from=-2, to=2, by=0.1) > y <- x > z <- matrix(nrow=length(x), ncol=length(y), data=0 )

Page 55: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

55

> for ( i in 1:nrow(z) ) for ( j in 1:ncol(z) ) > z[i,j] <- dmvnorm( cbind( x[i], y[j] ) ) > image(x,y,z) > contour(x,y,z)

> persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "lightblue") > library(lattice) # lattice obezbeđuje nekoliko funkcija za crtanje visokog nivoa > trellis.device() > wireframe(z,shade=TRUE) # wireframe je u biblioteci lattice

> data(volcano) # Učitajte volcano data, pogledajte ?volcano > wireframe(volcano,shade=TRUE,apsect=c(61/87,0.4),light.source=c(10,0,10))

Page 56: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

56

## Sledeći primer koristi cumsum() koja sumira na sledeći način: > cumsum(1:7) # 1 1+2 1+2+3 1+2+3+4 1+2+3+4+5 1+2+3+4+5+6 1+2+3+4+5+6+7 [1] 1 3 6 10 15 21 28 > cumsum(c(5,2,9,3)) # 5 5+2 5+2+9 5+2+9+3 [1] 5 7 16 19 ## Primer koji pokazuje kako se popunjava prostor između krivih. > par(bg="white") > n <- 500 > x <- c(0,cumsum(rnorm(n))) > y <- c(0,cumsum(rnorm(n))) > xx <- c(0:n, n:0) > yy <- c(x, rev(y)) > plot(xx, yy, type="n", xlab="Time", ylab="Distance") > polygon(xx, yy, col="gray") > title("Distance Between Brownian Motions")

Još primera grafičkih mogućnosti R-a se mogu videti sa: > demo(graphics) > demo(image) > demo(persp) > demo(plotmath) Postoji još dosta funkcija visokog nivoa za crtanje u “lattice” biblioteci (barchart bwplot cloud contourplot densityplot dotplot histogram levelplot parallel piechart qq qqmath rfs splom stripplot tmd wireframe xyplot). Ukoliko želimo pregled opcija ovih funkcija, možemo probati sledeću komandu. > demo(lattice)

Page 57: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

57

R nema svoj grafički pogon i samim tim nije sposoban da izvršava funkcije poput rotiranja 3D figura. Da budemo precizni, postoje komande rotate.cloud(), rotate.persp() i rotate.wireframe() u biblioteci “TeachingDemos”, ali su one veoma spore.

4.7. Prikazivanje višedimenzionalnih podataka

R pruža dve veoma korisne funkcije za predstavljanje višedimenzionalnih podataka. Ukoliko je x

numerička matrica, ili “data frame”, komanda

> pairs(x)

pravi scatterplot matricu po parovima od promenljivih definisanih u kolonama od x, tj. svaka

kolona od x je nacrtana naspram svake druge kolone od x. Rezultujući crteži su poređani u

matricu .

> rent <- read.table("miete03.asc",header=TRUE) > attach(rent) > pairs(cbind(nm,wfl), labels=c("rent","living space") ) > pairs(cbind(nm,nmqm), labels=c("rent","net rent per square meter"), + panel=panel.smooth )

Page 58: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

58

Kada je uključeno tri ili četiri promenljive, “coplot” može biti jasniji. Ukoliko su a i b numerički vektori i

c je numerički vektor ili faktor objekat (svi iste dužine), onda komanda

> coplot(a ~ b | c)

pravi broj scatterplot-ova za a naspram b, za date c. Ukoliko je c faktor, onda ovo znači da je a nacrtan

naspram b za svaki nivo c. Kada je c numeričko, podeljeno je u broj uslovnih intervala I za svaki interval

a je nacrtano naspram b za vrednost c iz intervala. Pogledajte ?coplot za više detalja. Takođe možete

koristiti dve date varijable sa komandom

> coplot(a ~ b | c * d)

koja pravi scatterplot-ove za a naspram b za svaki udruženi interval od c i d. Obe coplot() i pairs()

funkcije uzimaju argument panel= koji se može koristiti za prilagođavanje crteža koji se pojavljuje u

svakom panelu. Osnovna funkcija za pravljenje scatterplot-a je points(), ali dodavanjem još nekih

funkcija nižeg nivoa od dva vektora x i y za vrednost panel=, možemo napraviti bilo kakav crtež. Korisna

funkcija kao primer jeste panel.smooth.

> coplot( nm~wfl | as.factor(rooms) )

> coplot( nm~wfl | as.factor(rooms)*as.factor(badextra), panel=panel.smooth )

Page 59: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

59

4.8. Argumenti funkcija višeg nivoa za crtanje

Funkcije višeg nivoa za crtanje uzimaju veliki broj argumenata. Lista argumenata se nalazi na

“help” stranici funkcije par(). Ovu listu ćemo izložiti ispod.

‘add’ Tera funkciju da se ponaša kao grafička funkcija nižeg nivoa, postavljajući crtež na vrh

postojećeg crteža (ne radi pouzdano).

‘adj’ Vrednost ‘adj’ određuje poravnjanje teksta string-ova u ‘text’, ‘mtext’ i ‘title’. Vrednost 0 pravi

levo poravnanje teksta. Vrednost 0,5 (osnovna) centrira tekst, a vrednost 1 pravi desno

poravnjanje. (Svaka vrednost u intervalu od nula do jedan dolazi u obzir) Primetimo da ‘adj’

argument od ‘text’ dozvoljava 'adj = c(x,y)' za različita podešavanja po x i y pravcu. Primetimo

da ‘text’ utiče na poravnanje teksta, dok ‘mtext’ i ‘title’ utiču na položaj teksta na crtežu.

‘ann’ Ukoliko se podesi na ‘FALSE’, funkcija višeg nivoa 'plot.default' ne beleži na crtežima koje pravi

naslove osa ili naslove uopšte. Podrazumevana vrednost je da beleži ove stvari.

‘ask’ Logička. Ukoliko je podešena na ‘TRUE’ ( i R sesija je interaktivna) zahteva se unos od korisnika, pre nego što se nacrta naredna figura. Kao što se odnosi na uređaje, ovo se takođe odnosi I na izlaz po paketima 'grid' i 'lattice'. Može se čak i podesiti za uređaje bez ekrana, ali neće baš imati efekta.

‘bg’ Boja koja se koristi kao pozadina za region uređaja. Kada se poziva iz ‘par()’, takođe podešava ‘new=FALSE’. Za većinu uređaja, osnovna vrednost se podešava iz ‘bg’ parametra tog uređaja, a za ostale, normalno je “white”. Primetimo da grafičke funkcije poput ‘plot.default’ i ‘points’ imaju argument sa ovim imenom, ali različitim značenjem.

‘bty’ String karaktera koji određuje tim ‘kutije’ koja se crta za crteže. Ukoliko je ‘bty’ jedno od “o” (osnovna vrednost), “’I’”, “’7’”, “’c’”. “’u’” ili “’]’“, rezultat je kutija koja podseća na odgovarajuće veliko slovo. Vrednost “’n’“ poništava kutiju.

’cex’ Numerička vrednost koja određuje koliko bi tekst i simboli na crtežu trebali biti uvećanu u ondosu na osnovnu vrednost. Primetimo da grafičje funkcije kao što je ’plot.default’ imaju argument sa istim imenom koji množi onaj grafički parametar, a neke funkcije poput ’points’ prihvataju i vektorske vrednost koje recikliraju. Naredna korišćenja će uzeti samo prvu vrednost, ukoliko je dat vektor veličine veće od 1.

Ovo počinje sa vrenošću “1“ kada je uređaj otvoren, a resetuje se kada je izgled promenjen, tj. podešavanjem ’mflow’.

’cex.axis’ Uveličanje koje se koristi za ose, u odnosu na trenutno podešavanje ’cex’-a. ’cex.lab’ Uvećanje koje se koristi za x i y labele u odnosu na trenutno podešavanje ’cex’-a. ’cex.main’ Uvećanje koje se koristi za glavne naslove u odnosu na trenutno podešavanje ’cex’-a. ’cex.sub’ Uvećanje koje se koristi za podnaslove u odnosu na trenutno podešavanje ’cex’-a. ’cin’ Veličina karaktera (širina i visina) u inčima. Ovo su iste mere kao i u ’cra’, samo izražene drugim

jedinicama. ’col’ Specifikacija za osnovnu boju crtanja. Za listu dostupnih boja, pogledati ?clours() ili ?colors().

(Neke funkcije kao što je ’lines’ prihvata vektor vrednosti koje se recikliraju. Naredna korištenja uzimaju prvu vrednost ukoliko je dat vektor veličine veće od 1.)

’col.axis’ Boja koja se koristi za nazive osa. Osnovna vrednost je “black“. ’col.lab’ Boja koja se koristi za x i y labele. Osnovna vrednost je “black“. ’col.main’ Boja koja se koristi za glavne naslove. Osnovna vrednost je “black“. ’col.sub’ Boja koja se koristi za podnaslove. Osnovna vrednost je “black“.

Page 60: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

60

’cra’ Veličina osnovnog karaktera ( širina, visina ) u rasterskoj vrednosti ( pikselima ). Neki uređa ju nemaju koncept piksela, tako da uzimaju proizvoljnu vrednost za veličinu piksela, uglavnom 1/72 inčca. Ovo je ista vrednosta kao i ’cin’, samo u izražena drugim jedinicama.

’crt’ Numerička vrednost koja određuje (u stepenima) koliko bi se trebalo pojed ini karakteri rotirati. Nije mudro očekivati da će vrednosti osim umnožaka od 90 stepeni da rade. Poredimo ga sa ’srt’ koji rotira stringove.

’csi’ Veličina karaktera u inčima. Isto kao za ’part(“cin“). ’cxy’ Veličina osnovnog karaktera ( širina, visina ) koji se koristi u koordinatnim jedinicama.

’par(“cxy“) je ’par(“cin”)/par(“pin”)’ skalirano na koordinate korisnika. Primetimo da ’c(strwidth(ch),strheight(ch))’ za dati string ’ch’ je obično više precizno.

’din’ Dimenzije uređaka, ( širina, visina ) u inčima. ’err’ ( Nije implementirana. R se ne oglašava kada se tačke van regiona crtanja crtaju) Količina prijave

grešaka koju želimo. ’family’ Ime familije fonta za crtanje teksta. Najveća dozvoljena dužina je 200 bajtova. Ovo ime se

mapira za svaki grafički uređaj na opis fonta specifičan uređaju. Osnovna vrednost je “’’”, što znači da će se koristiti font koji je osnovno podešen ( Koji je to font bi trebalo da bude izlistano na help stranici uređaja). Standardne vrednosti su “serif”, “sans” i “mono”, a Hershey porodice fontova su takođe dostupne. ( Neki uređaju mogu definisati druge, a neki će kompletno ignorisati ovo podešavanje). Ovo se može specificirati u liniji za ’text’.

’fg’ Boja koja se koristi za ’foreground’ crteža. Ovo je osnovna boja koja se koristi za stvari kao što su ose i kutije oko crteža. Kada se poziva iz ’par()’, ovo takođe podešava parametar ’col’ na istu vrednost. Poneki uređaji imaju argument koji podešava početnu vrednost, koja je u suprotnom “black”.

’fig’ Numerički vektor forme ’c(x1,x2,y1,y2)’ koji daje (NDC) koordinate regije figure koja se prikazuje na regionu uređaja. Ukoliko podesimo ovaj parametar, za razliku od S, pravimo novi crtež, tako da bi dodali na već postojaći koristimo ’new=TRUE’ takođe.

’fin’ Dimenzije regije figure, ( širina, visina ) u inčima. Ukoliko podesimo ovaj parametar, za razliku od S, pravimo novi crtež.

’font’ Celobrojna vrednost koja određuje koji font se koristi za tekst. Ukoliko je moguće, drajveri uređaja podešavaju tako da vrednost 1 odgovara za običan tekst (osnovna), 2 za podebljano, 3 za nakrivljeno, a 4 za podebljano i nakrivljeno. Takođe, font 5 se očekuje da bude simbol font, u Adobe “symbol encoding“. Na nekim uređajima, familije fonta se mogu birati sa ’family’ da bi se odabrao različit set od 5 fontova.

’font.axis’ Font koji se bira za naziv osa. ’font.lab’ Font koji se bira za x i y labele. ’font.main’ Font koji se koristi za glavne naslove. ’font.sub’ Font koji se koristi za podnaslove. ’lab’ Numerički vektor forme ’c(x,y,len)’ koji modifikuje osnovni način na koji su ose obeležene.

Vrednosti ’x’ i ’y’ daju ( procenjen ) broj podeoka na x i y osama, a ’len’ daje dužinu labele. Osnovna vrednost je ’c(5,5,7)’. Primetimo da ovo utiče samo na način na koji se parametri ’xaxp’ i ’yaxp’ podešavaju kada se korisnički koordinatni sistem postavlja, a ne koristi se kada se crtaju ose. ’len’ nije implementirano u R-u.

’las’ Nemrička vrednost, može biti 0,1,2,3. Stil labela ose. 0: Uvek paralelna osi (osnovna). 1: Uvek horizontalna. 2 Uvek normalna na osu. 3 Uvek vertikalna. Takođe podržano od ’mtext’. Primetimo da druge string/karakter rotacije (od argumenata ’srt’ do

’par’) ne utiču na labele osa. ’lend’ Stil kraja linije. Ovo se može odrediti kao celobrojna vrednost ili string: ’0’ ili “round“ znači obli krajevi linije ( osnovna vrednost ).

Page 61: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

61

’1’ ili “butt“ zbači ’butt’ krajevi linije. ’2’ ili “square” daje kvadratne krajeve linija. ‘lheight’ Umnožak visine linije. Visina linije teksta ( koristi se za vertikalni razmak između teksta koji

poseduje više linija ) se pronalazi množeći visinu karaktera sa trenutnom ekspanzijom karaktera is a umnoškom visine linije. Osnovna vrednost je 1. Koristi se u ‘text’ i ‘strheight’.

‘ljoin’ Stil koji se koristi pri spajanju linija. Ovo se može specifikovati kao celobrojna vrednost ili string. ‘0’ ili “round” znači obla oznaka spajanja linija (osnovna). ‘1’ ili “mitre” znači “mitred” oznaka spajanja linija. ‘2’ ili “bevel” znači “beveled” oznaka spajanja linija. ’lmitre’ Ovo kontroliše kada se ’mitred’ spojevi linija automatski konvertuju u ’bevelled’ spojeve linija.

Vrednost mora biti veća od 1, a osnovna vrednost je 10. Ovo podešavanje neće poštovati svi uređaji.

’lty’ Tip linije. Tip se može odabrati celobrojnom vrednošću (0=blank, 1=solid (default), 2=dashed, 3=dotted, 4=dotdash, 5=longdash, 6=twodash) ili sa stringom ('"blank"', '"solid"',

'"dashed"' , '"dotted"', '"dotdash"', '"longdash"' , or '"twodash"'). “Blank” pravi “nevidljive” linije, tj. ne crta ih. Takođe možemo proslediti string sa do 8 karaktera, koji daje veličinu linijskih segmenata koji se alternativno crtaju i preskaču.Neke funkcije kao što je ‘lines’ prihvataju vektor vrednosti koje posle recikliraju. Naredna korišćenja će uzimati prvu vrednost, ukoliko je dati vektor duži od 1.

’lwd’ Širina linije, pozitivan broj, osnovna vrednost je ’1’. Interpretacija ove komande zavisi od uređaja i neki uređaju ne prihvataju linije sa širinom manjom od 1. Neke funkcije kao što je ‘lines’ prihvataju vektor vrednosti koje posle recikliraju. Naredna korišćenja će uzimati prvu vrednost, ukoliko je dati vektor duži od 1.

‘mai’ Numerički vektor forme ‘c(dno, levo, vrh, desno)’ koji daje veličinu margina u inčima. ‘main’ Figura naslova, postavlja se na vrhu crteža velikim fontom. ‘mar’ Numerički vektor forme ‘c(dno, levo, vrh, desno)’ koji daje broj margina koje treba iscrtati sa

svake strane crteža. Osnovna vrednost je ‘c(5, 4 ,4 ,2)+ 0.1’. ‘mex’ Faktor ekspanzije veličine karaktera koji se koristi da opiše coordinate u marginama crteža. On ne

menja veličinu fonta, već povećava font. ‘mfcol’ ‘mfrow’ Vektor forme ‘c(nr, nc)0. Svaka sledeća figura će biti nacrtana u ‘nr’ od ’nc’ nizu na

uređaju po kolonama (‘mfcol’) ili redovima (‘mfrow’). U rasporedu gde ima tačno dva reda i kolone, bazna vrednost od “cex” je smanjena za factor od 0.83. Ukoliko imamo tri ili vise kolona ili redova, factor je 0.66. Podešavanjem resporeda resetujemo osnovnu vrednost ‘cex’-a i ‘mex’-a na ‘1’. Upitivanje nam neće reći kojim redom će niz biti ispunjen. Alternative su ‘layout’ i ‘split.screen’.

‘mfg’ Numerički vektor forme ‘c(i, j)’, gde ‘i’ i ‘j’ pokazuju koja od figura u nizu figura se bira sledeća. Niz mora biti već postavljen od strane ‘mfcol’ ili ‘mfrow’. Zbog kompatibilnosti sa S-om, forma ‘c( i, j, nr, nc)’ je takođe prihvatljiva, gde su ‘nr’ i ‘nc’ trenutni broj redova i kolona. Promašaji će biti ignorisani uz upozorenje.

‘mgp’ Linija margine za naslov ose, labelu ose i liniju ose. Primetimo da ‘mgp[1]’ utiče na naslov, dok ’mgp[2:3]’ utiče na ose. Osnovna vrednost je ’c(3, 1, 0)’.

’new’ Ukoliko je podesimo na ’TRUE’, sledeća komanda za crtanje visokog nivoa neće obrisati okvir pre crtanja, kao da crta na “novom“ uređaju. Greška je pokušati koristiti ’new=TRUE’ na uređaju koji trenutno nema crtež višeg nivoa ( ignoristano uz upozorenje ).

’oma’ Vektor forme ’c( dno, levo, vrh, desno)’ koji daje veličinu spoljašnjih margina u linijama teksta. ’omd’ Vektor forme ’c( x1, x2, y1, y2 )’ dajući region unutar spoljašnjih margina u NDC (

normalizovane koordinate uređaja ), th. kao deo ( u [0,1] ) regiona uređaja.

Page 62: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

62

’omi’ Vektor forme ’c( dno, levo, vrh, desno)’ koji daje veličinu spoljašnjih margina u inčima. ’pch’ Ili je celobrojna vrednmost koja određuje neki simbol ili pojedini karakter koji se treba koristiti

kao osnovna vrednost za crtanje tačaka. Primetimo da samo celobrojne vrednosti i pojedinačni karakteri mogu biti dati kao grafički parametri ( a ne i ’NA’ ili ’NULL’).

’pin’ Trenutne dimenzije crteža. ’( širina, dužina)’ u inčima. ’plt’ Vektor forme ’c( x1, x2, y1, y2)’ koji daje koordinate regiona crteža kao delove trenutne regije

figure. ’ps’ Celobrojna vrednsot, veličina tačaka teksta. Ne menja odnos između ’mar’ i ’mai’. (ili ’oma’ i

’omi’). Na šta se tačno misli pod ’point size’ zavisi od uređaja, ali uglavnom je to više 1bp, što je 1/72 inča.

’pty’ Karakter koji određuje tip regiona crteža koji se koristi. “S“ generiše kvadratni region za crtanje, a “m“ generiše maksimalni region za crtanje.

’smo’ ( Nije implementirano. ) Vrednost koja ukazuje na to koliko obli bi krugovi i kružne krive trebale biti.

’srt’ Rotacija stringa u stepenima. Podržano samo od strane ’text’. ’sub’ Podnaslov, postavlja se ispod x-ose manjim fontom. ’tck’ Dužina podeoka kao deo manjeg dela širine ili vise od regiona crtanja. Ako je tck >= 0.5

interpretira se kao deo relevantne strane, tako da ako je tck = 1, linije mreže se crtaju. Osnovno podešavanje (tck= NA) je da se koristi tcl= -0.5.

’tcl’ Dužina podeoka kao deo od visine linija teksta. Osnovna vrednost je ’-0.5’. Podešavanjem ’tcl= NA’ postavlja ’tck = -0.01’ sto je osnova u S-u.

’type’ type= argumnt kontroliše tip crteža koje se pravi, kao: type=“P“ Crta zasebne tačke (osnovno) type=“l“ Crta linije type“b“ Crta tačke spojene linijama type“o“ Crta tačke prekrivene linijama type“h“ Crta vertikalne linije od tačaka do nule na osi. type“s“ type“S“ U prvoj form, gornji deo vertikale definiše tačku. U drugoj, donji deo. type“n“ Nema crtanja. Ose se svakako crtaju i koordinatni sistem se postavlja u odnosu na podatke. Idealno za pravljenej crteža sa rednim grafičkim funkcijama nižeg nivoa. ’usr’ Vektor forme ’c( x1, x2, y1, y2)’ koji daje ekstreme od korisničkog koordinatnog sistema regije

crtanja. Kada se logaritamska skala koristi, onda je x-ograničenje 10^par(“usr“)[1:2]. Slično za y-osu.

’xaxp’ Vektor forme ’c(x1, x2, n)’ koji daje koordinate ekstrema podeoka i broj intervala između njih kada je par(“xlog“) netačno. U suportnom, kada su log koordinate aktivne, tri vrednosti imaju drugačije značenje: Za manji opseg, ’n’ je negativno, a podeoci su kao u linearnom slučaju, u suprotnom, ’n’ je u ’1:3’, sto ukazuje na ’’case number’’, a ’x1’ i ’x2’ su najmanja i najveća moć od 10 unutar korisnikovih koordinata, 10^par’’usr’’)[1:2]. ( ’’usr’’ koordinate su log10-transformisane ovde!)

n=1 će praviti podeoka na 10^j za ceo broj j. n=2 daje podeoke k 10^j sa vrednošću za ka 1,5. n=3 daje podeoke k 10^j sa vrednošću za ka 1,2,5. Ovaj parametar se resetuje kada se postave korisnički koordinatni sistem, postavljanjem nove

stranice na primer ili pozivnom ’plot.window’ ili podešavanjem ’par(’’usr’’):’n’ je uzeto iz ’par(’’lab’’)’. Utiče na osnovno ponašanje rednih poziva ’axis’ za strane 1 ili 3.

’xaxs’ Stil proračuna intervala ose koji se treba koristiti za x-osu. Moguće vrednosti su ’’r’’, ’’i’’, ’’e’’, ’’s’’, ’’d’’. Stilovi su generalno kontrolisani opsegom podataka ili sa ’xlim’, ukoliko je dato.

Stil ’’r’’ (regular) prvo povećava opseg podataka za 4% ka svakom kraju i onda pronalaza osu sa labelama koja odgovara proširenom opsegu. Stil ’’i’’ (internal) samo pronalazi osu sa labelom

Page 63: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

63

koja odgovara originalnom opsegu podataka. Stil ’’s’’ (standard) pronalazi osu sa labelom unutar originalnog opsega podataka. Stil ’’e’’ (extended) je kao stil ’’s’’, samo što takođe obezbeđuje mesto za crtanje simbola unutar okvirujuće kutije. Stil ’’d’’ (direct) određuje da trenutna osa treba da se koristi za naredne crteže. ( Samo ’’r’’ i ’’i’’ stilovi su trenutno implementirani)

’xaxt’ Karakter koji određuje tip x ose. Argument ’’n’’ ponišstava crtanje ose. Standardna vrednost je ’’s’’: zbog kompatibilnosti sa S-om, vrednosti ’’l’’ i ’’t’’ su prihvatljive, ali su isto što i ’’s’’. Svaka vrednost sem ’’n’’ implicira crtanje.

’xlab’ Labela ose za x-osu. ’xlog’ Logička vrednost. Ukoliko je ’TRUE’, logaritmička skala se koristi. Za nov uređaj, osnovna

vrednost je ’FALSE’, tj. linearna skala. ’xpd’ Logička vrednost ili ’NA’. Ukoliko je ’FALSE’,svo crtanje je skraćeno na region crtanje, a

ukoliko je ’TRUE’, svo crtanje je skraćeno na region figur. Ukoliko je ’NA’, svo crtanje je skraćeno na region uređaja.

’yaxp’ Vektor formata ’c( y1, y2, n )’ koji daje koordinate ekstrema podeoka i broj intervala između njih, osim za logaritamske koordinate. Pogledati ’xaxp’ iznad.

’yaxs’ Stil proračuna intervala za osu koji se koristi na y-osi. Pogledati ’yaxs’ iznad. ’yaxt’ Karakter koji određuje tip y ose. Ukoliko je data vrednost’’n’’, neće se crtati. ’ylab’ Labela ose za y-osu. ’ylog’ Logička vrednost. Pogledati ’xlog’ iznad.

5. Neki statistički testovi

5.1 Teorija statističkih testova

Želite da podržite hipotezu (npr. lekovi imaju efekat)

Pretpostavimo da su sva merenja slučajna, neki pesimista bi mogao da tvrdi da je

značenje podataka čista slučajnost ( „da se svih 20 pacijenata oporavi može se dogoditi

slučajno“ )

Kako bi se osporio pesimista, pretpostavimo da je u pravu i pokazujemo da je malo

verovatno da su posmatrani podaci slučajni.

U statističkom jeziku, mišljenje pesimiste se naziva nulta hipoteza koja obično tvrdi

„posmatranje zbog slučajnosti“, i formulisana je precizno za svaki test, npr.

H0: lekovi imaju isti efekat kao i placebo

Postupak statističkog testa:

Formulisanje nulte hipoteze, npr. H0: lekovi imaju isti efekat kao i placebo

Pokazuje se da je realizovani uzorak dovoljno neverovatan pod pretpostavkom nulte

hipoteze. Naučnici se slažu da je dovoljna verovatnoća od najviše 5%.

Ovo osporava pesimistu. Statističkim jezikom: Odbacujemo nultu hipotezu na nivou

značajnosti 5%.

Page 64: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

64

Verovatnoća realizovanog uzorka pod pre tpostavkom nulte hipoteze se naziva p-vrednost.

Formalo:

p-vrednost = P(realizovani uzorak | H0 je tačna).

Dakle, p-vrednost od 2%, nam pokazuje da ako je pesimista u pravu, onda se u samo 2 od 100

eksperimenata rezultuje takav uzorak. Treba imati na umu da nismo osporili pesimistu. Nulta

hipoteza bi ipak mogla biti istinita. Međutim, ako je nulta hipoteza tačna, onda je malo verovatno

dobiti takav uzorak.

Ako je p-vrednost iznad nivoa značajnosti, recimo 8%, onda ne možemo odbaciti nultu hipotezu

na nivou 5%. Naravno, ovo nikako ne pokazuje da je nulta hipoteza tačna. Nemati mogućnost da

odbacimo nultu hipotezu je isto što i biti neodlučan, nemati mišljenje.

Sledeća dva poglavlja će nam dati dva važna statistička testa.

5.2 Test razlika između sredina: t-test

Šta je dato? Nezavisni uzorci (x1,…, xn) i (y1,…,ym).

Nulta hipoteza: x i y su uzorci iz raspodela koji imaju istu sredinu.

Test: t-test

R komanda: t.test( x, y )

Ideja testa: Ako se dve uzoračke sredine puno razlikuju odbacuje se nulta hipoteza.

t-test je aproksimativni test, test statistika je samo približno t-distribuirana. Srećom, ovaj test je

prilično jak. Takođe, radi prilično dobro i za male uzorke. Jedino je osetljiv na narušavanje

nezavisnosti. Prema tome, treba biti pažljiv u slučaju ako su uzorci zavisni.

Primer. U suprotnosti sa opštim mišljenjem je da ne postoje samo zeleni marsovci, već i plavi i

crveni marsovci. U fajlu 'mars.txt' se nalazi visina (u cm), kao i boja sva 42 marsovca koji su

pronađeni u poslednjih 50 godina. Želimo da testiramo hipotezu da je visina zelenih marsovaca

različita od prosečne visine plavih marsovaca.

> mars <- read.table("mars.txt",header=TRUE)

> head(mars) Size color

1 65.67974 red 2 65.90436 red

3 67.34730 red 4 60.42924 red

5 55.34526 red

6 62.85024 red > attach(mars)

> t.test(size[color=="green"],size[color=="blue"])

Two Sample t-test

Page 65: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

65

data: size[color == "green"] and size[color == "blue"] t = -3.4244, df = 19.419, p-value = 0.002775

alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval:

-16.875514 -4.083647 sample estimates:

mean of x mean of y 60.86840 71.34798

Odgovor: Odbacujemo nultu hipotezu da su prosečne visine zelenih i plavih marsovaca jednake

(na nivou značajnosti od 5%). Ovde smo upotrebili neuparen t-test jer su ova dva uzorka

nezavisna.

Sada ćemo dati jedan primer uparenog t-testa. Dati su nam podaci o habanju cipela od materijala

A i B (svaka na jednom stopalu) od deset dečaka. Dva uzorka su sada korelisana kako je dečak

nosio odgovarajuću obuću. Neki dečaci su uzrokovali veće habanje, a neki manje. Dakle,

moramo primeniti uparen t-test.

> data(shoes,package='MASS') > attach(shoes)

> head(shoes) $A

[1] 13.2 8.2 10.9 14.3 10.7 6.6 9.5 10.8 8.8 13.3 $B

[1] 14.0 8.8 11.2 14.2 11.8 6.4 9.8 11.3 9.3 13.6 > t.test(A,B,paired=TRUE) Paired t-test data: A and B t = -3.3489, df = 9, p-value = 0.008539 alternative hypothesis: true difference in means is not equal to 0

95 percent confidence interval: -0.6869539 -0.1330461

sample estimates: mean of the differences

-0.41 Odgovor: Odbacujemo nultu hipotezu da su materijali A i B jednako dobri (u proseku), na nivou značajnosti 5%.

5.3 Test zavisnosti

Page 66: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

66

U zavisnosti od vrste promenljive odlučujemo koji test da koristimo:

promenljive koje imaju nominalnu vrednost (nema poretka, npr. boja očiju ili pol)

promenljive koje imaju diskretne vrednosti (vrednosti su u poretku npr. ishod bacanja kockice, starost u godinama iz skupa prirodnih brojeva)

promenljive koje imaju kontinualne (neprekidne) vrednosti (bilo koja vrednost iz nekog intervala je moguća, npr. visina ).

5.3.1. Nominalne promenljive

Neka su zapažanja data u parovima (X1, Y1),…, (Xn,Yn). Dobijeni podaci su dati u tabeli kontigencije. Npr. X –boja očiju, a Y- boja kose.

X\Y plava braon crna ukupno

plava 47 42 8 97

braon 3 60 33 96

zelena 8 15 3 26

ukupno 58 117 44 219

Šta je dato? relizovani uzorak je dat u parovima (x1,y1), (x2,y2),..., (xn,yn)

Nulta hipoteza: x i y su nezavisne

Test: χ2 – test za nezavisnost

R komanda: chisq.test( x, y ) ili chisq.test( contingency.table )

Ideja testa: Izračunavaju se očekivane učestalosti pod pretpostavkom o nezavisnosti. Ako dobijene vrednosti previše odtupaju od očekivanih, onda odbacujemo nultu hipotezu. χ2 – test za nezavisnost je aproksimativan test, test statistika je samo približno χ2 distribuirana.

Ovaj test se može primeniti samo ako je zadovoljen sledeći uslov: Neka su podaci koji u tabeli kontigencije. Neka je .= sume vrsta, =

sume kolona i = ukupna suma. Tada su očekivana učestalosti =

.

Pravilo za χ2 – test: Sve očekivane učestalosti treba da budu veće od 1 i 80% njih treba da budu veće od 5.

Primer:

> contingency <- matrix( c(47,3,8,42,60,15,8,33,3), nrow=3 ) > chisq.test(contingency)$expected

[,1] [,2] [,3] [1,] 25.689498 51.82192 19.488584

[2,] 25.424658 51.28767 19.287671

Page 67: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

67

[3,] 6.885845 13.89041 5.223744

# expected abundances are all above 5, so we may apply the test > chisq.test(contingency)

Pearson's Chi-squared test

data: contingency

X-squared = 58.5349, df = 4, p-value = 5.892e-12

Odgovor: Odbacujemo nultu hipotezu da su boja očiju i boja kose nezavisne varijable (na nivou

značajnosti od 5%). U specijalnom slučaju 2x2 tabela, nije potrebno koristiti χ2 aproksimaciju, već tada koristimo

Fisher-ov test.

Šta je dato? realizovani uzorak u parovima (x1,y1), (x2,y2),..., (xn,yn); dve kategorije obe za x i y Nulta hipoteza: x i y su nezavisne

Test: Fisher–ov test za nezavisnost R komanda: fisher.test( x, y ) ili fisher.test( contingency.table)

Primer: Rosen i Jerdee (Influence of sex role stereotype on personnel decisions, J. Appl.

Psych 59, 9-14, 1974) su dali učesnicima kursa za menadžment da pogledaju lične fajlove i pustili ih da odluče da li da unaprede osobu ili ne. Lični fajlovi su bili identični osim pola (24

ženski, 24 muški). Rezultat je bio Ženski pol Muški pol

Unapređenje 14 21

Nema unapređenja 10 3

> table <- matrix( c(14,10,21,3), nrow=2 ) > fisher.test(table)

Fisher's Exact Test for Count Data

data: table p-value = 0.04899 alternative hypothesis: true odds ratio is not equal to 1 95 percent confidence interval:

0.03105031 0.99446037 sample estimates: odds ratio

0.2069884

Page 68: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

68

Odgovor: Odbacujemo nultu hipotezu da su pol osobe i odluka o unapređenju nezavisne (nivo značajnosti 5%).

5.3.2 Neprekidne promenljive

Ovde pretpostavljamo da promenljive, teoretski, mogu uzeti sve vrednosti nekog intervala.

Šta je dato? Realizovan uzorak u parovima (x1,y1), (x2,y2),..., (xn,yn); sve vrednosti iz nekog

intervala su moguće

Nulta hipoteza: x i y su nezavisne

Test: Pearson-ov test korelacije za nezavisnost

Pretpostavka: x i y su uzorci sa normalnom raspodelom

R komanda: cor.test( x, y )

Primer: Dužina puta potrebna za zaustavljanje (u stopama) iz određene brzine (u miljama po

satu, mph):

> data(cars) # cars is a dataset in the library 'datasets', see ?cars > attach(cars)

> str(cars) > ?cars

> plot(speed,dist) > cor.test(speed, dist) Pearson's product-moment correlation data: speed and dist t = 9.464, df = 48, p-value = 1.49e-12 alternative hypothesis: true correlation is not equal to 0 95 percent confidence interval: 0.6816422 0.8862036

sample estimates: cor 0.8068949

Odgovor: Odbacujemo nultu hipotezu da su speed i dist nezavisne (nivo značajnosti 5%).

5.3.3 Ordinalne (diskretne) promenljive

Pretpostavljamo da se dobijena posmatranja mogu poređati. Posebno pretpostavljamo da nema

(bar ne puno) ponovljenih vrednosti.

Page 69: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

69

Šta je dato? Realizovan uzorak u parovima (x1,y1), (x2,y2),..., (xn,yn); vrednosti se mogu poređati

Nulta hipoteza: x i y su nekorelisane

Test: Spearman-ova rangirana korelacija ρ

R komanda: cor.test( x, y, method="spearman")

Primer: Dužina puta potrebna za zaustavljanje (u stopama) iz određene brzine (u miljama po

satu, mph):

> attach(cars) > cor.test(speed, dist, method="spearman") Spearman's rank correlation rho data: speed and dist S = 3532.819, p-value = 8.825e-14 alternative hypothesis: true rho is not equal to 0

sample estimates: rho 0.8303568 Warnmeldung: In cor.test.default(speed, dist, method = "spearman") :

Kann exakte p-Werte bei Bindungen nicht berechnen

Odgovor: Odbacujemo nultu hipotezu da su speed i dist nekorelisane (nivo značajnosti 5%).

5.4 Moć testa

Alternativna hipoteza u odnosu na nultu hipotezu je alternativa (oznaka H1). Ono što želite da

pokažete treba da bude deo alternative.

Primer:

H0: µ=0

H1: µ≠0

Postoje dve moguće greške:

„greška prve vrste“, „α greška“ ili „lažno pozitivna“: greška odbacivanja nulte hipoteze

kada je ona zapravo tačna. Primer: test pokazuje trudnoću iako žena nije trudna.

„greška druge vrste“, „β greška“ ili „lažno negativna“: greška neodbacivanja nulte

hipoteze kad ona nije tačna. Primer: test ne pokazuje trudnoću iako je žena trudna.

H0 je tačna H1 je tačna

H0 nije odbačena ispravno greška druge vrste

H0 je odbačena greška prve vrste ispravno

Page 70: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

70

Ako je β verovatnoća greške druge vrste, onda je moć testa definisana sa 1-β. Ako je moć testa 0,

onda nulta hipoteza nikad neće biti odbačena čak i ako je alternativna tačna. Kako želimo da

odbacimo nultu hipotezu, preferiraćemo moć testa blizu 1. Za ovo, alternativa H1: µ≠0 je loša.

Problem je taj da ako je prava vrednost µ veoma blizu 0, tada test nema šansu da prikaže razliku

od 0. Umesto ove alternative, trebalo bi koristiti H1 : |µ| ≥ 0.5.

Generalno, moć testa se povećava sa porastom obima uzorka. Postoje funkcije, npr.

power.t.test() ili power.fisher.test() koje izračunavaju minimalnu veličinu uzorka potrebnu da se

postigne data moć testa.

5.5 Lista statističkih testova u R-u Test R komanda Opis

t-test t.test() Da li su tačne sredine dva uzorka različite?

F-test aov() Da li su tačne sredine više uzoraka različite?

(balansirani dizajn)

Hi-kvadrat test chisq.test() Test nezavisnosti uparenih uzoraka (broji podatke)

Fisher-ov test fisher.test() Test nezavisnosti uparenih uzoraka (broji podatke)

Spearman-ovo ,

Kendall-ovo cor.test() Test nezavisnosti uparenih uzoraka

Wilcoxon, Mann-Whitney wilcox.test() Da li je parametar lokacije isti u obe grupe?

Kruskal-Wallis-ov test sume rangova

kruskal.test() Da li je parametar lokacije isti u svim grupama?

Shapiro-Wilk test normalnosti

shapiro.test() Da li je uzorak dobijen iz normalne raspodele?

Kolmogorov-Smirnov test ks.test() Da li su dva uzorka dobijena iz iste raspodele?

Quade-ov test quade.test() Da li je parametar lokacije isti u svim grupama?(blok dizajn)

Friedman-ov test friedman.test() Da li je parametar lokacije isti u svim

grupama?(blok dizajn)

Tačan binomni test binom.test() Tačan test za verovatnoću uspeha za Bernulijev eksperiment

Test disperzija var.test() Test homogenosti disperzija između dve grupe

Bartelett-ov test bartlett.test() Test homogenosti disperzija među grupama

Fligner-Killeen-ov test fligner.test() Test homogenosti disperzija među grupama

Levene-ov test levene.test() Test homogenosti disperzija među grupama

Test jednakih proporcija prop.test() Da li su verovatnoće uspeha jednake u nekoliko grupa?

Kendall-ovo ,

Spearman-ovo cor.test() Test nezavisnosti među uparenim uzorcima

Box-Pierce, Ljung-Box Box.test() Test nezavisnosti u vremenskim serijama

Cochran-Mantel-Hanszel- mantelhaen.tes Da li su (nominalne) promenljive uslovno

Page 71: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

71

ov test t() nezavisne u svakom sloju?

Mood-ov test skaliranja mood.test() Dvouzorački test za različitost u parametrima skale

Ansari-Bradley-jev test ansari.test() Test za različitost u parametrima skale

McNemar-ov Hi-kvadrat

test mcnemar.test() Test za simetriju vrsta i kolona u

dvodimenzionalnoj tabeli kontigencije

Mauchly- jev test sfernosti mauchly.test() Da li je Wishart-distribuirana kovarijansa matrica proporcionalna datoj matrici?

Poisson-ov test poisson.test() Test za parametar stope u Poasonovoj raspodeli

5.6 Stepeni slobode Izraz stepeni slobode se javlja s vremena na vreme. Kako je taj koncept često nepoznat, ukratko

ćemo ga objasniti. Pretpostavimo da možemo da biramo između pet vrednosti x1, x2, x3, x4, x5.

Tada je naš stepen slobode jednak 5. Slično, postoji pet stepeni slobode u vektoru:

x < -c(x1, x2, x3, x4, x5).

Sada uzmimo u obzir vektor

v < -x – E(x) = c(x1, x2, x3, x4, x5) – x.

U ovom slučaju možemo slobodno da izaberemo v1, v2, v3, v4. Međutim, vrednost za v5 je

fiksirana. Već znamo da je očekivanje od v jednako v = 0. Sledi da je peti element vektora v

određen preko v1+v2 +v3+ v4+v5 = 0.

Uopšteno, ako je x vektor dužine n, tada ima n-1 stepen slobode u vektoru x – x. Još jedna

činjenica koja ide u prilog ovome je da postoji jedan ocenjen parametar preko x, a to je naime x.

To umanjuje stepene slobode za jedan. Stoga, preostaje n-1 stepena slobode. Uopštenije,

predstavićemo formalnu definiciju stepena slobode:

broj stepeni slobode uzorka =

veličina uzorka – broj ocenjenih parametara iz uzorka

Page 72: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

72

LINEARNA REGRESIJA

7.1. Uvod

Linearna regresija predstavlja proces pronalaženja prave koja najbolje aproksimira podatke.

Pretpostavimo da imamo dve promenljive x i y sa decimalnim vrednostima (npr. visina, težina,

zapremina ili temperatura), gde je y zavisna promenljiva koja zavisi od x.

Pretpostavimo da je ova zavisnost linearna

gde se parametar zove odsečak, a b nagib.

Razmotrimo sledeće fitovane podatke. Uzmimo da je x broj merenja, a y izmereni rast.

> x <-0:8

> y <- c(12, 10, 8 , 11, 6, 7, 2, 3, 3)

> plot (x,y)

Tačke su prikazane na levoj slici:

Linearnu regresiju pravimo tako što tražimo pravu koja najbolje aproksimira date podatke.

Vidimo da vrednosti promenljive y opadaju između 12 i 2, dok vrednosti promenljive x rastu

između 0 i 8. Kada je x = 0, imamo da je y = 12, pa je odsečak = 12. Kako je ∆y = -10, a ∆x = 8

nagib je u našem slučaju

Page 73: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

73

= -

= -1.25.

Linearna funkcija sa ovako zadatim parametrima ima sledeći oblik:

i prikazana je na slici gore desno.

Naš cilj je sada, da u R-u nađemo model funkciju y koja zavisi od x. Pomenutu vezu između x i y

kratko zapisujemo kao y ~ x. Uzimajući u obzir da mi želimo da nađemo linearnu vezu ove dve

promenljive, u R-u koristimo komandu lm( ). Primetimo da je lm skraćena oznaka za linear

model.

> lm (y~x)

Call:

lm( formula = y~x)

Coefficients:

( Intercept) x

11.576 -1.217

Pa dobijamo da je prava koja najbolje aproksimira naše podatke data sa

.

Objekat vraćen sa lm() je veoma detaljna lista. Između ostalog, vraća nam vektor koeficijenata

dužine 2, čija je prva komponenta odsečak, a druga nagib tražene funkcije.

> regr.obj <- lm(y~x)

> cat( "The intercept is",regr.obj$coefficient[1],"and the slope is",

+ regr.obj$coefficient[2],"\n")

The intercept is 11.75556 and the slope is -1.216667

Komanda coef() takođe vraća koeficijente. Na primer coef(regr.obj) je isto što i

regr.obj$coefficient.

Page 74: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

74

7.2. Pozadina

Još uvek nismo definisali šta znači "najbolja aproksimacija". Najbolja aproksimacija ili najbolje

fitovanje, je model kod kog su sume kvadrata grešaka minimizirane. Formalno, to su vrednosti

( , ) koje minimiziraju

Treba još da znamo, da li i koliko dobro linearni model aproksimira unete podatke, a odgovor

dobijamo analizom varijanse ili preciznije iz sume kvadrata

elemenata vektora y.

Linearni model nam ipak ne daje sve o SSY, ostaju nam greške. Razlika između svake tačke i

predviđene vrednosti modela za istu vrednost x se zove rezidual. Slika koju vidimo ispod,

prikazuje reziduale naših podataka. Koristimo R-komandu predict(), koja računa vrednosti

regresijske linije u tačkama x.

> fitted <- predict(regr.obj)

> plot(x,y)

> abline(regr.obj)

> for( i in 1:9 ){ lines( c(x[i],x[i]),c(y[i],fitted[i]) ) }.

Linearni model ne objašnjava sumu kvadrata reziduala

gde je a odsečak, a b koeficijent nagiba. Objašnjena varijacija je regresijska suma kvadrata

Page 75: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

75

SSR < - SSY – SSE.

Možemo pokazati i da je SSR =

gde su

SSXY = (n-1) * cov(x,y)

SSX = (n-1) * var(x).

Mera fitovanja je vrednost ukupne varijacije od y koja je objašnjena regresijom. Za ukupnu

varijaciju SSY i prethodno objašnjenu varijaciju SSR, imamo da je naša mera fitovanja data sa:

r2

= (cor(x,y))2.

Formalan naziv prethodnog izraza je koeficijent determinacije, ali većina ljudi ga naziva samo ' r

kvadrat '. Vrednost r2 je između 0 i 1. Što je r2 veći, imamo bolju aproksimaciju. Ako je

aproksimacija savršena, onda je r2 =1.

> n <- length(x)

> SSY <- (n-1)*var(y) ; SSY

[1] 108.8889

Page 76: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

76

> SSR <- ( (n-1)*cov(x,y) )^2/ ( (n-1)*var(x) ) ; SSR

[1] 88.81667

> SSE <- SSY-SSR ; SSE

[1] 20.07222

> SSR/SSY ; ( cor(x,y) )^2 # r^2

[1] 0.8156633

[1] 0.8156633

Ove vrednosti su sačuvane u tabeli poznatoj kao “Anova tabela”. Anova je skraćenica za analizu

varijanse.

Izvor Suma

kvadrata

Stepeni

slobode

Srednja

vr.kvadrata

F vrednost Pr(>F)

Regresija 88.817

Greška 20.072

Total 108.889

Postoji n < - length(x) tačaka na grafiku. Kako su ove tačke unošene nezavisno od normalne

raspodele, postoji n stepena slobode u datom vektoru y. Vektor x je sada fiksiran. U ukupnoj

sumi kvadrata SSY= , vektor y je centriran sa njegovom srednjom vrednošću.

Rezultujući vektor sada ima srednju vrednost 0. Pa su stepeni slobode centriranog vektora n-1.

Stoga stepeni slobode u ukupnoj sumi kvadrata iznose n-1. Dalje razmotrimo, greške sume

kvadrata

SSE= . Pa onda imamo dva parametra ocenjena iz y, a i b. Stoga ostaje n-2

stepena slobode. Zbog SSR = SSY - SSE, pa ostaje n-1-(n-2)=1 stepen slobode za ovu regresijsku

sumu kvadrata.

Drugi način da izvedemo ovo je iz SSR = SSXY2/ SSX koji sadrži jedan parametar koji je izveden

iz y.

Page 77: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

77

Da završimo Anova tabelu, unosimo varijanse u 4. kolonu. Primetimo da

varijansa =

Peta kolona sadrži F vrednost, dok poslednja sadrži verovatnoću da uzme vrednost veću ili

jednaku od F. Raspodela odnosa sredine kvadrata je F raspodela. Pa dobijamo verovatnoću

pomoću F-vrednosti ili veću komandom 1-pf( ).

> 20.072/7

[1] 2.867429

> 108.889/8

[1] 13.61112

> 88.817/2.86746

[1] 30.974

> 1-pf(30.9741,1,7)

[1] 0.0008460645 # the regression line is highly significant (ocena je dobra

Izvor Suma

kvadrata

Stepeni

slobode

Srednja

vr.kvadrata

F vrednost Pr(>F)

Regresija 88.817 1 88.817 30.974 0.000846

Greška 20.072 7 2.867

Total 108.889 8 13.611

Page 78: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

78

7.3. Summary.aov() i summary()

R nam daje gornju tabelu bez poslednje vrste sa komandom summary.aov koja vrši analizu

varijanse nešeg modela.

> summary.aov(regr.obj)

Df Sum S Mean Sq F value Pr(>F)

x 1 88.817 88.817 30.974 0.000846 ***

Residuals 7 20.072 2.867

---

Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1

Komanda summary() nam daje sve što treba da znamo o parametrima i njihovim standardnim

greškama.

> summary(regr.obj)

Call:

lm(formula = y ~ x)

Residuals:

Min 1Q Median 3Q Max

-2.4556 -0.8889 -0.2389 0.9778 2.8944

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 11.7556 1.0408 11.295 9.54e-06 ***

x -1.2167 0.2186 -5.565 0.000846 ***

---

Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1

Page 79: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

79

Residual standard error: 1.693 on 7 degrees of freedom

Multiple R-squared: 0.8157,adjusted R-squared: 0.7893

F-statistic: 30.97 on 1 and 7 DF, p-value: 0.000846

Iz prethodne analize možemo videti da su očekivana vrednost odsečka i očekivana vrednost

nagiba značajne.

U nastavku ćemo videti dva ekstremna primera i jedan sa samogenerišućim podacima.

# prvi primer je opadajuća prava sa koeficijentom nagiba -1 i nema šuma.

> x <- 0:8

> decrease <- 8:0

> regr <- lm(decrease~x)

> regr1 <- lm(decrease~x)

> plot(x,decrease) ; abline(regr1)

> summary(regr1)

Call:

lm(formula = decrease ~ x)

Residuals:

Min 1Q Median 3Q Max

-1.724e-15 1.370e-16 2.031e-16 2.472e-16 9.006e-1

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 8.000e+00 4.894e-16 1.635e+16 <2e-16 ***

x -1.000e+00 1.028e-16 -9.729e+15 <2e-16 ***

---

Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1

Page 80: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

80

Residual standard error: 7.962e-16 on 7 degrees of freedom

Multiple R-squared: 1,djusted R-squared: 1

F-statistic: 9.465e+31 on 1 and 7 DF, p-value: < 2.2e-16

# U drugom primeru postoji šum koji ne zavisi od x.

> x <- seq(0,8,by=0.1)

> length(x)

[1] 81

> indpndnt <- rnorm(81,0,2)

> regr2 <- lm(indpndnt~x)

> plot(x,indpndnt) ; abline(regr2)

> summary(regr2)

Call:

lm(formula = indpndnt ~ x)

Residuals:

Min 1Q Median 3Q Max

-5.1527 -1.2588 -0.1359 1.2855 4.2083

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) -0.81396 0.45566 -1.786 0.0779

x 0.11480 0.09835 1.167 0.2466

---

Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1

Page 81: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

81

Residual standard error: 2.07 on 79 degrees of freedom

Multiple R-squared: 0.01695,djusted R-squared: 0.004511

F-statistic: 1.362 on 1 and 79 DF, p-value: 0.2466

# U trećem primeru imamo opadajuću pravu sa koeficijentom nagiba -1/2 sa šumom.

> noisyline <- seq(8,0,by=-0.1) + rnorm(81,0,4)

> regr3 <- lm(noisyline~x)

> plot(x,noisyline) ; abline(regr3)

> summary(regr3)

Call:

lm(formula = noisyline ~x)

Residuals:

Min 1Q Median 3Q Max

-8.4352 -2.5893 0.3918 2.3173 8.9245

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 8.6273 0.7892 10.932 < 2e-16 ***

x -1.0420 0.1703 -6.117 3.43e-08 ***

---

Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1

Residual standard error: 3.584 on 79 degrees of freedom

Multiple R-squared: 0.3214,djusted R-squared: 0.3129

F-statistic: 37.42 on 1 and 79 DF, p-value: 3.429e-08

Page 82: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

82

7.4. Provera modela

Da bi ustanovili da li je naš model dobar, potrebno je proveriti više stvari od kojih je jedna i p-

vrednost. Osim toga, proveravamo i da li je rasipanje konstantno i da li su greške normalno

raspoređene slučajne promenljive. Najlakši način da to uradimo jeste da koristimo funkciju plot.

> plot(regr3)

Page 83: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

83

Tačke na slici s rezidualima izgledaju kao tačke iz centrirane normalne raspodele i linija je

jednaka nuli, dok tačke sa slike pored, treba da budu blizu isprekidane linije.

U nastavku dajemo primer regresione linije koja ne aproksimira dobro.

> x <- seq(-2,6,by=0.1)

> noisy <- x^2 + rnorm(81,0,0.1)

> regr4 <- lm(noisy~x)

> plot(x,noisy) ; abline(regr4)

Page 84: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

84

Page 85: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

85

> plot(regr4)

Page 86: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

86

R - UNOS i IZVOZ PODATAKA

1 UVOD

Unošenje podataka u statistički sistem radi analize i eksportovanje rezultata u neke druge sisteme

za pisanje izveštaja moze biti izuzetno zahtevan zadatak koji ume da oduzme mnogo više

vremena od samih statističkih analiza.

Ovaj priručnik opisuje unosne i izvozne mogućnosti kako u samom R-u, tako i putem paketa koji

su dostupni sa CRAN-a (Comprehensive R Archive Network) ili drugde.

Osim ako nije drugačije navedeno, sve opisano u ovom priručniku je (u principu) dostupno na

svim platformama koje podržavaju R.

Generalno, statistički sistemi kao što je R nisu praktično pogodni za manipulacije sa velikom

grupom podataka. Neki drugi sistemi su u ovom smislu bolji od R-a, i delom suština ovog

priručnika je da se umesto dupliranja funkcionalnosti u R-u naprave novi sistemi koji ce raditi

posao! ( Na primer, Therneau & Grambsch (2000) ) Sistemi baza podataka koji omogućavaju

manipulacije su često veoma pogodni za manipulacije i izvoz podataka : nekoliko paketa koji su

u interakciji sa DBMS-om (Database management systems) se razmatraju ovde.

Page 87: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

87

Postoje paketi koji dozvoljavaju da se funkcionaknost razvijena u programskim jezicima kao što

zu Java, Perl i Python direktno integrišu sa R-kodom, što čini krišćenje objekata na ovim

jezicima primerenijim. (Pogledati rJava paket iz CRAN-a i SJava, RSPerl i RSPython pakete iz

Omegahat projekta, http://www.omegahat.org.)

Ono što je takođe značajno upamtiti da R, kao i S, dolazi iz Unix-ove tradicije malih široko

primenjivih alata, i korišćenje alata kao što su awk i perl za manipulaciju podacima pre unosa i

posle izlaza može biti korisno. Studija slučaja u Becker, Chambers & Wilks (1988, poglavlje 9)

je primer ovoga, gde Unix-ovi alati korišćeni za proveru i manipulaciju podacima pre njihovog

unosa u S. Tradicionalni Unix-ovi alati su sada daleko više i šire dostupni, uključujući i za

Windows.

1.1 UNOS

Najjednostavniji oblik podatka za unošenje u R je običan tekst fajl, ato će često biti

prihvatljivo za probleme malog i srednjeg obima . Osnovna funkcija za unos tekstualnog fajla je

scan, i ovo je u osnovi većine praktičnih funkcija razmatranih u Poglavlju 2.

Međutim, svi statistički konsultanti su uglavnom suočeni sa situacijama gde im klijent ponudi

podatke sa prenosive memorije (floppy disc, flash memorija ili CD-R) ili podatke u nekom

pripadajućem binarnom format, na primer Excel tabela ili SPSS fajl. Obično je najlakša stvar

iskoristiti izvornu aplikaciju za eksportovanje podatka kao tekstualnog fajla. Međutim, ovo nije

uvek moguće, i Poglavlje 3 razmatra koji objekti su u mogućnosti da pristupe takvim fajlovima

iz R-a. Što se tiče Excel radnih tabela, moguće metode su sumirane u Poglavlju 9 [Učitavanje

Excel radnih tabela]. Za ODS tabele (OpenDocument Spreadsheet (.ods) format) iz Open Office,

pogledati Omegahat paket ROpenOffice.

U nekim slučajevima, podaci su sačuvani u binarnom obliku zbog kompaktnosti i brzine

pristupa. Jedna primena ovoga, što smo videli nekoliko puta, su podaci u formi slika, koji se

normalno čuvaju kao niz bajtova u memoriji. Takvi oblici podataka se razmatraju u Poglavlju 5 i

Poglavlju 7.5.

Za mnogo veće baze podataka uobičajeno je da se podacima rukuje koristeći se sistemom za

upravljanje bazom podataka (DBMS-Database Management System). Još jedna mogućnost

korišćenja DBMS-a je da se izvuče obična datoteka, ali u mnogim takvim slučajevima DBMS-

ova operacija ekstrakcije se može direktno izvršiti iz R paketa.

1.1.1 Kodiranje

Osim ako datoteka iz koje se vrši uvoz podataka nije kompletno u ASCII-u (American Standard

Code for Information Interchange), obično je neophodno znati na koji način je kodirana. Što se

tiče tekstualnih fajlova, dobar način za otkrivanje informacija o njihovoj strukturi je komanda

Page 88: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

88

file na komandnoj liniji alata ( za Windows, uključeno u Rtools). Ovo se zapisuje na sledeći

način

text.Rd: UTF-8 Unicode English text

text2.dat: ISO-8859 English text

text3.dat: Little-endian UTF-16 Unicode English character data,

with CRLF line terminators

intro.dat: UTF-8 Unicode text

intro.dat: UTF-8 Unicode (with BOM) text

Savremeni sistemi nalik Unix-u, uključujući OS X, često prave UTF-8 fajlove. Windows može

napraviti takozvane “Unicode” fajlove (UCS-2LE ili možda UTF-16LE). U suprotnom, većina

fajlova će biti 8-bitno kodirani osim ako su iz kineskog/japanskog/korejskog područja (koji

imaju širok opseg kodiranja u praktičnoj primeni). Nije moguće automatski sa sigurnošću

detektovati šta je 8-bitno kodiranje (mada su nagađanja moguća i file će možda pogoditi kao

što jeste u prethodnom primeru), tako da ćete jednostavno morati pitati inicijatora za neke

tragove (npr. “Russian on Windows”).

‘BOM-ovi’ (Byte Order Marks,

http://en.wikipedia.org/wiki/Byte_order_mark) izazivaju probleme kod Unicode

fajlova. U Unix svetu BOM-ovi se retko koriste, dok su u Windows svetu skoro uvek za UCS-

2/UTF-16 fajlove, i obično ya UTF-8 fajlove. Korišćenjem opcije file neće biti moguće ni

prepoznati UCS-2 fajlove bez BOM-a, ali mnoge druge opcije će odbiti da učitaju fajlove sa

BOM-om i IANA standardi za UTF-16LE i UTF-16E to zahtevaju. Obično smo ograničeni na

posmatranje fajla preko opcije od sa komandne linije ili na hex editor da bismo proučili njegov

kod.

Primetimo da utf8 nije pravilan naziv za kod (UTF-8 jeste), i macintosh je

najprimenjivije ime za ono što se nekad naziva “Mac Roman” kod.

1.2 Eksportovanje u tekst fajlove

Eksportovanje rezultata iz R-a obično nije sporno, ali i dalje postoji veliki broj zamki. Treba

imati u vidu aplikaciju koja je meta eksportovanja, i naravno tekst fajl je napogodniji oblik za

razmenu.

Funkcija cat je u osnovi funkcija za eksportovanje podataka. Uzima se file argument, i

append argument dozvoljava da se tekst fajl napiše putem uzastopnih poziva funkcije cat.

Međutim bolje je, pogotovo ako je ovo neophodno uraditi veliki broj puta, otvoriti file vezu za

pisanje ili sređivanje, i odraditi cat na tu vezu, i onda primeniti opciju close.

Najčešći zadatak je napisati matricu ili zabeležiti podatke u obliku pravougaone mreže

brojeva, sa oznakama vrsta i kolona. Ovo se može odraditi putem funkcije write.table and

Page 89: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

89

write. Funkcija write samo ispisuje matricu ili vektor sa određenim brojem kolona (i

transponuje matricu). Funkcija write.table je pogodnija, i ispisuje tabelu podataka (ili

objekte koji se mogu prevesti u tabele podataka) sa oznakama vrsta i kolona.

Brojni su problemi koji se trebaju razmotriti prilikom eksportovanja tabele podataka u tekst fajl.

1. Preciznost

Većina konverzija realnih/kompleksnih brojeva odrađenih ovim funkcijama je u punoj

preciznosti, ali one odrađene pute write-a su regulisane trenutnom postavkom opcija u

prozoru options(digits). Za više kontrola treba koristiti format u okviru tabele

podataka, moguće je sređivati kolonu po kolonu.

2. Linija zaglavlja

R preferira da linija zaglavlja nema ulaz za imena vrsta, tako da fajl izgleda ovako:

dist climb time

Greenmantle 2.5 650 16.083

...

Neki drugi sistemi zahtevaju (moguće je i prazan unos) ulazne podatke za imena vrsta,

što je ono što će write.table obezbediti ako je argument col.names=NA naveden.

Excel je jedan od takvih sistema.

3. Separator

Jedan od uobičajenih separatora u fajlovima je zarez(comma), dok to nije slučaj u

nijednoj oblasti engleskog govornog područja. Takvi fajlovi su poznati kao CSV (comma

separated values) fajlovi, tzv. wrapper funkcija write.csv obezbeđuje odgovarajuće

postavke. U nekim lokalima zarez se koristi kao decimalni separator (podešavanje sa

write.table by dec=”,”) tako da CSV fajlovi koriste tačku-zarez kao separator

polja: koristiti write.csv2 za odgovarajuće postavke. Postoji IETF standard za CSV

datoteke (koji propisuje zareze i CRLF završetak redova, za koje se koristi eol=“\r\n”),

RFC4180 (http://tools.ietf.org/html/rfc4180), ali ono što je bitno u

praktičnom smislu je da datoteka bude čitljiva od strane aplikacije kojoj je namenjena.

Korišćenje tačka-zareza (;) ili tab-a (sep=”\r”) je uglavnom najsigurnija opcija.

4. Podaci koji nedostaju

Prema osnovnim postavkama, nedostajuće vrednosti izlaze kao NA, ali ovo može da se

promeni argumentum na. Takođe NaNs se tretiraju kao NA u write.table, ali ne i u

cat ili write.

5. Navodjenje stringova

Prema osnovnim postavkama stringovi se navode (uključujući nazive vrsta i kolona).

Argument quote kontroliše da li su karkakteri i faktorske promenljive dobro navedene:

neki program, na primer Mondrian, ne prihvataju navedene stringove.

Treba posebno obratiti pažnju ako stingovi već sadrže citate u sebi. Tri korisne forme

Page 90: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

90

kodova su:

> df <- data.frame(a = I("a \" quote"))

> write.table(df)

"a"

"1" "a \" quote"

> write.table(df, qmethod = "double")

"a"

"1" "a "" quote"

> write.table(df, quote = FALSE, sep = ",")

a

1,a " quote

6. Kodiranja

Tekstualni fajlovi ne sadrže metapodatke o njihovim kodiranjima , tako da za ne-ASCII

podatke fajl mora da bude usmeren na aplikac ije koje treba da ga pročitaju. Sve ove funkcije

mogu pisati connection koje omogućava da se kodiranje odredi sprecijalno za datoteku, i

write.table ima fileEncoding argument da olakša postupak.

Teži deo posla je znati koju vrstu kodiranja koristiti za fajl. Za korišćenje u Windows-u,

najbolje je koristiti ono što se Windows zove ‘Unicode’, to je “UTF-16LE”. Korišćenje UTF-

8 je dobar način da se naprave prenosivi fajlovi čije se kodiranje neće lako brkati sa nekim

drugim, ali čak i OS X aplikacijama (gde je UTF-8 sistem kodiranja) se može desiti da ih ne

prepoznaju, a Windows aplikacijama se to retko dešava. Očigledno Excel:mac 2004/8

očekuje .csv fajl u “macroman” kodu (kodiranje korišćeno u mnogo ranijim verzijama

Mac OS-a).

Funkcija write.matrix u paketu MASS obezbeđuje specijalizovani interfejs za pisanje

matrica, sa opcijom pisanja istih u blokovima i tako značajno redukujući korišćenje

memorije.

Moguće je koristiti sink za prenos standardnog R izlaza u fajl, i tako uhvatiti izlaz poziva

print. Ovo obično nije najefikasniji put, i options(width) podešavanja će možda morati

da se povećaju.

Funkcija write.foreign u paketu foreign koristi write.table da napravi tekstualni

fajl i takođe ispisuje kodirani fajl koji će učitati ovaj tekstualni fajl u drugi statistički paket.

Trenutno postoji podrška za izvoz u SAS, SPSS i Stata.

XML

Page 91: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

91

Kada se čitaju podaci iz tekstualnog fajla, odgvornost je na korisniku da zna i da odredi

konvencije korišćene za kreiranje tog fajla, npr. komentar, da li je naslovna linija prisutna,

separator, predstavljanjenedostajućih vrednosti (i tako dalje). Markup jezik koji se može

koristiti da sed objasni, ne samo sadržaj, već takođe i strukturu sadržaja može učiniti fajl

takvim da sam sebe objašnjava, tako da se ne moraju omogućiti svi podaci o softveru koji

čita podatke.

Extensible Markup Language- šire poznat kao XML- može se koristiti da se obezbedi takva

struktura, ne samo za standardne grupe podataka već i za kompleksnije strukture podataka.

XML postaje izuzetno popularan i prerasta u standard za opšte oznake podataka i razmenu.

Koristi se od strane različitih zajednica da se opišu geografski podaci kao što su mape,

grafički prikazi, proračuni i tako dalje.

XML omogućava način da se naglasi kodiranje fajla, npr.

<?xml version="1.0" encoding="UTF-8"?>

XML paket omogućava opšte objekte za čitanje i pisanje XML dokumenata u R-u. Opis

objekata koji se nalaze u XML izlazi iz okvira ovog dokumenta: pogledati web-stranu paketa

na http://www.omegahat.org/RSXML za detalje i primere. Paket StatDataML na CRAN-u

je jedan od primera pravljena XML-a.

NB: XSML je dostupan kao binarni paket za Windows, naravno iz `CRAN extras`

spremišta.

Page 92: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

92

2 Tabelarni prikaz podataka

U prethodnom poglavlju videli smo brojne varijacije za formate tabelarnih tekst fajlova, gde

su podaci prikazani u pravougaonoj mreži ,eventualno sa nazivima vrsta i kolona. U ovom

poglavlju razmatramo unosšenje ovakvih fajlova u R.

2.1 Varijacije za read.table

Funkcija read.table je najpogodniji način za učitavanje pravougaone mreže podataka.

Zbog velikog broja mogućnosti , postoji još nekoliko funkcija koje pozivaju read.table ali

menjaju grupu osnovnih postavki.

Međutim, treba biti na oprezu , jer je funkcija read. table nepogodan način za učitavanje

izuzetno velikih brojnih matrica.

Neki od problema koji se moraju razmotriti su:

1. Kodiranje

Ako fajl sadrži non-ASCII polje karaktera, treba se osigurati da su učitani u ispravnom

kodu. Ovo je uglavnom problem sa učitavanjem Latin-1 fajlova u UTF-8 lokalu, što se

može uraditi na sledeći način:

read.table("file.dat",

fileEncoding="latin1")

Primetimo da će ovo raditi u bilo kom lokalu koji može da prikaže Latin-1 stringove, ali

ne i u mnogim grčkim/ruskim/kineskim/japanskim… lokalima.

2. Linija zaglavlja

Predlažemo da naglasite header argument eksplicitno. Po pravilu linija zaglavlja ima

mogućnost unosa samo za nazive kolona, ali ne i za nazive vrsta, tako da je za jedno polje

kraće od preostalih redova. (Ako R ovo zapazi, postaviće header=TRUE.) Ako ste

suočeni sa fajlom koji ima liniju zaglavlja za nazive vrsta, učitajte ga ovako:

read.table("file.dat", header = TRUE,

row.names = 1)

Nazivi kolonama se mogu dodeliti eksplicitno putem col. names.

3. Separator

Klasičnim posmatranjem fajla se može odrediti koji separator polja treba koristiti, ali kod

fajlova sa praznim prostorom kao separatorom postoji mogućnost izbora između osnovne

postavke sep=”” koji koristi bilo koji prazan prostor (space, tab ili newline) kao

separator, sep=”” i sep=”\t”.Primetimo da će izbor separatora uticati na unos

Page 93: 0 Uvod - University of Novi Sadpeople.dmi.uns.ac.rs/~zlc/fajlovi/R_skripta.pdf1 Ovaj material je prevod teksta: M. Hutzenthaler, R course, February 24, 2011 0 Uvod 0.1 Sta je R? S

93

navedenih stringova.

Za fajlove koji koriste tab-ove kao prazne prostore treba koristiti sep=”\t”

4. Navođenje

Po osnovnim postavkama nizovi karaktera se mogu navoditi sa ‘”’ ili ‘’’, i u oba slučaja

svi karakteri koji se nalaze između znaka navoda se uzimaju kao deo niza karaktera.

Grupa validnih znakova navođenja (što može biti i nijedan) je kontolisana od strane

quote argument. Za sep=”\t” osnovne postavke se menjaju na quote=“”.

Primer navođenja stringova kada separator nije specijalno određen:

’One string isn’’t two’,"one more"

što se može učitati putem

read.table("testfile", sep = ",")

Ovo ne funkcioniše na separatoru osnovnih postavki.