``

R

R je besplatno softversko okruženje za statističku analizu i vizualizaciju podataka.

Razvili su ga Ross Ihaka i Robert Gentlemen na Sveučilištu u Aucklandu. Projekt razvijanja jezika R započeo je 1992., prva verzija puštena je 1995., a prva stabilna beta verzija puštena je 2000. godine. Danas ga razvija R Development Core Team.

Prednosti sustava R:

  • sadrži već ugrađenu široku paletu grafičkih i statističkih funkcija
  • grafička rješenja su visoke kvalitete i širokog spektra mogućnosti
  • nudi mogućnost kreiranja vlastitih objekata, funkcija i paketa
  • ne ovisi o operativnom sustavu
  • besplatan je
  • kompatibilan je s drugim programskim jezicima, formatima zapisa podataka i bazama podataka
  • open source
  • nudi mogućnost nadograde paketima
  • primjenjiv na mnogim granama znanosti i industrije
  • mnoge druge

RStudio

RStudio je integrirano razvojno okruženje (korisničko sučelje) preko kojeg se najčešće koristi jezik R.

RStudio

OSNOVNI TIPOVI PODATAKA

Sustav R prepoznaje šest osnovnih ili atomskih tipova podataka:

Tip Izvorni naziv Primjeri
realni double 5, 999.111, 2e5
cjelobrojni integer 1L, -100L, 987654321L
znakovni character “A”, “Učimo R”, “99%”
logički logical TRUE, FALSE, T, F
kompleksni complex 3+2i
sirovi raw as.raw(11), charToRaw(“Hello”)

Tip podatka neke varijable možemo provjeriti funkcijom typeof().

Funkcije “is.” i “as.

  • is.x() provjerava da li je varijabla tipa x
  • as.x() pretvara varijablu u tip x
Testiranje Pretvorba
is.double() as.double()
is.integer() as.integer()
is.numeric() as.numeric()
is.character() as.character()
is.matrix() as.matrix()
itd. itd.

Funkcije is. i as. mogu se kombinirati s gotovo bilo kojim R objektom (matrix, list, data.frame, …).

Specijalne vrijednosti

Inf i -Inf - vrijednost za pozitivnu i negativnu beskonačnost (engl. Infinity)
- numerički, realni tip podatka

NA - nedostajuća vrijednost (engl. not available) za bilo koji tip podatka osim raw.

NaN - nedefinirana vrijednost za numeričku varijablu (engl. not a number)

  • funkcije za testiranje su redom: is.finite(), is.na(), is.nan()
  • funkcije za pretvorbu ne postoje

OSNOVNE STRUKTURE PODATAKA

Dimenzija Homogene strukture Heterogene strukture
1 Vektori (Vector) Liste (List)
2 Matrice (Matrix) Podatkovni okviri (Data Frames)
N Polja/Nizovi (Arrays)

Homogene strukture podataka su one u kojima su svi podaci istog tipa, a heterogene su one koje mogu sadržavati podatke različitih tipova.

Funkcije is. i as. vezane za gore navedene strukture podataka su:

  • is.vector(), is matrix(), is.array(), is.list(), is.data.frame()
  • as.vector(), as matrix(), as.array(), as.list(), as.data.frame()

Funckije class() i str():

  • class() - ispituje kakve je vrste neki objekt (numeric, character, logical, list, matrix, array, data.frame)
  • str() - vraća strukturu objekta

Vektori

Vektor je uređeni niz elemenata istoga tipa.

Izrađuje se uz pomoću funkcije c() (od engl. combine).

a <- c(TRUE, FALSE, TRUE, FALSE)  # logički vektor
a
## [1]  TRUE FALSE  TRUE FALSE

Pomoćne funkcije za izradu vektora

  • Operator dvotočka:” generira niz ‘od:do’

  • seq() generira niz uz mogućnost podešavanja jednog od atributa by, length.out ili along.with

  • rep() replicira zadane vrijednosti uz mogućnost podešavanja jednog od atributa times, each, length.out

NAPOMENA: Kada se unutar funkcije zadaje vrijednost nekom atributu, koristi se operator pridruživanja ‘=’, a ne ‘<-’.

Što se dogodi ako se u funkciji za izradu vektora c() navedu vrijednosti različitih tipova?

Primjer:

l <- c(TRUE, 2)  # logical i double
m <- c(2, "A")   # double i character
n <- c(2L, "A")  # integer i character

Što se dogodi ako se u funkciji za izradu vektora c() navedu vrijednosti različitih tipova?

Primjer:

l <- c(TRUE, 2)  # logical i double
m <- c(2, "A")   # double i character
n <- c(2L, "A")  # integer i character

Ako se u funkciji za izradu vektora c() navedu vrijednosti različitog tipa, doći će do automatske pretvorbe slabijih tipova podataka u jači tip podatka, pri čemu je jači tip podatka onaj koji zadržava više informacija o svakom elementu.

Redoslijed pretvorbe ide u smjeru:

logical -> integer -> double -> character

Što se dogodi ako se u funkciju za izradu vektora c() navedu vrijednosti različitih tipova?

Primjer:

l <- c(TRUE, 2)  # logical i double
m <- c(2, "A")   # double i character
n <- c(2L, "A")  # integer i character

Ako se u funkciju za izradu vektora c() navedu vrijednosti različitog tipa, doći će do automatske pretvorbe slabijih tipova podataka u jači tip podatka, pri čemu je jači tip podatka onaj koji zadržava više informacija o svakom elementu.

Redoslijed pretvorbe ide u smjeru:

logical -> integer -> double -> character

l; m; n;
## [1] 1 2
## [1] "2" "A"
## [1] "2" "A"

Atributi vektora

  • nazivi elemenata vektora, mogu se zadati
    • funkcijom names()
    • prilikom izrade vektora unutar funcije c()
