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')
93
Embed
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
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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')
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)
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
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.
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
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.
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
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)
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
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
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]
[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
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"
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
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
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:
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
19
> sum(dbinom(5:10,60,1/6)) # Verovatnoca da padne izmedju pet i deset
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.
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
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 []
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
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
> 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
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
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] # '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
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
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.
[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.
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
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
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.
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
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
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'.
> 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.
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,...
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.
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:
> riscfactor <- read.csv2("lifespandata.csv2") Primer 4: Prve tri linije fajla su:
težinska
klasa
pušač životni_vek
3 0 50.3
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:
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)
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).
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)
40
Skup podataka za sledeći primer preuzet je sa stranice http://evol.bio.lmu.de/_statgen/Rcourse/ws1112/
> 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
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().
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
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,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:
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;
47
Ove funkcije se na primer mogu koristiti prilikom traženja outlier-a u podacima.
> 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")
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" )
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
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:
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 )
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
## 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)
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
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“.
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 ).
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.
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
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%.
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
[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
-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
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.
# 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
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
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.
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