Uvod u R

Deklaracija promenljive

Operator dodele u R-u je <- (ali može da se koristi i =)

x <- 9    
9 -> x

Numeričke vrednosti su podrazumevano tipa double (na primer 5/2 nije celobrojno deljenje već je jednako 2.5)

Elementarne funkcije: exp(), cos(), sin(), log(), …

Aritmetički operatori:+,-,*,/

Logički operatori: <=,>=, ==, !=, <,>, & , |, !

Vektori

U R-u postoji mnoštvo funkcija za rad sa vektorima tako da je poželjno podatke čuvati u vidu vektora (ili matrica).

Neki od načina zadavanja vektora:

vector1 <- c(1, 10, 49)
vector2 <- c("a", "b", "c")
vector3 <- c(TRUE, FALSE)

vec <- rep(0, 10)
vec <- rep(c(1, 2, 3), 3)

vec <- seq(1, 5)
vec <- seq(0, 1, 0.1)
vec <- seq(9, 1, -1)
vec <- seq(1, 5, length.out = 4)

vec <- 1:9

for petlja

vec <- numeric(10)

for (i in 1:10) 
{
vec[i] <- i ^ 2
}
vec
##  [1]   1   4   9  16  25  36  49  64  81 100

if/else

x <- 5
if (x %% 2 == 0) {
print("x je paran")
} else
print("x je neparan")
## [1] "x je neparan"

Može i u jednom redu:

ifelse(x %% 2 == 0, print("x je paran"), print("x je neparan"))
## [1] "x je neparan"
## [1] "x je neparan"

Operacije sa vektorima

a <- 1:5
b <- c(3, 4, 5, 6, 7)

Aritmetičke operacije

5*a
## [1]  5 10 15 20 25
a+b
## [1]  4  6  8 10 12
a-b
## [1] -2 -2 -2 -2 -2
a/b
## [1] 0.3333333 0.5000000 0.6000000 0.6666667 0.7142857

Logičke operacije

a == b
## [1] FALSE FALSE FALSE FALSE FALSE
a > b
## [1] FALSE FALSE FALSE FALSE FALSE
a <= 5
## [1] TRUE TRUE TRUE TRUE TRUE

Ako hoćemo da poredimo cela dva vektora:

all(a == b)
## [1] FALSE
all(a == a)
## [1] TRUE

Ako dva vektora nisu iste dužine, vrednosti kraćeg vektora se ponavljaju ciklično dok se ne pogode iste dimenzije sa dužim vektorom.

u<-c(10, 20, 30) 
v<-c(1, 2, 3, 4, 5, 6, 7, 8, 9) 
u + v 
## [1] 11 22 33 14 25 36 17 28 39

I funkcije u R-u su vektorske (primenjuje se na svaki član vektora).

cos(a)
## [1]  0.5403023 -0.4161468 -0.9899925 -0.6536436  0.2836622
log(a)
## [1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379

Vektori

Indeksiranje vektora počinje od jedinice!

v[3]  # element na 3. poziciji u vektoru v
## [1] 3

Možemo da izdvojimo i neke cele vektore.

v[c(1, 2)]
## [1] 1 2
v[c(3, 4, 5)]
## [1] 3 4 5
v[2:4]
## [1] 2 3 4
v[c(2, 1, 3)]
## [1] 2 1 3
v[v < 5]
## [1] 1 2 3 4
v[v != 8]
## [1] 1 2 3 4 5 6 7 9

Ako stavimo negativan predznak indeksu rezultat je originalni vektor umanjen za član na poziciji koja odgovara apsolutnoj vrednosti broja u zagradi.

v[-4]
## [1] 1 2 3 5 6 7 8 9
v[-c(5, 7)]
## [1] 1 2 3 4 6 8 9
v[-(1:3)]  # Napomena: ":" ima manji prioritet od aritmetičkih operacija 
## [1] 4 5 6 7 8 9

Novi vektor može se izdvojiti iz datog vektora uz pomoć vektora sa logičkim vrednostima koji je iste dužine kao originalni. Njegovi elementi su TRUE (ili T) ako odgovarajući element u originalnom vektoru treba da bude izdvojen, odnosno FALSE(ili F) u suprotnom.