joga <- c(pon=TRUE, uto=FALSE, sri=TRUE, cet=FALSE, pet=TRUE)
  • ostali atributi se dodaju funkcijom attr(), a ispis svih atributa dobije se funkcijom attributes()

  • length() - vraća duljinu vektora

length(joga)
## [1] 5
  • nchar() - vraća duljinu znakova svakog pojedinog elementa unutar vektora
nchar(joga)
## pon uto sri cet pet 
##   4   5   4   5   4

Selektiranje elemenata vektora

Elementi vektora mogu se selektirati

  • operatorom “[”

Primjer:

a <- c("A","B", "C", "D", "F")
# selektiranje 2. elementa vektora a
a[2]
## [1] "B"
  • nazivom elementa vektora:

Primjer:

joga <- c(pon=T, uto=F, sri=T, cet=F, pet=T)
joga["sri"]
##  sri 
## TRUE

Brisanje elemenata iz vektora

Element vektora briše se tako da mu se indeks postavi na negativnu vrijednost:

Primjer:

x <- c("A", "B", "C", "D")

#ispis svih elemenata osim drugog:
x[-2]
## [1] "A" "C" "D"
x # vektor x se ovim ispisom nije izmijenio
## [1] "A" "B" "C" "D"
# trajno brisanje drugog elementa izvršava se pridruživanjem
x <- x[-2]
x
## [1] "A" "C" "D"

Operacije nad vektorima

Većina operacija nad vektorima izvršavaju se vektorizirano, odnosno operacije se primijenjuju nad svakim elementom vektora zasebno.

Primjer:

t <- c(1, 2, 3, 4, 5)

t*2
## [1]  2  4  6  8 10
t+10
## [1] 11 12 13 14 15

Operacije nad dva vektora istih duljina

Primjer aritmetičkih i logičkih operacija nad dva vektora istih duljina:

t <- c(1, 2, 3, 4, 5)
s <- c(0, 2, 4, 6, 8)

t+s
## [1]  1  4  7 10 13
t*s
## [1]  0  4 12 24 40
t>s
## [1]  TRUE FALSE FALSE FALSE FALSE

Operacije nad dva vektora različitih duljina

Što ako vektori nad kojima vršimo operaciju nisu jednakih duljina?

t <- c(1, 2, 3, 4, 5)
s <- c(3, 6, 9)

t+s
t*s
t>s

Princip recikliranja

Ako dva vektora nad kojima se izvršava vektorizirana operacija nisu jednakih duljina, sustav R će ih napraviti jednako dugima tako da reciklira, odnosno replicira kraći vektor dok ne postane jednake duljine kao dulji vektor.

t <- c(1, 2, 3, 4, 5)
s <- c(3, 6, 9)

t+s
## [1]  4  8 12  7 11
t*s
## [1]  3 12 27 12 30
t>s
## [1] FALSE FALSE FALSE  TRUE FALSE

Logičko selektiranje elemenata vektora

t <- c(1, 2, 3, 4, 5)

t[t>2]
## [1] 3 4 5
t[c(TRUE, FALSE, TRUE, FALSE, TRUE)]
## [1] 1 3 5
# princip recikliranja omogućuje da se gornja naredba skrati:
t[c(TRUE, FALSE)]
## [1] 1 3 5

Matrice i polja

Matrica se izrađuje funkcijom matrix():

matrix(data = 1:12, nrow = 3, ncol = 4) 
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
# ili skraćeno
# matrix(1:12, 3, 4)

Atributi:

  • dim() - funkcija koja vraća dimenzije matrice
  • dimnames - lista koja sadrži dva vektora s nazivima redaka, odnosno stupaca
  • rownames() - funkcija koja zadaje nazive redaka
  • colnames() - funkcija koja zadaje nazive stupaca

Selektiranje elemenata matrice

Elemente dohvaćamo pomoću operatora [,] koji prihvaća dva argumenta. Prvi se odnosi na redni broj retka, a drugi na redni broj stupca.

Primjer:

m[1,3]

Ako se u operatoru pridruživanja izostavi prvi argument, kao npr. m[, 3] dobit će se treći stupac. Ako se u operatoru pridruživanja izostavi drugi argument, npr. m[3,], dobit će se treći redak.

m[,3]  # vraća treći stupac matrice m  
m[3,]  # vraća treći redak matrice m

Spajanje matrica

Matrici se može dodati novi redak, stupac ili druga matrica odgovarajućih dimenzija.

  • cbind() - funkcija za spajanje preko stupaca

  • rbind() - funkcija za spajanje preko redaka

Transponiranje matrice

Transponiranje matrice, odnosno zamjena redaka i stupaca, provodi se pomoću funcije t().

Polja

Radnje analogne onima koje se provode nad matricama mogu se provoditi i nad poljima.

Za izradu polja koristi se funkcija array(),
dimenzije se definiraju funkcijom dim(),
a imenuju funkcijom dimnames().
Polje se može transponirati funkcijom abind() iz paketa abind.

Liste

Liste su objekti koji mogu sadržavati elemente različitih tipova, uključujući i druge objekte poput liste, matrice, funkcije, itd.

Liste se stvaraju pomoću funkcije list().

Liste su jednodimenzionalne strukture podataka, iako elementi unutar liste mogu biti višedimenzionalni.

  • names() - funkcija za imenovanje elemenata liste
  • $’ - operator za selektiranje i izradu imenovanih elemenata liste
  • NULL - vrijednost kojom se briše element liste

Podatkovni okviri

Podatkovni okviri (engl. data frame) su dvodimenzionalni skupovi podataka koji sadrže elemente različitih tipova, pri čemu svaki njegov stupac unutar sebe sadrži isti tip podatka i svi stupci su jednakih dimenzija.

Primjer:

Film Godina Zarada Distributor
Black Panther 2018 700.059.566 Buena Vista
Star Wars: The Last Jedi 2017 620.181.382 Buena Vista
Rogue One: A Star Wars Story 2016 532.177.324 Buena Vista
Star Wars: The Force Awakens 2015 936.662.225 Buena Vista
American Sniper 2014 350.126.372 Warner Bros

Podatkovni okviri

Stupci podatkovnog okvira predstavljaju varijable opažanja, a svaki redak predstavlja po jednu opservaciju.

Svaki stupac možemo shvatiti kao vektor, a svaki redak kao listu. Također, cijeli podatkovni okvir možemo shvatiti kao listu vektora istih duljina, stoga podatkovni okviri posjeduje svojstva i matrice i liste.

Iz tog razloga nad njima možemo primijenjivati funkcije poput names(), colnames(), rownames(), dim(), length(), ncol(), nrow(), rbind(), cbind() i operatora poput $, [], [,].

Podskup podatkovnog okvira

Podskup podatkovnog okvira P dobiva se naredbom subset(P, uvjet) gdje je uvjet logički izraz kojeg elementi podskupa trebaju zadovoljavati.

Primjer:

subset(grupa, Grad != "Zagreb")

Sortiranje podatkovnog okvira

order()

Funkcija order(x) vraća indekse u takvom redoslijedu u kojem bi vektor x bio sortiran

=>

Sortiranje podatkovnog okvira grupa po godinama, odnosno po varijabli Dob:

grupa[order(grupa$Dob),] 

Brisanje elemenata iz podatkovnog okvira

  • Brisanje stupaca provodi se pomoću NULL objekta, ili operatora minus (-):
grupa <- grupa[-2]  # brisanje drugog stupca
grupa[2] <- NULL    # drugi način brisanja drugog stupca
  • Brisanje redaka može se odraditi pomoću operatora “-”:
grupa <- grupa[-4,]  # brisanje četvrtog retka
  • Pojedinačne vrijednosti unutar podatkovnog skupa brišu se pomoću NA.
grupa[5,2] <- NA  # brisanje elementa koji se nalazi u petom retku i drugom stupcu
grupa$VozačkaDozvola[grupa$Ime=="Iva"] <- NA    # brisanje onih elemenata u stupcu VozačkaDozvola  
                                                # kojima je vrijednost varijable Ime = "Iva"

Učitavanje podatkovnih okvira

Podatkovni okviri mogu se dobiti učitavanjem iz vanjske datoteke (.txt, .csv, …) uz pomoć funkcija read.csv(), read.csv2(), read.table(), read.delim() i drugih.

Izbor funkcije može ovisiti o separatoru koji je korišten za razdvajanje polja u datoteci.

Primjer:

deniro <- read.csv("Podaci/deniro.csv")

#nakon učitavanja, provjeravaju se svojstva podatkovnog okvira, npr. funkcijom str():
str(deniro)
## 'data.frame':    87 obs. of  3 variables:
##  $ Year : int  1968 1970 1970 1971 1973 1973 1974 1976 1976 1977 ...
##  $ Score: int  86 17 73 40 98 88 97 41 99 47 ...
##  $ Title: chr  "Greetings" "Bloody Mama" "Hi Mom!" "Born to Win" ...

Podatkovni okviri ugrađeni u R

R i paketi namjenjeni sustavu R imaju ugrađene baze podataka koje sadrže podatkovne okvire i druge strukture podataka.

Popis svih dostupnih podatkovnih skupova može se dobiti naredbom data().

Za svaki takav podatkovni skup postoji dokumentacija u kojoj su dane informacije o skupu i varijablama. Mogu se dobiti standardnim putem pomoću naredbe “?ime_podatkovnog_skupa” ili direktnim upitom unutar kartice Help.

Faktori

Faktori ili kategorijske varijable su varijable koje mogu poprimiti konačan broj vrijednosti (levels), i svaka takva vrijednost predstavlja po jednu kategoriju odnosno razinu.

Izrađuju se funkcijom factor() ili as.factor().

Razine faktora mogu se definirati ili izmijeniti funkcijom (ili argumentom) levels().

Funkcija table()

Funkcija table() proizvodi kontingencijsku tablicu, tj. tablicu koja nudi uvid u brojčano stanje elemenata. Drugim riječima, ona popisuje čega sve ima i koliko.

table() prima jedan ili više argumenata, koji su idealno faktorske varijable ili barem varijable koje bi imalo smisla pretvoriti u faktore (npr. decimalne brojeve ne bi stavili kao argument funkcije table()).

Primjer:

table(uzorak$spol, uzorak$kosa)
##         
##          Crna Crvena Plava Sijeda Smeđa
##   Muski     2      1     1      1     2
##   Zenski    1      2     2      2     1

FUNKCIJE SUSTAVA R

Funkcija je skupina izraza koja izvršava neki zadatak. Osnovna sintaksa svake funkcije je

ime_funkcije <- function(argument1, argument2, ...){

izraz1
izraz2
...

}

Svaka funkcija ima svoj naziv po kojem se poziva.

Argumenti su ulazni podaci koji trebaju funkciji da izvrši neki zadatak. Funkcija može, a i ne mora imati argumente, i argumenti mogu imati unaprijed zadane vrijednosti (standardne postavke).

Korisnik sam može definirati svoju funkciju, no u sustavu R dostupan je velik broj ‘gotovih’ funkcija.

Svaka funkcija pripada nekom paketu. Neke funkcije su ugrađene u sustav R putem bazičnih paketa, kao npr. mean() za izračun srednje vrijednosti i c() za izradu vektora koje pripadaju paketu {base}, druge se nalaze u vanjskim paketima koji se moraju učitati.

Dokumentacija funkcija

Početno mjesto za upoznavanje s nekom funkcijom je njena dokumentacija. U njoj se može naći sintaksa funkcije, opis argumenata, primjeri, itd.

Dokumentacija funkcije otvorit će se u kartici Help nakon poziva narede ?ime_funkcije ili upisom imena funkcije u karticu Help.

Posebnu pozornost treba obratiti na dijelove Description, Usage, Arguments i Examples.

Argumenti funkcija

Funkcije posjeduju imenovane argumente. Neki od njih imaju zadane predodređene vrijednosti ili standardne postavke (engl. default values), a svim drugima korisnik treba postaviti neku vrijednost da bi se funkcija mogla pozvati.

Argumenti koji imaju zadane predodređene vrijednosti ne trebaju se navoditi u pozivu funkcije, osim ako im se ne želi promijeniti zadana vrijednost. Preporuka je da se korisnik upozna sa svakom funkcijom prije korištenja.

Argumenti se s funkcijom spajaju (engl. match) na tri načina:

  • prema nazivu,
  • prema djelomičnom nazivu,
  • prema poziciji.

Funkcije iz grupe apply

Funkcije iz grupe apply alternativna se rješenja za petlje, odnosno mehanizam koji koristimo umjesto višestrukog izvršavanja istog programskog koda.

Izbor funkcije ovisi o tome nad kojim objektom se vrši radnja i kakav objekt želimo za rezultat.

  • apply(X, MARGIN, FUN) - koristi se nad poljima i matricama, rezultat je vektor
  • lapply(X, FUN, ...) - koristi se nad vektorima i listama, rezultat je lista
  • sapply(X, FUN, ...) - koristi se nad vektorima i listama, rezultat je vektor (ako je moguće)
  • tapply(X, BY, FUN) - koristi se nad vektorima grupiranima po faktoru BY
  • aggregate(X, BY, FUN) - koristi se nad podatkovnim okvirima grupiranima po faktoru BY .
    • FUN - funkcija koja se primijenjuje nad objektom X.
    • MARGIN - indikator retka ili stupca.
    • BY - faktorska varijabla

Postoje i druge funnkcije iz grupe apply, ali ih nećemo obrađivati u ovom tečaju.

Popis operatora u sustavu R

Aritmetički operatori

  • + zbrajanje
  • - oduzimanje
  • * množenje
  • / dijeljenje
  • ^ ili ** potenciranje
  • %% modulo (ostatak pri cjelobrojnom dijeljenju)

Popis operatora u sustavu R

Logički operatori

  • <, <=, >, >=, == - manje, manje ili jednako, veće, veće ili jednako, jednako
  • != - različito
  • ! - negacija (!x se čita kao “nije x”)
  • x | y - x ili y
  • x & y - x i y.
  • || - skalarni i (nije vektoriziran)
  • && - skalarni ili (nije vektoriziran)

VIZUALIZACIJA PODATAKA

Vizualizaciju, odnosno grafički prikaz podataka moguće je napraviti na više načina, odabirom grafičkih funkcija iz različitih paketa:

  • Grafički sustav bazičnih paketa
  • paket lattice
  • paket ggplot2 - ne obrađujemo na ovom tečaju
  • mnogi drugi - ne obrađujemo na ovom tečaju

Plot

Osnovna naredba za crtanje grafa je plot().

Iz dokumentacije:

"plot(x, y, ...)

type - what type of plot should be drawn. Possible types are

  • p” for points,
  • l” for lines,
  • b” for both,
  • c” for the lines part alone of “b”,
  • o” for both ‘overplotted’,
  • h” for ‘histogram’ like (or ‘high-density’) vertical lines,
  • s” for stair steps,
  • S” for other steps, see ‘Details’ below,
  • n” for no plotting.
    …"

Argumenti funkcije plot

Neki od češće korištenih argumenata grafičkih funkcija:

Argument Pojašnjenje
pch vrsta simbola
lty vrsta linije
lwd debljina linije
col boja točaka ili linije (naziv, broj ili heksadecimalni broj)
cex (cex, cex.axis, cex.lab, cex.main, cex.sub) multiplikator veličine točaka, naziva, …
xlim, ylim podešavanje raspona x i y osi, zadaje se u obliku vektora c(od, do)
las orijentacija teksta na osima grafikona
frame, bty podešavanje okvira grafikona (bty dolazi od engl. box type)
xlab, ylab nazivi osi
main naziv grafikona
bg boja pozadine grafikona unutar par() funkcije, a boja ispune točke za pch između 21:25 unutar plot() funkcije
mfrow = c(m, n); mfcol = c(m, n) za crtanje više grafikona zajedno, koji se postavljaju u m x n matricu i popunjavaju po redcima/stupcima (poziv moguć samo unutar funkcije par())

Grafičke funkcije nižeg reda

  • funkcije koje dodaju sloj grafikonu, ali ne mogu proizvesti neovisan grafikon.
Funkcija Pojašnjenje
points() ucrtava točke na grafikonu
lines() uctava liniju koja prolazi zadanim točkama
abline(a, b) dodavanje pravca jednadžbe y = a + bx
segments() crta segmenat između zadanih točaka
arrows() isto kao segments(), ali sa strelicom na kraju
axis() funkcija za podešavanje osi i oznaka na osima
title() dodaje naslov grafikona
text() za dodavanje teksta na proizvoljnom mjestu grafikona
mtext() za dodavanje tekstova na margine grafikona
legend() za dodavanje i podešavanje legende

Ostale grafičke funkcije višeg reda

Funkcija Pojašnjenje
hist() histogram - distribucija neprekidne numeričke varijable
boxplot() dijagram pravokutnika ili brkata kutija - grafički prikaz mjera deskriptivne statistike
barplot() stupčasti grafikon - prikaz veze između kategorijske i numeričke varijable
itd…

Paket Lattice

Sintaksa grafičkih funkcija iz paketa lattice je

vrsta_grafikona(formula|uvjet, podatkovni_skup)

Vrsta grafikona Opis Formula (x - podaci, A - faktorska varijabla)
barchart stupčasti dijagram x~A ili A~x
bwplot dijagram pravokutnika x~A ili A~x
cloud 3D točkasti dijagram z~x*y|A
contourplot 3D kontura z~x*y
densityplot graf funkcije gustoće ~x|A*B
dotplot točkasti graf ~x|A
histogram histogram ~x
levelplot 3D graf razina z~y*x
parallel graf paralelnih koordinata podatkovni okvir
stripplot linijski (1D) graf A~x ili x~A
xyplot graf dviju varijabli y~x|A
wireframe 3D uokvireni graf z~y*x

Boje u sustavu R

Boje u sustavu R označavaju se na jedan od tri načina:

  • cijelim brojem koji označava redni broj boje u paleti palette()
  • nazivom boje iz popisa od 657 imenovanih boja sustava R
  • heksadecimalnim zapisom oblika #rrggbb ili #rrggbbaa pri čemu znamenke rr, gg, bb predstavljaju heksadecimalni zapis udjela crvene, zelene i plave boje koji može ići od 0 do 255, a aa je stupanj prozirnosti pri čemu je 00 potpuno prozirno, a 255 potpuno neprozirno.

Paleta boja iz palette() ima standardno zadanih osam boja, no te postavke se mogu istom funkcijom i promijeniti u boje po vlastitom izboru.

Standardizirane palete boja u bazičnim paketima sustava R:

ColoRampPalette

Funkija colorRampPalette() za argument prima dvije ili više boja kao granice između kojih se interpoliraju ostale nijanse boja.

ColorRampPalette() kao rezultat vraća funckiju kojoj je za argument potrebno proslijedi cijeli broj kojim se određuje ukupan broj nijansi u paleti.

Primjer

moja_paleta <- colorRampPalette(c("green", "blue"))    # moja_paleta je funkcija

palette(moja_paleta(12))  # funkciji moja_paleta prosljeđujemo broj 12 kao ukupan broj boja u paleti

RColorBrewer

Paket RColorBrewer sadrži nekoliko unaprijed kreiranih paleta, a koje se dijele na tri kategorije:

  1. sekvencijalne - za kontinuirane varijable, svijetle boje za niske, a tamne boje za visoke vrijednosti

  2. kvalitativne - za kategorijske varijable, ciljaju maksimalnoj vizualnoj razlici između kategorija

  3. divergentne - za varijable koje divergiraju nekoj vrijednosti ili imaju raspon od negativnih prema pozitivnim vrijednostima.

Pregled paleta se može dohvatiti naredbom display.brewer.all() nakon instalacije i učitavanja paketa RColorBrewer.

RColorBrewer

Pojedina paleta dohvaća se naredbom brewer.pal(n, "ime_palete") gdje je n broj željenih boja iz navedene palete.

Pohranjivanje grafikona

Pohranjivanje grafikona na tvrdi disk najčešće se provodi u obliku .jpeg, .png te .pdf datoteka.

Postupak se sastoji od otvoranja nove datoteke određenog tipa naredbama jpeg(), png() ili pdf() u koju se upiše naziv nove datoteke. U tu datoteku se zatim nacrta grafikon, jedan ili više njih, te se završi naredbom dev.off().

Primjer:

jpeg("histogrami.jpeg")
hist(iris$Petal.Length, xlab = "Petal Length", col="plum")
dev.off()


png("histogrami.png")
hist(iris$Petal.Length, xlab = "Petal Length", col="plum")
dev.off()


pdf("histogrami.pdf")
hist(iris$Petal.Length, xlab = "Petal Length", col="plum")
dev.off()

MANIPULACIJA TEKSTOM U R-u

U cijelom procesu analize podataka, najviše vremena se obično provede u ‘uređivanju’ podataka.

Često je potrebno sintetizirati više skupova podataka iz različitih izvora u isti format, a često je slučaj da se podaci razbijaju na dijelove te onda sastavljaju u skupove drugačijih oblika kako bi bili uredni, tj pogodni za obradu.

Obrada znakovnih podataka često podrazumijeva homogeniziranje formata, ispravljanje pogrešaka te razne manipulacije i transformacije podataka. R ima bogat skup funkcija dizajniran za manipulaciju znakovnih podataka čime se olakšava čišćenje, formatiranje i obrada informacija. Upoznat ćemo se s osnovama manipulacije znakovnih podataka u R-u.

Regularni izrazi 1/2

Regularni izrazi mogu se definirati kao uzorak znakova koji opisuje skup nizova ili jednostavnije rečeno, regularni izrazi daju upute funkciji na koji način da pariraju i zamijene određene znakove.

Tablica odabranih regularnih izraza za korištenje u R naredbama:

Element Značenje
\\d ili [[:digit:]] ili [0-9] bilo koja znamenka
\\D ili [[:alpha:]] ili [A-Za-z] bilo koje slovo
[[:alnum:]] bilo koji alfanumerički znak (slovo ili znamenka
[[:punct:]] bilo koji znak interpunkcije
\\s ili [[:space:]] bilo kakva praznina
\\. točka
[abc] samo navedeni znakovi
[^abc] svi znakovi osim navedenih
(ab|cd) niz ‘ab’ ili niz ‘cd’

Regularni izrazi 2/2

Element Značenje
. bilo koji znak osim novog reda
? prethodni znak je opcionalan
+ jedno ili više ponavljanja prethodnog znaka
* nijedno ili više ponavljanja prethodnog znaka
{n} prethodni znak se ponavlja točno n puta
{n,} prethodni znak se ponavlja n ili više puta
{n,m} prethodni znak se ponavlja barem n puta, ali ne više od m puta
^ oznaka za početak stringa
$ oznaka za kraj stringa
| ili
( ) zagrade za grupiranje
[ ] zagrade za klasu znakova
\\ znak za izlaz iz načina rada regularnog izraza

Osnovne funkcije za rad sa znakovima

RAD S DATUMIMA

U sustavu R postoje tri klase kojima se može zabilježiti vrijeme:

  • klasa Date - pohranjuje datum kao broj dana od 1.1.1970 UTC.
  • klase POSIXct - pohranjuje datum i vrijeme kao broj sekundi od 1.1.1970 UTC.
  • klasa POSIXlt - pohranjuje datum i vrijeme u obliku liste (hour, min, sec, mon,…) čime je lakše dohvatiti pojedini element datuma.

Klasa Date

Standardani oblik datuma klase Date je oblika “YYYY-mm-dd” (godina-mjesec-dan).

Znakovna varijabla X pretvara se u objekt klase Date funkcijom as.Date(X, format) kako bi se mogle izvršavati računske operacije s datumima i ispisivati ih u pravilnim formatima.

Opcije za format dane su u donjoj tablici:

Šifra Značenje
%d dan u mjesecu (broj)
%m mjesec (broj)
%b mjesec (skraćeni naziv u jeziku operativnog sustava)
%B mjesec (puni naziv u jeziku operativnog sustava (locale))
%y godina (2 znamenke)
%Y godina (4 znamenke)
#Primjer:
datum <- as.Date("23. lip 2019", format = "%d. %b %Y")
datum  #pri ispisu će imati standardni format datuma
## [1] "2019-06-23"

Klasa Date

Funkcije za rad s objektima klase Date:

  • weekdays() - vraća ime dana u tjednu
  • months() - vraća ime mjeseca
  • quarters() - vraća redni broj kvartala
  • format(X, "%Y") - vraća godinu za objekt X koji je klase Date

Funkcija Sys.Date() vraća trenutačni datum.

Funkcija date() vraća datum i vrijeme u obliku znakovnog tipa podatka.

klase POSIXlt i POSIXct

Služe za pohranu datuma i vremena.

POSIXct pohranjuje datum kao broj sekundi od ponoći 01.01.1970. (ct = calendar time).

POSIXlt pohranjuje datum kao listu koja sadrži dan, mjesec, godinu, sat, minutu, sekundu, itd.. (lt = local time), ali mjeri vrijeme drugačije, npr. godine broji od 1900.-te, mjesece označava brojevima 0-11, itd. Otvorite karticu Help i upišite POSIXlt za više detalja.

Standardni format ispisa je isti u oba slučaja: "%Y-%m-%d %H:%M:%S tz" gdje je tz vremenska zona (engl. time zone).

Vektor se pretvara u objekt tipa POSIXct/POSIClt funkcijama as.POSIXct()/as.POSIXlt().

Funkcije strptime() i strftime()

strptime() - služi za pretvorbu znakovnih tipova podataka u POSIClt.

strftime() - vraća objekte tipa POSIXlt, POSIXct i Date u znakovni tip podatka; inverz od strptime()

Obje funkcije posjeduju bogat izbor formata koje je moguće pronaći dokumentaciji.

Primjr:

strftime(datum, format = "%c")  # vrsta formata ovisno o regionalnim postavkama na računalu
## [1] "ned lip 23 00:00:00 2019"
strftime(datum, format = "%j")  # Redni broj dana u godini (rezultat je znakovni tip, ne numerički)
## [1] "174"
strftime(datum, format = "%A")  # Puni naziv dana u tjednu
## [1] "nedjelja"

Vremenske zone

Vremenske zone kontroliraju se argumentom tz.

Popis mogućih vremenskih zona (Olsonove vremenske zone) dobije se naredbom OlsonNames(), a vremensku zonu iz regionalnih postavki računala dobije se naredbom Sys.timezone().

Sys.timezone()
## [1] "Europe/Warsaw"

UVOD U STATISTIKU UZ SUSTAV R

Statistika se kao znanstvena disciplina bavi razvojem metoda prikupljanja, opisivanja i analiziranja podataka te primjenom tih metoda u procesu donošenja zaključaka.

U svakodnevnom životu riječ statistika koristimo kada brojčanim vrijednostima pokušavamo opisati bitne karakteristike nekog skupa podataka (populacije/uzorka).

Osnovni pojmovi u statistici

Populacija - ukupan skup jedinki koje su predmet nekog interesa i o kojima se želi donijeti zaključak.

  • Populacija može biti konačna ili beskonačna.

Statističko zaključivanje - zaključivanje o populaciji od interesa, a zasniva se na reprezentativnom uzorku iz populacije

Uzorak - dio populacije. Dijele se na nevjerojatnosne (koji se ne mogu koristiti za statističko zaključivanje) i vjerojatnosne (koji se mogu koristiti za statističko zaključivanje).

Vjerojatnosni uzorci se dijele na:

  • Jednostavne
  • Sistemske
  • Stratificirane
  • Klasterske
  • Kombinirane

Osnovni pojmovi u statistici

Uzorci međusobno mogu biti

  • zavisni - oni kod kojih rezultati mjerenja i opažanja na jednom uzorku ne utječu na rezultate mjerenja i opažanja istih osobina na drugom uzorku,

  • nezavisni - oni kod kojih su mjerenja u jednom uzorku povezana s mjerenjima u drugom uzorku.

Varijabla - svojstvo ili stanje čije vrijednosti variraju.

Varijable mogu biti:

  • diskretne: one koje mogu poprimiti konačan broj vrijednosti (npr. ocjena, razred, boja, …),
  • neprekidne ili kontinuirane : koje mogu poprimiti neprebrojivo mnogo vrijednosti (npr. duljina, širina, vrijeme, ).

Varijable međusobno mogu biti:

  • Nezavisne (eksperimentalne/prediktorske)
  • Zavisna (varijabla ishoda)

Tipovi mjernih skala

Za uspostavu odnosa između varijabli, varijable se moraju mjeriti. Proces mjerenja varijabli zahtijeva skale mjerenja koje možemo shvatiti kao shemu za numeričku reprezentaciju vrijednosti varijable.

Mjerne skale se razlikuju po tipu varijabli koje predstavljaju te svojstvima i interpretaciji brojeva sadržanih u skali. Tipovi mjernih skala:

  1. Nominalna
  2. Ordinalna
  3. Intervalna
  4. Omjerna

Deskriptivna vs. inferencijalna statistika

Deskriptivna statistika - obuhvaća postupke uređivanja, tabličnog i grafičkog prikazivanja podataka te izračunavanje opisnih statističkih pokazatelja.

Inferencijalna statistika - temelji se na teoriji vjerojatnosti i proučava metode kojima se pomoću dijela informacija (reprezentativnog uzorka) donose zaključci o cjelini (populaciji).

Deskriptivna statistika

Metodama deskriptivne statistike opisujemo odabrani uzorak ili populaciju što uključuje računanje statističkih pokazatelja poput aritmetičke sredine, maksimuma, minimuma, itd. Generalizacija zaključaka nije moguća.

Sumarni pokazatelj za cijelu populaciju naziva se parametar dok se sumarni pokazatelj uzorka naziva statistika.

Deskriptivna statistika

Sumiranje podataka o nekom skupu, populaciji ili uzorku, možemo podijeliti na mjere:

  • centralne tendencije podataka
    • srednja vrijednost
    • medijan
    • mod
  • varijabilnosti podataka
    • apsolutna varijabilnost
      • standardna devijacija
      • varijanca
      • raspon
      • interkvartilni raspon
    • relativna varijabilnost
      • koeficijent korelacije

Najčešće korištene funkcije deskriptivne statistike:

Funkcija Opis Primjer Rezultat
min() minimum skupa x min(starwars$height) 66
max() maksimum skupa x max(starwars$height) 264
which.min() indeks retka u kojem se postiže minimum which.min(starwars$height) 19
which.max() indeks retka u kojem se postiže maksimum which.max(starwars$height) 54
sum(x) zbroj svih vrijednosti u x sum(starwars$mass) 5741.4
diff() uzastopne razlike diff(starwars$height[1:5]) -5, -71, 106, -52
mean() srednja vrijednost mean(starwars$height) 174.3580247
median() medijan median(starwars$height) 180
quantile() kvantili quantile(starwars$height, na.rm=T) 66, 167, 180, 191, 264
sd() standardna devijacija sd(starwars$height) 34.7704288
var() varijanca var(starwars$height) 1208.982716
range() rang range(starwars$height) 66, 264
cor() korelacija dvaju vektora/matrica cor(starwars$height, starwars$mass, use="complete.obs") 0.1338842

Neke od grafičkih funkcija često korištenih u deskriptivnoj statistici:

Funkcija Opis Primjer
plot() točkasti ili linijski grafikon za prikaz jedne ili dviju varijabli plot(iris$Petal.Width, iris$Petal.Length)
boxplot() dijagram pravokutnika - grafički prikaz statističkih sažetaka boxplot(starwars$height)
densityplot() funkcija gustoće vjerojatnosti iz paketa lattice densityplot(poznate_godine$birth_year)
barplot() stupčasti dijagram - za prikaz distribucije diskretne varijable barplot(Frekvencije ~ Boja_ociju,tablica_frekvencija
hist() histogram - za prikaz distribucije kontinuirane varijable hist(starwars$height)

Inferencijalna statistika

Inferencijalna ili induktivna statistika bavi se izvođenjem zaključaka o populaciji na temlju svojstava uzorka.

Kakav će uzorak biti je slučajnost, te se njegova svojstva opisuju slučajnim varijablama.

Slučajna varijabla

Slučajna varijabla je varijabla čije vrijednosti variraju na slučajan način. Može poprimiti skup mogućih različitih vrijednosti, svaku s pridruženom vjerojatnošću, i to određuje njenu distribuciju.

Slučajna varijabla može biti:

  • Diskretna – poprima konačan broj vrijednosti ili prebrojivo mnogo njih.
    Primjeri: Živ/mrtav, bacanje kocke, ocjena u školi.

  • Neprekidna – poprima bilo koju vrijednost iz nekog intervala realnih vrijednosti.
    Primjeri: visina, težina, brzina, realni brojevi od 1 do 10.

Uz svaku slučajnu varijablu vezene su dvije funkcije: kumulativna funkcija distribucije i funkcija (gustoće) vjerojatnosti.

Kumulativna funkcija distribucije

Kumulativna funkcija distribucije (engl. cumulative distribution function, CDF) daje vjerojatnost da slučajna varijabla \(X\) poprimi bilo koju vrijednost manju ili jednaku od \(x\). Označava se s \(F(x)\):

\[\mathrm{F(x)} = P(x ≤ X), ~~ -\infty < x < \infty\]

Grafički prikaz takve funkcije uvijek počinje slijeva od vrijednosti 0 na osi y, i završava desno s vrijednosti 1 na osi y.

U R-u se koristi funkcija ecdf() (engl. empirical cumulative distribution function) da bi se dobila kumulativna funkcija distribucije neke varijable.

Funkcija (gustoće) vjerojatnosti

Funkcija vjerojatnosti diskretne slučajne varijable

Neka diskretna slučajna varijabla \(X\) može poprimiti vrijednosti iz skupa \(A = (x_1, x_2, ..., x_n)\). Tada je

\[ \begin{align} &f(x_i) = P(X = x_i), ~~~\forall x_i \in A \\ &f(x) = 0, ~~~ x \notin A \end{align} \]

Funkcija gustoće vjerojatnosti neprekidne slučajne varijable

Vjerojatnost da neprekidna slučajna varijabla \(X\) poprimi neku vrijednosti između \((k,l)\) računa se po formuli:

\[P(k\leq X\leq l) = \int_k^lf(x)dx\] Ta vjerojatnost jednaka je površini ispod funkcije gustoće na intervalu \((k,l)\).

Normalna ili Gaussova distribucija

Funkcija gustoće vjerojatnosti slučajne varijable opisana je s dva parametra, srednjom vrijednosti \(µ\) i varijancom \(σ^2\). Kažemo da je slučajna varijabla \(X\) normalana i pišemo \(X \sim N(µ, σ^2)\), ako joj je funkcija gustoće jednaka:

\[f_X(x)=\frac{1}{\sigma \sqrt{2\pi}}e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2}, ~~~~~-\infty < x <\infty\]

Distribucija ima karakterističan zvonolik oblik oko srednje vrijednosti \(µ\), dok varijanca \(σ^2\) određuje širinu zvonca:

Normalna distribucija koja ima srednju vrijednost 0 i varijancu 1, \(X \sim N(0,1)\) zove se standardna normalna distribucija.

Pravilo 68-95-99.7

U svakoj normalnoj distribuciji približno 68% vrijednosti nalazi se u rasponu od ± jedne standardne devijacije od srednje vrijednosti.
Približno 95% vrijednosti nalazi se u rasponu od ±2 standardne devijacije od srednje vrijednosti, te otprilike 99.7% vrijednosti nalazi se u rasponu od ±3 standardne devijacije od srednje vrijednosti.

Distribucije vjerojatnosti u sustavu R

  • funkcija d računa funkciju gustoću neke distribucije (\(f(x) = P(X = x)\)). Primjerice, dnorm, dt, dbinom, dunif, dpois redom su funkcije gustoće vjerojatnosti za normalnu, studentovu, binomnu, uniformnu i poissonovu distribuciju.
dnorm(0) #funkcija gustoće standardne normalne distribucije u točki 0
  • funkcija p računa kumulativnu vjerojatnost do vrijednosti x (\(F(x) = P[X ≤ x]\)). Primjerice, pnorm, pt, pbeta, pbinom, pcauchy, punif, ppois, …
pnorm(0)
  • funkcija q(P) vraća kvantil, odnosno točku na osi x u kojoj je postignuta kumulativna vjerojatnost od P. Drugim riječima, to je inverz funkcije p. Primjeri: qnorm, qt, qbeta, qbinom, …
qnorm(0.5)
  • funkcija r(n) generira slučajnu varijablu navedene distribucije u obliku vektora duljine n. Primjeri: rnorm, rt, rbeta, rbinom, …
rnorm(5)

Testiranje hipoteza

Statistička hipoteza je bilo kakva pretpostavka o distribuciji nekog statističkog obilježja.

Osnovna hipoteza zove se nul-hipoteza, i uz nju se postavlja njoj alternativna hipoteza.

Npr.
\(H0 : µ = 50\)
\(H1 : µ < 50\)

Testiranje hipoteze je korištenje statistike da bi se na osnovu realizacije slučajnog uzorka odlučilo da li se \(H0\) odbacuje ili ne odbacuje.

Pogreške

Ako se dogodi da se \(H0\) odbaci kada je ona istinita, dogodila se pogreška prve vrste.

Ako se dogodi da se \(H0\) ne odbaci kada ona nije istinita, dogodila se pogreška druge vrste.

Pristup testiranju hipoteze

1. način: metoda kritičnog područja

Kod testiranja hipoteze potrebna su dva broja - testna statistika i kritična vrijednost.

Pristup testiranju hipoteze

2.način: Metoda p-vrijednosti

p-vrijednost je vjerojatnost da se dobila baš ta testna statistike pod uvjetom da je nul-hipoteza točna.

Z-test

Z-test koristimo kada pretpostavljamo da je distribucija testne statistike normalna ili kada može biti aproksimirana normalnoj te kada je poznata standardna devijacija populacije.

Često se koristi u situacijama kada treba odrediti pripada li neki uzorak danoj populaciji.

Npr.

H0: srednja vrijednost uzorka jednaka je srednjoj vrijednosti populacije
H1: srednje vrijednosti se razlikuju.

Formula za test statistiku:

\[Z = \frac{\bar{X}-\mu}{\frac{\sigma}{\sqrt{n}}}\]

Pouzdani interval

Procjenjivanje populacijskog parametra na temelju slučajnog uzorka nije 100% pouzdano, stoga se uz njega procjenjuje i interval u kojem se s visokom vjerojatnošću nalazi pravi populacijski parametar.

Ako je \(σ\) poznata pouzdani interval je:

\[\bar{X} \pm z_{\frac{\alpha}{2}}\frac{\sigma}{\sqrt{n}}\]

Ako je \(σ\) nepoznata pouzdani interval je:

\[\bar{X} \pm t_{n-1, \frac{\alpha}{2}}\frac{s}{\sqrt{n}}\]

gdje je \(s\) standardna devijacija uzorka.

\(z\) i \(t\) su kvantili normalne, odnosno studentove t-distribucije za danu vjerojatnost \(α/2\) i \(n-1\) stupnjeva slobode.