s <- c("a", "b", "c", "d")
l <- c(T, F, T, F)
s[l]
## [1] "a" "c"

Možemo da dodelimo imena članovima vektora.

v <- c("Ivo", "Andric")
names(v) <- c("Ime", "Prezime")
v
##      Ime  Prezime 
##    "Ivo" "Andric"

Zatim možemo da pristupimo elementima po imenu.

v["Ime"]
##   Ime 
## "Ivo"

Neke funkcije nad vektorima…

vec <- rev(vec) # obrće redosled članova vektora
length(vec)
## [1] 10

i važne statistike

sum(vec)   # zbir 
## [1] 385
min(vec)   # x_(1)
## [1] 1
max(vec)   # x_(n)
## [1] 100
mean(vec)  # uzoračka srednja vrednost 
## [1] 38.5
var(vec)   # popravljena uzoračka disperzija
## [1] 1167.833
sd(vec)    # standardno odstupanje (sqrt(var(x)))
## [1] 34.17358

Sortiranje

sort(vec)
##  [1]   1   4   9  16  25  36  49  64  81 100
sort(vec, decreasing = TRUE)
##  [1] 100  81  64  49  36  25  16   9   4   1

Izmene u vektoru

vec[2] <- 0
vec[vec < 5] <- 1
vec <- vec[1:4]

Matrice

M <- matrix( 
    c(2, 4, 3, 1, 5, 7), 
    nrow=2,              
    ncol=3,              
    byrow = TRUE)   # popunjavamo matrice po redovima (po default-u je po kolonama)
M[2,3]      
## [1] 7
M[2,]       # drugi red
## [1] 1 5 7
M[,3]       # treća kolona 
## [1] 3 7
M[, c(1,2)] 
##      [,1] [,2]
## [1,]    2    4
## [2,]    1    5
rowSums(M) # zbir po vrstama
## [1]  9 13
rowMeans(M) # srednja vrednost po vrstama
## [1] 3.000000 4.333333
colSums(M) # zbir po kolonama
## [1]  3  9 10

Funkcije

Reč function je rezervisana za deklaraciju funkcije.
Izrazi u okviru vitičastih zagrada čine telo funkcije (zagrade su opcione ako telo sadrži samo jedan izraz).

pow <- function(x, y) {
  
  result <- x^y

  print(paste(x,"na stepen", y, "je", result))

  }

Ako želimo da funkcija vrati neki rezultat:

pow2 <- function(x, y) {
  
  result <- x^y
  
  result  #  return(result)
  
}

Pozivanje funkcije

pow(2,3)
## [1] "2 na stepen 3 je 8"
pow2(2,3)
## [1] 8

Ili..

pow(x = 2, y = 3)
## [1] "2 na stepen 3 je 8"
pow(y = 3, x = 2)  #nije bitan redosled argumenata u ovom slučaju
## [1] "2 na stepen 3 je 8"

Faktori

pol <- c(0,0,1,0,1)
fpol <- factor(pol,levels=0:1)
fpol
## [1] 0 0 1 0 1
## Levels: 0 1
levels(fpol) <- c("muski","zenski")# dodeljujemo znacenje levelima faktora
fpol
## [1] muski  muski  zenski muski  zenski
## Levels: muski zenski
levels(fpol)
## [1] "muski"  "zenski"
as.numeric(fpol) #prikazuje kako su leveli kodirani, uvek pocinje od 1 (1,2,..)
## [1] 1 1 2 1 2

Dataframe

Dataframe je najčešći način čuvanja podataka u R-u i vrlo je pogodan za rad i analizu. Služi za prikaz tabelarnih podataka, pa liči na matricu, s tim što je dataframe u osnovi lista koja sadrži vektore jednakih dužina (kolone), pri čemu ti vektori ne moraju biti istog tipa. Dakle možemo imati jednu kolonu koju čine brojevi, a drugu tekstualni podaci.

Dataframe se pravi na sledeći način:

df <- data.frame(kolona1 = c(1, 2, 3), kolona2 = c("prvi", "drugi", "treci"))
df
##   kolona1 kolona2
## 1       1    prvi
## 2       2   drugi
## 3       3   treci

Vrednostima kolona možemo pristupati pomoću operatora $.

df$kolona1
## [1] 1 2 3

Pomoću operatora $ možemo i dodavati nove kolone u dataframe.

df$kolona3 <- c(7,8,9)
df
##   kolona1 kolona2 kolona3
## 1       1    prvi       7
## 2       2   drugi       8
## 3       3   treci       9

Elegantniji način filtriranja i odabira podskupova dataframe-a je korišćenjem uglastih zagrada. Koristimo notaciju df[redovi, kolone], gde prvim argumentom određujemo koje redove želimo da uzmemo, a drugim koje kolone. Prazno mesto za neki od argumenata znači “uzmi sve”.

df[1,] # prva vrsta
##   kolona1 kolona2 kolona3
## 1       1    prvi       7
df[,1] # prva kolona
## [1] 1 2 3

Redovi mogu biti ili vektori brojeva koji označavaju indekse redova koje da uzmemo, ili vektori TRUE/FALSE vrednosti iste dužine kao broj vrsta u dataframe-u, pri čemu se tada biraju redovi na pozicijama gde je u vektoru vrednost TRUE.

df[c(1,3), ] # sve kolone, redovi 1,3
##   kolona1 kolona2 kolona3
## 1       1    prvi       7
## 3       3   treci       9

Kolone mogu biti ili vektori brojeva koji označavaju koje kolone da uzmemo prema indeksu, ili vektori stringova, koji označavaju imena kolona koje da uzmemo.

df[, c(1,3)] # sve vrste, 1. i 3. kolona
##   kolona1 kolona3
## 1       1       7
## 2       2       8
## 3       3       9
df[, c("kolona1", "kolona3")] # isto
##   kolona1 kolona3
## 1       1       7
## 2       2       8
## 3       3       9
df[c(1,3), c("kolona1", "kolona3")] # prvi i treci red, prva i treca kolona
##   kolona1 kolona3
## 1       1       7
## 3       3       9

Korisna stvar je da ako koristimo vektore brojeva za indeksiranje, ukoliko stavimo znak - ispred, to znači da izuzimamo te redove/kolone.

df[, -1] # sve bez prve kolone
##   kolona2 kolona3
## 1    prvi       7
## 2   drugi       8
## 3   treci       9
df[-2, ] # sve bez druge vrste
##   kolona1 kolona2 kolona3
## 1       1    prvi       7
## 3       3   treci       9
df[-c(1,2), c("kolona2", "kolona3")] # druga i treca kolona, bez prve i druge vrste
##   kolona2 kolona3
## 3   treci       9

Učitavanje eksternih podataka

kredit <- read.csv("credit_data.csv")
kredit[1:10,] # ispisujemo prvih 10 redova
##    clientid   income      age      loan default
## 1         1 66155.93 59.01702 8106.5321       0
## 2         2 34415.15 48.11715 6564.7450       0
## 3         3 57317.17 63.10805 8020.9533       0
## 4         4 42709.53 45.75197 6103.6423       0
## 5         5 66952.69 18.58434 8770.0992       1
## 6         6 24904.06 57.47161   15.4986       0
## 7         7 48430.36 26.80913 5722.5820       0
## 8         8 24500.14 32.89755 2971.0033       1
## 9         9 40654.89 55.49685 4755.8253       0
## 10       10 25075.87 39.77638 1409.2304       0

Paketi

U R-u se nalazi veliki broj paketa sa korisnim funkcijama koje olakšavaju različite statističke procedure, ali i sadrže neke baze podataka koje nam mogu služiti za izučavanje tih procedure.

# primer kako pristupamo paketu
#install.packages("ISLR")
library(ISLR)
## Warning: package 'ISLR' was built under R version 4.0.5
Smarket[1:10,] # primer baze iz ovog paketa
##    Year   Lag1   Lag2   Lag3   Lag4   Lag5 Volume  Today Direction
## 1  2001  0.381 -0.192 -2.624 -1.055  5.010 1.1913  0.959        Up
## 2  2001  0.959  0.381 -0.192 -2.624 -1.055 1.2965  1.032        Up
## 3  2001  1.032  0.959  0.381 -0.192 -2.624 1.4112 -0.623      Down
## 4  2001 -0.623  1.032  0.959  0.381 -0.192 1.2760  0.614        Up
## 5  2001  0.614 -0.623  1.032  0.959  0.381 1.2057  0.213        Up
## 6  2001  0.213  0.614 -0.623  1.032  0.959 1.3491  1.392        Up
## 7  2001  1.392  0.213  0.614 -0.623  1.032 1.4450 -0.403      Down
## 8  2001 -0.403  1.392  0.213  0.614 -0.623 1.4078  0.027        Up
## 9  2001  0.027 -0.403  1.392  0.213  0.614 1.1640  1.303        Up
## 10 2001  1.303  0.027 -0.403  1.392  0.213 1.2326  0.287        Up

Grafički prikaz podataka

Grafičke mogućnosti su važna i izuzetno raznovrsna komponenta okruženja programskog jezika R. Obezbeđene su funkcije za generisanje različitih statističkih grafika podataka, kao i okruženje za modifikovanje detalja na graficima.

Funkcija plot()

Ako su x i y vektori, plot(x, y) za rezultat ima tačkasti grafik (scatterplot) y-а u zavisnosti od x-а.

plot(cbind(trees$Girth, trees$Height), xlab="Obim", ylab="Visina")

Pie chart

share = c(.2090,.1980,.1210,.0930,.3780)
names(share)<-("brand"=c("Samsung","Apple","Huawei","Xiaomi","Other"))
share
## Samsung   Apple  Huawei  Xiaomi   Other 
##   0.209   0.198   0.121   0.093   0.378
pie(share, main="")

#install.packages("plotrix") (instaliranje biblioteke)
library(plotrix)
pie3D(share, explode = 0.2, main = "3D pitica", labels= names(share), labelcex = 1)

Bar chart

Bar plotovi nam služe za grafički prikaz kategoričkih promenljivih. Na njima se prikazuje koliko postoji podataka u bazi iz odgovarajuće kategorije.

#install.packages("ggplot2")
#install.packages("gapminder")
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.0.5
library(gapminder)
## Warning: package 'gapminder' was built under R version 4.0.5
# napravimo kratak spisak drzava koj cemo gledati
countries <- c("Bosnia and Herzegovina", "Croatia", "Montenegro", "Serbia", "Slovenia")
gapminder2007 <- gapminder[gapminder$year == 2007, ]
gapminder_small <- gapminder2007[gapminder2007$country %in% countries, ]

ggplot(gapminder_small, aes(x = country, y = pop)) +
  geom_col(fill = "coral", color = "pink")

Tabelarni prikaz

#The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

#Usage
#mtcars
#Format
#A data frame with 32 observations on 11 (numeric) variables.

#[, 1]  mpg Miles/(US) gallon
#[, 2]  cyl Number of cylinders
#[, 3]  disp    Displacement (cu.in.)
#[, 4]  hp  Gross horsepower
#[, 5]  drat    Rear axle ratio
#[, 6]  wt  Weight (1000 lbs)
#[, 7]  qsec    1/4 mile time
#[, 8]  vs  Engine (0 = V-shaped, 1 = straight)
#[, 9]  am  Transmission (0 = automatic, 1 = manual)
#[,10]  gear    Number of forward gears
#[,11]  carb    Number of carburetors

mtcars
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
mtcars$cyl <- as.factor(mtcars$cyl)
mtcars$vs <- as.factor(mtcars$vs)
mtcars$am <- as.factor(mtcars$am)
mtcars$gear <- as.factor(mtcars$gear)
mtcars$carb <- as.factor(mtcars$carb)

table(mtcars$carb)
## 
##  1  2  3  4  6  8 
##  7 10  3 10  1  1
table(mtcars$am)
## 
##  0  1 
## 19 13
table(mtcars$am, mtcars$cyl)
##    
##      4  6  8
##   0  3  4 12
##   1  8  3  2
table(mtcars$carb, mtcars$cyl)
##    
##     4 6 8
##   1 5 2 0
##   2 6 0 4
##   3 0 0 3
##   4 0 4 6
##   6 0 1 0
##   8 0 0 1

Deskriptivne statistike

Statistike poretka

\[X_{(1)} \leq X_{(2)} \dots \leq X_{(n)} \] \[ X_{(1)}=min(X_1,..., X_n)\] \[X_{(n)}=max(X_1,..., X_n).\] Uzorački raspon

\[ R=X_{(n)}-X_{(1)}\] Uzoračka sredina

\[ \overline{X}_n=\frac{1}{n}\sum\limits_{i=1}^{n}X_i \] Uzoračka disperzija

\[\overline{S}_n^2=\frac{1}{n}\sum\limits_{i=1}^{n}(X_i-\overline{X}_n)^2 \] Popravljena uzoračka disperzija

\[\widetilde{S}_n^2=\frac{1}{n-1}\sum\limits_{i=1}^{n}(X_i-\overline{X}_n)^2 \]

Medijana

\[ \widehat{m}_e=\begin{cases} X_{(k+1)}& n=2k+1, \\ \frac{X_{(k)}+X_{(k+1)}}{2} & n=2k. \end{cases} \]

Histogram

Histogram je grafička reprezentacija raspodele niza datih numeričkih podataka. Koristi se za ocenu funkcije gustine raspodele.

Histogram se može dobiti na sledeći način:

  • Dobijeni podaci se sortiraju.
  • Odabere se dužina podeoka d.
  • Podeli se ceo interval (raspon podataka) na podintervale duzine \(d\).
  • Na x-osi se označe ti dobijeni intervali, a odgovarajuća vrednost na y-osi je broj elemenata iz uzorka koji su upali u taj interval.

U R-u postoji ugradjena funkcija “hist()”. Dva važna argumenta funkcije su: -x- vektor čiji histogram želimo da prikažemo -breaks - tu predajemo vektor sa krajevima svakog podintervala.

Kad pravimo histogram prvo treba da odaberemo koliko ćemo kategorija (odnosno tih podintervala) da imamo. Taj broj dobijamo po formuli: \[ k=[\log_2(N)]+1 \]

  • \(k\)-broj kategorija
  • \(N\)-obim uzorka (veličina tog vektora)

Odavde možemo naći širinu svakog intervala po formuli \[ d=\frac{R}{k} \]

gdje je R- raspon uzorka (razlika najvećeg i najmanjeg elementa uzorka)

Zadaci

  1. Tvrdi se da je prosečna minimalna cena bezolovnog benzina u Americi bila 1.35$. U reklamne svrhe kompanija želi da pokaže kako je njihova cena niža. Da bi potkrepili svoju tvrdnju, statističari iz firme su sakupili sledeće podatke na osnovu slučajnog uzorka:
cene<-c(1.22, 1.37, 1.27, 1.20, 1.42, 1.41, 1.22, 1.24,
  1.28, 1.42, 1.48, 1.32, 1.40, 1.26, 1.39, 1.45,
  1.44, 1.49, 1.47, 1.47, 1.24, 1.34, 1.27, 1.35,
  1.34, 1.45, 1.49, 1.45, 1.23, 1.20, 1.42, 1.34,
  1.43, 1.21, 1.49, 1.36, 1.24, 1.20, 1.45,
  1.23, 1.25, 1.24, 1.35, 1.23, 1.39, 1.38,
  1.46, 1.48, 1.26, 1.36, 1.22, 1.46, 1.39,
  1.22, 1.29, 1.47, 1.24, 1.35, 1.21, 1.21)

Napisati program u R-u koji računa uzoračku sredinu i medijanu, i iscrtava histogram nad zadatim podacima.

mean(cene)
## [1] 1.340167
median(cene)
## [1] 1.35
# Napomena: Naći ove statistike bez korišćenja ugrađenih funkcija
# Pravimo histogram:
n <- length(cene)
k <- floor(log(n, base = 2)) + 1
d <- (max(cene)-min(cene)) / k  # ili diff(range(cene))
k
## [1] 6
d
## [1] 0.04833333
# Sortiramo vektor:

cene <- sort(cene)

# Pravimo podelu na intervale:

podela <- cene[1] + 0:k * d
podela
## [1] 1.200000 1.248333 1.296667 1.345000 1.393333 1.441667 1.490000
hist(cene, breaks = podela, main = "")

# Hoćemo da uporedimo histogram koji se dobija ako ne zadamo sami podele:

par(mfrow = c(1, 2))
hist(cene, breaks = podela, main = "")
hist(cene, main = "")

  1. Prilikom proučavanja rasta dece, posmatra se obim glave deteta pri rođenju izraženo u cm. Dobijeni su sledeći podaci:
obim<-c(33.1, 33.7, 33.7, 33.8, 33.4,
  33.9, 33.6, 33.4, 34.1, 34.2,
  34.5, 34.2, 34.6, 34.9, 34.8,
  34.0, 34.5, 34.2, 34.2, 34.7,
  34.7, 34.6, 34.3, 34.3, 34.2,
  35.1, 36.0, 35.8, 35.2, 35.6,
  36.1, 35.1, 35.3, 35.2)

Napisati program u R-u koji iscrtava histogram nad zadatim podacima.

n <- length(obim)
k <- floor(log(n, 2)) + 1
d <- diff(range(obim)) / k
podela <- sort(obim)[1] + 0:k * d
hist(obim, breaks = podela, main = "")

  1. Dati su sledeći rezultati ispita. Nacrtati histogram datih podataka i izračunati vrednosti
rezultati<-c(28, 27, 26, 25, 24, 23, 21, 21, 20, 19, 19, 18, 18, 18, 17, 17, 17, 17,
  16, 16, 16, 15.5, 15, 15, 15, 15, 14, 13, 13, 13, 13, 12, 12, 11, 11, 
  11, 11, 11, 10, 10, 10, 9, 9, 8, 7, 6, 5, 4, 0, 0, 25, 23, 21, 21, 21, 
  21, 20, 19.5, 19, 19, 18, 18, 17, 17, 17, 17, 16, 15, 15, 15, 14, 14, 
  14, 13.5, 13, 13, 12, 12, 10, 10, 9, 9, 9, 9, 8,  7, 7, 7, 7, 5, 5, 5, 
  5, 4, 3, 2)
k <- floor(log(length(rezultati) , 2)) + 1
d <- diff(range(rezultati)) / k
podela <- sort(rezultati)[1] + 0:k * d
hist(rezultati, breaks = podela, main = "Rezultati")

# Na osnovu oblika histograma mozemo pretpostaviti da ovi rezultati imaju normalnu raspodelu.
# Podsetimo se iz prvog semestra da mozemo skalirati podatke da dobijemo histogram gustine, koji ima zbir povrsina pravougaonika 1. Na taj histogram mozemo dodati krivu gustine normalne raspodele simetricnu u odnosu na srednju vrednost ovog uzorka. (U nastavku kursa detaljnije cemo se baviti ocenjivanjem nepoznatih parametara.)

hist(rezultati, breaks = podela, main = "Rezultati", probability = TRUE, ylim = c(0,0.07))
curve(dnorm(x,mean = mean(rezultati), sd= sd(rezultati)),lwd =2, col ='coral1', add = T)

# Uzoracka sredina
mean(rezultati)
## [1] 13.77604
# Popravljena uzoracka disperzija 
var(rezultati)
## [1] 38.12563
# Standardno odstupanje
sd(rezultati)
## [1] 6.174596
# Medijana
median(rezultati)
## [1] 14
# Kvantili
quantile(rezultati)
##   0%  25%  50%  75% 100% 
##    0    9   14   18   28
# pokazuje koje vrednosti statistika poretka imamo na 0%, 25%, 50% (medijana)
# 75% i 100%.

Zadaci za rad na času

  1. Učitati bazu Default iz paketa ISLR.
  1. Tabelarno prikazati faktorske promenljive default i student.
  2. Izdvojiti promenljivu balance koja prikazuje prosečan iznos koji korisniku ostaje na kreditnoj kartici nakon uplate i izračunati vrednosti dekriptivnih statistika.
  3. Izdvojiti promenljivu income i nacrtati njen histogram. Sta možemo zaključiti o raspodeli podataka? Izračunati uzoračku srednju vrednost ove promenljive i njenu medijanu. Interpretirati dobijene rezultate.