Статистички софтвер 1: Вероватноћа и статистика у R-у

Стефан Малбашић, Математички факултет, Универзитет у Београду

Функција sample()

У најједноставнијем облику функција sample пермутује задати низ на случајан начин.

x <- 1:10
sample(x)
##  [1]  1  7  5  2 10  6  4  8  9  3
sample(10)
##  [1]  2  8  3  7  9 10  1  6  5  4

Ова функција има аргумент replace који може узимати вредности FALSE или TRUE. Подразумевано, ако није другачије наведено, узима вредност FALSE, што значи да се симулира случајно бирање бројева без понављања. Ако проследимо вредност TRUE функција враћа случајан узорак са понављањем.

Још један аргумент је prob (односно probability) и он је подразумевано NULL, али можемо и да задамо неке тежине (вероватноће) елементима скупа.

Аргумент size одређује колико елемената бирамо из прослеђеног вектора.

НАПОМЕНА: Може доћи до забуне приликом следећих израза. Зашто?

sample(x[x > 8])
## [1]  9 10
sample(x[x > 9])
##  [1]  8  7  3  2  4  9  6  5  1 10
  • Симулирајмо бацање новчића
coin <- c("Heads", "Tails")
sample(coin, size = 1)
## [1] "Tails"

Желимо 100 симулација овог случајног експеримента.

# sample(coin, size = 100) 

Зашто јавља грешку?

sample(coin, size = 100, replace = TRUE)
##   [1] "Heads" "Heads" "Tails" "Heads" "Heads" "Tails" "Heads" "Heads" "Tails"
##  [10] "Tails" "Heads" "Tails" "Tails" "Tails" "Tails" "Heads" "Tails" "Heads"
##  [19] "Heads" "Heads" "Heads" "Heads" "Tails" "Tails" "Heads" "Tails" "Heads"
##  [28] "Heads" "Heads" "Heads" "Tails" "Heads" "Tails" "Heads" "Heads" "Heads"
##  [37] "Tails" "Heads" "Tails" "Tails" "Heads" "Heads" "Tails" "Tails" "Heads"
##  [46] "Heads" "Heads" "Tails" "Tails" "Heads" "Heads" "Tails" "Tails" "Heads"
##  [55] "Heads" "Tails" "Heads" "Heads" "Heads" "Heads" "Tails" "Heads" "Tails"
##  [64] "Heads" "Tails" "Heads" "Heads" "Tails" "Tails" "Tails" "Tails" "Tails"
##  [73] "Tails" "Tails" "Tails" "Heads" "Tails" "Tails" "Heads" "Heads" "Heads"
##  [82] "Tails" "Tails" "Tails" "Heads" "Tails" "Heads" "Tails" "Heads" "Tails"
##  [91] "Heads" "Heads" "Tails" "Heads" "Heads" "Heads" "Heads" "Tails" "Tails"
## [100] "Tails"

Приказ резултата експеримента

(tab <- table(sample(coin, size = 1000, replace = TRUE)))
## 
## Heads Tails 
##   497   503
barplot(prop.table(tab), col = c(4, 3), main = "Random sampling")

  • Симулација бацања фаличног новчића
sample(coin, size = 100, replace = TRUE, prob = c(1/3,2/3))
##   [1] "Tails" "Tails" "Tails" "Tails" "Tails" "Tails" "Heads" "Tails" "Tails"
##  [10] "Tails" "Tails" "Tails" "Tails" "Tails" "Tails" "Tails" "Tails" "Heads"
##  [19] "Heads" "Tails" "Tails" "Tails" "Tails" "Tails" "Tails" "Tails" "Tails"
##  [28] "Tails" "Heads" "Tails" "Tails" "Heads" "Tails" "Tails" "Heads" "Tails"
##  [37] "Heads" "Tails" "Heads" "Tails" "Tails" "Tails" "Heads" "Tails" "Tails"
##  [46] "Tails" "Tails" "Tails" "Heads" "Tails" "Heads" "Tails" "Tails" "Tails"
##  [55] "Heads" "Tails" "Tails" "Tails" "Heads" "Tails" "Tails" "Tails" "Heads"
##  [64] "Heads" "Tails" "Tails" "Tails" "Tails" "Tails" "Heads" "Tails" "Heads"
##  [73] "Heads" "Tails" "Tails" "Tails" "Tails" "Tails" "Tails" "Tails" "Tails"
##  [82] "Tails" "Tails" "Tails" "Tails" "Tails" "Heads" "Heads" "Tails" "Tails"
##  [91] "Tails" "Tails" "Tails" "Tails" "Heads" "Tails" "Tails" "Tails" "Tails"
## [100] "Heads"
(tab2 <- table(sample(coin, size = 100, replace = TRUE, prob = c(1/3,2/3))))
## 
## Heads Tails 
##    32    68
barplot(prop.table(tab2), col = c(4, 3), main = "Weighted sampling")

Уочава се разлика у фреквенцијама.

Приметимо да ће пропорције елемената излазног резултата конвергирати ка спецификованим вероватноћама како се величина узорка повећава.

# Sample sizes
s <- seq(5, 10000, 5)

# Empty data frame
df <- data.frame("A" = NA, "B" = NA)

# Calculate samples for different sample sizes
set.seed(2)
for(i in 1:length(s)) {
  
  a <- sample(c("A", "B"), size = i, replace = TRUE, prob = c(0.2, 0.8))
  
  df[i, ] <- prop.table(table(a))
  
}

# Line chart
plot(s, df$A, type = "l", xlab = "Sample size", ylab = "%")
lines(s, df$B, type = "l", col = 4)
abline(h = 0.8, lty = 2, col = "red")
abline(h = 0.2, lty = 2, col = "red")

Функцију sample() можемо применити и на базе података како бисмо генерисали случајни узорак из базе.

set.seed(21)
df <- data.frame(x = 1:10, y = rnorm(10))
df[sample(1:nrow(df), size = 5), ]
##     x            y
## 10 10 -0.002393336
## 1   1  0.793013171
## 2   2  0.522251264
## 7   7 -1.570199630
## 8   8 -0.934905667

Функција runif()

функција runif генерише случајан број из интервала \((0,1)\) по закону униформне расподеле. Ова функција може да се користи за генерисање случајности.

r <- runif(1000, 0, 1)
length(r[r < 0.5]) / 1000
## [1] 0.468
length(r[r > 2 / 3]) / 1000
## [1] 0.351
par(mfrow = c(1, 3))

x <- seq(-0.5, 1.5, 0.01)

set.seed(1)

# n = 10
hist(runif(10), main = "n = 100", xlim = c(-0.2, 1.25),
     xlab = "", prob = TRUE)
lines(x, dunif(x), col = "red", lwd = 2)

# n = 1000
hist(runif(1000), main = "n = 10000", xlim = c(-0.2, 1.25),
     xlab = "", prob = TRUE)
lines(x, dunif(x), col = "red", lwd = 2)

# n = 100000
hist(runif(100000), main = "n = 1000000", xlim = c(-0.2, 1.25),
     xlab = "", prob = TRUE)
lines(x, dunif(x), col = "red", lwd = 2)

par(mfrow = c(1, 1))

Задатак 1

Симулирати бацање регуларне коцкице за игру. Израчунати фреквенцију појављивања 6 у 1000 бацања.

sample(6, 1, prob = rep(1/6,6))
## [1] 2
s <- sample(6, 1000, prob = rep(1/6,6), replace = TRUE)
mean(s==6)
## [1] 0.18

Задатак 2

Коцкица за игру је таква да је вероватноћа падања неког броја пропорционална броју тачкица на тој страни. Одредити вероватноћу да падне паран број.

s <- sample(1:6, 10000, replace = TRUE, prob = 1:6/sum(1:6))
mean(s%%2 == 0)
## [1] 0.5701

Задатак 3

Дат је фаличан новчић, где је вероватноћа да падне глава једнака \(p>0.5\). Осмислити фер игру са два играча, тј. игру у којој је једнако вероватно да победи сваки од играча.

  • Како дефинисати исходе тако да игра буде фер?

Новчић се баца два пута и кажемо да је победио играч 1 ако се догодио исход писмо-глава, а победио је играч 2 ако се догодио исход глава-писмо.

На овај начин су вероватноће победе оба играча једнаке. Проверимо овај резултат експериментално.

igra <- function(p) {
  novcic <- sample(c("G","P"), 2, replace = TRUE, prob = c(p, 1 - p))
  if (novcic[1] == "G" & novcic[2] == "P")
    return (1)
  else if (novcic[1] == "P" & novcic[2] == "G")
    return (2)
  else
    return (0)
}

Проверимо однос победа играча 1, односо играча 2 у 10000 одиграних партија.

Нека је, на пример, \(p=0.1, 1-p=0.9\).

r <- replicate(10000, igra(0.1))
sum(r == 1) / sum(r == 2)
## [1] 1.043529

Однос партија је приближно исти, близак 1, што значи да смо направили фер игру.

Задатак 4

Играч има почетни капитал \(X\) хиљада динара и он баца коцкицу. Ако добије 1, 3 или 5, његов капитал се увећа за 1000 динара, а у супротном он губи 1000 динара. Нацртати трајекторију његовог капитала након \(N\) бацања новчића (дозвољено је да играч иде у минус).

trajektorija <- function(X, N) {
  a <- numeric(N)
  s <- sample(6, N, replace = TRUE)
  a[1] <- X
  for (i in 1:N) # ifelse(test, yes, no)
    ifelse(s[i] %% 2 == 1, a[i + 1] <- a[i] + 1, a[i + 1] <- a[i] - 1)
  return(a)
}

Цратамо трајекторију за 20 бацања коцкице и почетни капитал од \(X=5\) хиљада динара.

plot(trajektorija(5,20), type="o", col="blue")

  • Други начин: Ако желимо да избегнемо петљу.

Кумулативна сума вектора \(x=(x_1,x_2,...,x_n)\) је вектор \(x=(x_1,x_1+x_2, ... , x_1+x_2+...+x_n)\).

trajektorija2 <- function(X, N) {
  s <- sample(6, N, replace = T)
  i <- ifelse(s %% 2 == 1, 1,-1)
  trajektorija <- cumsum(i) + X
  return(trajektorija)
}
plot(trajektorija2(5, 20), type = "o", col = "red")

Приметимо да је други начин ефикаснији.

system.time(trajektorija(1, 10000))
##    user  system elapsed 
##    0.00    0.00    0.02
system.time(trajektorija2(1,10000))
##    user  system elapsed 
##       0       0       0
  • Оценити вероватнићу да играч након \(N\) партија има бар једну хиљаду.
plus <- function(X, N) {
  a <- trajektorija2(X, N)
  ifelse(a[N] > 0, return(1), return(0))
}

frekv <- function(X, N, broj.sim = 1000) {
  simulacije <- replicate(broj.sim, plus(X, N))
  f <- mean(simulacije)
  return(f)
}

frekv(5, 20)
## [1] 0.885
frekv(5, 100)
## [1] 0.702
frekv(100, 1000)
## [1] 0.997

Вероватноћа и статистика

Постоје уграђене функције за функцију расподеле, густину расподеле, функције квантила и генерисање случајних бројева из дате расподеле.

Називи расподела су: unif, norm, pois,beta, gamma, binom, geom, cauchy, chisq, t, exp

Одређени префикси се додају на име расподеле у зависности од тога шта желимо да израчунамо:

  • p функција расподеле,
  • d густина расподеле (код дискретних ово је баш вероватноћа за неку вредност),
  • q квантили тј. инверз функције расподеле (за вероватноћу \(p\) враћа \(q\) тако да је \(p=P\{X\leq q\}\)),
  • r генерисање случајних величина из неке расподеле.

На пример за нормалну расподелу имамо: pnorm, dnorm, qnorm, rnorm.

Детаљније погледати на

# help("distribution")

Расподеле

Биномна расподела \(B(n,p)\)

За рачунање појединачних вероватноћа: dbinom(x,size,prob,log=FALSE).

dbinom(0,size=10,prob=0.5)
## [1] 0.0009765625
dbinom(6,size=10,prob=0.5)
## [1] 0.2050781

Функција расподеле: pbinom(q,size,prob,lower.tail=T,log.p=F)

  • lower.tail подразумева да тражимо \(P\{X\le q\}\), да смо ставили FALSE, рачунала би се вероватноћа \(P\{X>q\}\).

  • log.p=T значило би да враћа \(log(p)\) уместо \(p\)

pbinom(8,size=10,prob=0.3)
## [1] 0.9998563

Функција квантила: qbinom(p,size,prob,lower.tail=T,log.p=F), где је \(q\), такво да је \(P\{X\le q\}=p\)

qbinom(0.99,size=10,prob=0.5)
## [1] 9

Узорак из биномне расподеле: rbinom(n,size,prob), где је \(n\) обим узорка.

rbinom(20,10,0.5)
##  [1]  6  5  4  4  5  5  7  7  7  4  6  7  3 10  8  5  4  4  4  6

График

x<-0:50
plot(x,dbinom(x,size=50,prob=0.4))

plot(x,dbinom(x,size=50,prob=0.4),type="h",
     main="Binomna raspodela B(50, 0.4)",
     xlab="k",ylab="binomne verovatnoce")

Биномни коефицијенти

choose(4,2)
## [1] 6

Норамлна расподела \(N(m,\sigma^2)\)

Густина: dnorm(x,mean=0,sd=1,log=F)

dnorm(3, mean=2, sd=4)
## [1] 0.09666703

Функција расподеле: pnorm(z,mean=0,sd=1,lower.tail=T,log.p=F)

pnorm(0)
## [1] 0.5
pnorm(3, mean=4,lower.tail=F)
## [1] 0.8413447
pnorm(3, mean=4,lower.tail=F, log.p=T)
## [1] -0.1727538

График густине

x<-seq(-5,5,0.01)
plot(x, dnorm(x), type="l")

# Drugi nacin
curve(dnorm(x), from=-5, to=5)

График функције расподеле

plot(x,pnorm(x),type="l")

Квантили: qnorm(p,mean=0,sd=1)

qnorm(0.9)
## [1] 1.281552
qnorm(pnorm(2)) # Vraca bas 2, ovo su inverzne f-je 
## [1] 2

Узорак случајних бројева из \(N(m,\sigma^2)\) расподеле: rnorm(size,mean=0,sd=1).

rnorm(20) # iz N(0,1)
##  [1] -0.20428018  1.39107713  1.70029311 -0.07604553  0.81131304  1.30562172
##  [7]  1.80587820  0.62909950  0.88533237 -0.87235029  1.17319816 -0.97378634
## [13] -0.25970836 -0.63711832 -0.97758973 -0.04995378 -0.77379796 -0.41055622
## [19]  0.14651576  2.33133382

Униформна расподела \(U[a,b]\)

Густина: dunif(x,min=а,max=b,log.p=F)

dunif(2)
## [1] 0
dunif(2, min=3, max=5)
## [1] 0

Функција расподеле: punif(q,min=0,max=1,lower.tail=TRUE,log.p=FALSE)

punif(1, min=0, max=3)
## [1] 0.3333333

Квантили: qunif(p,min=0,max=1,lower.tail=TRUE,log.p=FALSE)

qunif(0.5)
## [1] 0.5
runif(10) # iz U[0,1]
##  [1] 0.8868179 0.4545848 0.9787161 0.7172032 0.2042732 0.6392743 0.7238098
##  [8] 0.6477223 0.9733470 0.1005190

Експоненцијална расподела \(E(\lambda)\)

Густина: dexp(x,rate=lambda,log=F)

Функција расподеле: pexp(q,rate=lambda,lower.tail=T,log.p=F)

Квантили: qexp(p,rate=lambda,lower.tail=T,log.p=F)

Случајни елемент: rexp(n, rate = lambda)

dexp(2,rate=2)
## [1] 0.03663128
pexp(qexp(0.4))
## [1] 0.4
x<-seq(0,25,0.01)
y<-dexp(x,rate=3)
plot(x,y,main="gustina eksp(3) raspodele",ylab="f(x)",type="l")

Студентова расподела

dchisq(x, df, ncp = 0, log = FALSE)

pchisq(q, df, ncp = 0, lower.tail = TRUE, log.p = FALSE)

qchisq(p, df, ncp = 0, lower.tail = TRUE, log.p = FALSE)

rchisq(n, df, ncp = 0)

dt(3,df=3)
## [1] 0.02297204
rt(25,df=6)
##  [1]  0.964019171  1.384295423  1.267464526  0.213464781 -0.357490357
##  [6] -0.029314131 -0.270218733 -0.495535392  0.233577573 -3.914266440
## [11] -1.034876423 -0.599298699 -0.386716753  0.050552822 -0.007423243
## [16] -2.441541210 -2.879030392  1.364226055 -1.566852761 -0.302965802
## [21] -1.000280449 -1.338054597  0.374335064 -0.850788579  0.385057525

Хи-квадрат расподела

dchisq(x, df, ncp = 0, log = FALSE)

pchisq(q, df, ncp = 0, lower.tail = TRUE, log.p = FALSE)

qchisq(p, df, ncp = 0, lower.tail = TRUE, log.p = FALSE)

rchisq(n, df, ncp = 0)

Фишерова расподела

df(x, df1, df2, ncp, log = FALSE)

pf(q, df1, df2, ncp, lower.tail = TRUE, log.p = FALSE)

qf(p, df1, df2, ncp, lower.tail = TRUE, log.p = FALSE)

rf(n, df1, df2, ncp)

x<-seq(0,100,0.01)
curve(df(x,12,10),from=0,to=100) 

Пакет PASWR - Probability and Statistics with R

# install.packages("PASWR")
library(PASWR)

Неке функције у овом пакету везане су за вероватноћу. На пример, функција bino.gen(samples,n,pi) за симулацију биномне расподеле.

bino.gen(10,20,0.4) # crta i teoretsku preko uzoracke raspodele

## $simulated.distribution
## Successes
##   6   9  10  11  12  14  15 
## 0.1 0.2 0.1 0.1 0.1 0.3 0.1 
## 
## $theoretical.distribution
##     0     1     2     3     4     5     6     7     8     9    10    11    12 
## 0.000 0.000 0.000 0.000 0.000 0.001 0.005 0.015 0.035 0.071 0.117 0.160 0.180 
##    13    14    15    16    17    18    19    20 
## 0.166 0.124 0.075 0.035 0.012 0.003 0.000 0.000

Функција Combinations(n,k) исписује све могуће комбинације.

Combinations(6,2)
##   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
##      1    1    2    1    2    3    1    2    3     4     1     2     3     4
## N    2    3    3    4    4    4    5    5    5     5     6     6     6     6
##   [,15]
##       5
## N     6

Функција SRS(Values, n) враћа све могуће узорке из популације Values обима n.

SRS(1:10,5) # uzorak sa razlicitim elementima
##        [,1] [,2] [,3] [,4] [,5]
##   [1,]    1    2    3    4    5
##   [2,]    1    2    3    4    6
##   [3,]    1    2    3    4    7
##   [4,]    1    2    3    4    8
##   [5,]    1    2    3    4    9
##   [6,]    1    2    3    4   10
##   [7,]    1    2    3    5    6
##   [8,]    1    2    3    5    7
##   [9,]    1    2    3    5    8
##  [10,]    1    2    3    5    9
##  [11,]    1    2    3    5   10
##  [12,]    1    2    3    6    7
##  [13,]    1    2    3    6    8
##  [14,]    1    2    3    6    9
##  [15,]    1    2    3    6   10
##  [16,]    1    2    3    7    8
##  [17,]    1    2    3    7    9
##  [18,]    1    2    3    7   10
##  [19,]    1    2    3    8    9
##  [20,]    1    2    3    8   10
##  [21,]    1    2    3    9   10
##  [22,]    1    2    4    5    6
##  [23,]    1    2    4    5    7
##  [24,]    1    2    4    5    8
##  [25,]    1    2    4    5    9
##  [26,]    1    2    4    5   10
##  [27,]    1    2    4    6    7
##  [28,]    1    2    4    6    8
##  [29,]    1    2    4    6    9
##  [30,]    1    2    4    6   10
##  [31,]    1    2    4    7    8
##  [32,]    1    2    4    7    9
##  [33,]    1    2    4    7   10
##  [34,]    1    2    4    8    9
##  [35,]    1    2    4    8   10
##  [36,]    1    2    4    9   10
##  [37,]    1    2    5    6    7
##  [38,]    1    2    5    6    8
##  [39,]    1    2    5    6    9
##  [40,]    1    2    5    6   10
##  [41,]    1    2    5    7    8
##  [42,]    1    2    5    7    9
##  [43,]    1    2    5    7   10
##  [44,]    1    2    5    8    9
##  [45,]    1    2    5    8   10
##  [46,]    1    2    5    9   10
##  [47,]    1    2    6    7    8
##  [48,]    1    2    6    7    9
##  [49,]    1    2    6    7   10
##  [50,]    1    2    6    8    9
##  [51,]    1    2    6    8   10
##  [52,]    1    2    6    9   10
##  [53,]    1    2    7    8    9
##  [54,]    1    2    7    8   10
##  [55,]    1    2    7    9   10
##  [56,]    1    2    8    9   10
##  [57,]    1    3    4    5    6
##  [58,]    1    3    4    5    7
##  [59,]    1    3    4    5    8
##  [60,]    1    3    4    5    9
##  [61,]    1    3    4    5   10
##  [62,]    1    3    4    6    7
##  [63,]    1    3    4    6    8
##  [64,]    1    3    4    6    9
##  [65,]    1    3    4    6   10
##  [66,]    1    3    4    7    8
##  [67,]    1    3    4    7    9
##  [68,]    1    3    4    7   10
##  [69,]    1    3    4    8    9
##  [70,]    1    3    4    8   10
##  [71,]    1    3    4    9   10
##  [72,]    1    3    5    6    7
##  [73,]    1    3    5    6    8
##  [74,]    1    3    5    6    9
##  [75,]    1    3    5    6   10
##  [76,]    1    3    5    7    8
##  [77,]    1    3    5    7    9
##  [78,]    1    3    5    7   10
##  [79,]    1    3    5    8    9
##  [80,]    1    3    5    8   10
##  [81,]    1    3    5    9   10
##  [82,]    1    3    6    7    8
##  [83,]    1    3    6    7    9
##  [84,]    1    3    6    7   10
##  [85,]    1    3    6    8    9
##  [86,]    1    3    6    8   10
##  [87,]    1    3    6    9   10
##  [88,]    1    3    7    8    9
##  [89,]    1    3    7    8   10
##  [90,]    1    3    7    9   10
##  [91,]    1    3    8    9   10
##  [92,]    1    4    5    6    7
##  [93,]    1    4    5    6    8
##  [94,]    1    4    5    6    9
##  [95,]    1    4    5    6   10
##  [96,]    1    4    5    7    8
##  [97,]    1    4    5    7    9
##  [98,]    1    4    5    7   10
##  [99,]    1    4    5    8    9
## [100,]    1    4    5    8   10
## [101,]    1    4    5    9   10
## [102,]    1    4    6    7    8
## [103,]    1    4    6    7    9
## [104,]    1    4    6    7   10
## [105,]    1    4    6    8    9
## [106,]    1    4    6    8   10
## [107,]    1    4    6    9   10
## [108,]    1    4    7    8    9
## [109,]    1    4    7    8   10
## [110,]    1    4    7    9   10
## [111,]    1    4    8    9   10
## [112,]    1    5    6    7    8
## [113,]    1    5    6    7    9
## [114,]    1    5    6    7   10
## [115,]    1    5    6    8    9
## [116,]    1    5    6    8   10
## [117,]    1    5    6    9   10
## [118,]    1    5    7    8    9
## [119,]    1    5    7    8   10
## [120,]    1    5    7    9   10
## [121,]    1    5    8    9   10
## [122,]    1    6    7    8    9
## [123,]    1    6    7    8   10
## [124,]    1    6    7    9   10
## [125,]    1    6    8    9   10
## [126,]    1    7    8    9   10
## [127,]    2    3    4    5    6
## [128,]    2    3    4    5    7
## [129,]    2    3    4    5    8
## [130,]    2    3    4    5    9
## [131,]    2    3    4    5   10
## [132,]    2    3    4    6    7
## [133,]    2    3    4    6    8
## [134,]    2    3    4    6    9
## [135,]    2    3    4    6   10
## [136,]    2    3    4    7    8
## [137,]    2    3    4    7    9
## [138,]    2    3    4    7   10
## [139,]    2    3    4    8    9
## [140,]    2    3    4    8   10
## [141,]    2    3    4    9   10
## [142,]    2    3    5    6    7
## [143,]    2    3    5    6    8
## [144,]    2    3    5    6    9
## [145,]    2    3    5    6   10
## [146,]    2    3    5    7    8
## [147,]    2    3    5    7    9
## [148,]    2    3    5    7   10
## [149,]    2    3    5    8    9
## [150,]    2    3    5    8   10
## [151,]    2    3    5    9   10
## [152,]    2    3    6    7    8
## [153,]    2    3    6    7    9
## [154,]    2    3    6    7   10
## [155,]    2    3    6    8    9
## [156,]    2    3    6    8   10
## [157,]    2    3    6    9   10
## [158,]    2    3    7    8    9
## [159,]    2    3    7    8   10
## [160,]    2    3    7    9   10
## [161,]    2    3    8    9   10
## [162,]    2    4    5    6    7
## [163,]    2    4    5    6    8
## [164,]    2    4    5    6    9
## [165,]    2    4    5    6   10
## [166,]    2    4    5    7    8
## [167,]    2    4    5    7    9
## [168,]    2    4    5    7   10
## [169,]    2    4    5    8    9
## [170,]    2    4    5    8   10
## [171,]    2    4    5    9   10
## [172,]    2    4    6    7    8
## [173,]    2    4    6    7    9
## [174,]    2    4    6    7   10
## [175,]    2    4    6    8    9
## [176,]    2    4    6    8   10
## [177,]    2    4    6    9   10
## [178,]    2    4    7    8    9
## [179,]    2    4    7    8   10
## [180,]    2    4    7    9   10
## [181,]    2    4    8    9   10
## [182,]    2    5    6    7    8
## [183,]    2    5    6    7    9
## [184,]    2    5    6    7   10
## [185,]    2    5    6    8    9
## [186,]    2    5    6    8   10
## [187,]    2    5    6    9   10
## [188,]    2    5    7    8    9
## [189,]    2    5    7    8   10
## [190,]    2    5    7    9   10
## [191,]    2    5    8    9   10
## [192,]    2    6    7    8    9
## [193,]    2    6    7    8   10
## [194,]    2    6    7    9   10
## [195,]    2    6    8    9   10
## [196,]    2    7    8    9   10
## [197,]    3    4    5    6    7
## [198,]    3    4    5    6    8
## [199,]    3    4    5    6    9
## [200,]    3    4    5    6   10
## [201,]    3    4    5    7    8
## [202,]    3    4    5    7    9
## [203,]    3    4    5    7   10
## [204,]    3    4    5    8    9
## [205,]    3    4    5    8   10
## [206,]    3    4    5    9   10
## [207,]    3    4    6    7    8
## [208,]    3    4    6    7    9
## [209,]    3    4    6    7   10
## [210,]    3    4    6    8    9
## [211,]    3    4    6    8   10
## [212,]    3    4    6    9   10
## [213,]    3    4    7    8    9
## [214,]    3    4    7    8   10
## [215,]    3    4    7    9   10
## [216,]    3    4    8    9   10
## [217,]    3    5    6    7    8
## [218,]    3    5    6    7    9
## [219,]    3    5    6    7   10
## [220,]    3    5    6    8    9
## [221,]    3    5    6    8   10
## [222,]    3    5    6    9   10
## [223,]    3    5    7    8    9
## [224,]    3    5    7    8   10
## [225,]    3    5    7    9   10
## [226,]    3    5    8    9   10
## [227,]    3    6    7    8    9
## [228,]    3    6    7    8   10
## [229,]    3    6    7    9   10
## [230,]    3    6    8    9   10
## [231,]    3    7    8    9   10
## [232,]    4    5    6    7    8
## [233,]    4    5    6    7    9
## [234,]    4    5    6    7   10
## [235,]    4    5    6    8    9
## [236,]    4    5    6    8   10
## [237,]    4    5    6    9   10
## [238,]    4    5    7    8    9
## [239,]    4    5    7    8   10
## [240,]    4    5    7    9   10
## [241,]    4    5    8    9   10
## [242,]    4    6    7    8    9
## [243,]    4    6    7    8   10
## [244,]    4    6    7    9   10
## [245,]    4    6    8    9   10
## [246,]    4    7    8    9   10
## [247,]    5    6    7    8    9
## [248,]    5    6    7    8   10
## [249,]    5    6    7    9   10
## [250,]    5    6    8    9   10
## [251,]    5    7    8    9   10
## [252,]    6    7    8    9   10

Основне статистичке функције

x<-rnorm(50)
mean(x) # Uzoracka sredina
## [1] -0.08789409
median(x) # Uzoracka medijana
## [1] 0.02169323
sd(x) # Standardna devijacija
## [1] 0.8911899
var(x) # Popravljena uzoracka disperzija
## [1] 0.7942194
quantile(x) # Funkcija koja vraca kvantile (0%, 25%, 50%, 75%, 100%)
##          0%         25%         50%         75%        100% 
## -2.02260468 -0.71279822  0.02169323  0.63221050  1.63927991
p <- seq(0,1,0.1) # Ako zelimo druge verovatnoce, prosledjujemo ih u vektoru
quantile(x,p)
##          0%         10%         20%         30%         40%         50% 
## -2.02260468 -1.28257558 -0.85662733 -0.52975693 -0.28063915  0.02169323 
##         60%         70%         80%         90%        100% 
##  0.16541605  0.40347171  0.71513496  1.01737842  1.63927991
range(x) # Raspon uzorka
## [1] -2.022605  1.639280

Подаци са недостајућим вредностима

attach(airquality)
mean(Ozone) # ne moze da izracuna zbog NA vrednosti
## [1] NA
mean(Ozone,na.rm=T)
## [1] 42.12931
summary(Ozone) # vidimo da ima 321 NA vrednost
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##    1.00   18.00   31.50   42.13   63.25  168.00      37

Графички приказ података

Хистограм

Хистограм је графичка репрезентација низа датих нумеричких података. Користи се за оцену густине.

Хистограм се формира на следећи начин:

  1. Добијени подаци се сортирају.

  2. Одабере се дужина подеока \(d\).

  3. Подели се цео интервал (распон података) на подинтервале дужине \(d\).

  4. На \(x\)-оси се означе ти добијени интервали, а одговарајућа вредност на \(y\)-оси је број елемената из узорка који се налазе у том интервалу.

У \(R\)-у постоји уграђена функција hist(). Аргументи ове функције су:

  • x - вектор чији хистограм желимо да прикажемо

  • breaks - вектор са крајевима сваког интервала.

  • freq - да ли су апсолутне или релативне фреквенције, у другом случају укупно површина је 1

  • right - ако је TRUE ћелије су облика \((a,b]\), а за FALSE обрнуто

Такође постоје и аргументи col, border, main, xlab, ylab, xlim, ylim.

Кад правимо хистограм прво треба да одаберемо колико ћемо категорија (подинтервала) да имамо. Тај број се добија из формуле \[k=[log_2(N)]+1,\]

где је \(k\) број категорија, а \(N\) обим узорка, тј. величина тог вектора.

Одавде можемо наћи ширину сваког интервала по формули \(d=\frac{R}{k}\), где је \(R\) распон узорка (разлика између највећег и најмањег члана).

  • Пример: Тврди се да је просечна цена безоловног бензина у Америци била \(1.35\$\). У рекламне сврхе компанија жели да покаже како је њихова цена нижа. Да би то поткрепили своју тврдњу, статистичари из фирме су сакупили следеће податке на основу случајног узорка:
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)

Израчунати у \(R\)-у узорачку средину и медијану, узорачки распон и нацртати хистограм над прикупљеним подацима.

mean(cene) 
## [1] 1.340167
median(cene) 
## [1] 1.35
range(cene) # ili c(min(cene),max(cene))
## [1] 1.20 1.49

Правимо хистограм

n <- length(cene)
k <- floor(log(n, base = 2)) + 1
d <- diff(range(cene)) / k
k
## [1] 6
d
## [1] 0.04833333
cene <- sort(cene) # Sortiramo vektor

Правимо поделу на интервале

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,col = 'coral',main = "")

Упоредимо овај хистограм са оним који се добија ако не задамо сами поделе.

par(mfrow = c(1, 2))
hist(cene, breaks = podela, col = 'coral', main = "Histogram cena")
hist(cene, col = 'lightblue' , main = "Histogram cena")

Полигон фреквенција

Графичко представљање података које има за циљ разумевање облика расподеле на сличан начин као хистограм.

Да бисмо конструисали полигон фреквенција, треба на почетку да поделимо податке на неке класе (интервале), баш као код хистограма. Потом се означи тачка на графику чија \(x\) координата има вредност средине интервала, а \(y\) координата је фреквенција одговарајуће класе. Полигон добијамо тако што дужима спајамо те означене тачке. Можемо укључити једну класу пре најмање вредности међу подацима и једну после највеће. На тај начин добијамо да полигон додирује \(x\) осу са обе стране.

Показаћемо полигон на примеру података из базе discoveries која садржи податке о броју великих изума и научних открића између 1860. и 1959. године.

discoveries
## Time Series:
## Start = 1860 
## End = 1959 
## Frequency = 1 
##   [1]  5  3  0  2  0  3  2  3  6  1  2  1  2  1  3  3  3  5  2  4  4  0  2  3  7
##  [26] 12  3 10  9  2  3  7  7  2  3  3  6  2  4  3  5  2  2  4  0  4  2  5  2  3
##  [51]  3  6  5  8  3  6  6  0  5  2  2  2  6  3  4  4  2  2  4  7  5  3  3  0  2
##  [76]  2  2  1  3  4  2  2  1  1  1  2  1  4  4  3  2  1  4  1  1  1  0  0  2  0

По формули добијамо да треба да имамо отприлике 7 категорија, па за ширину интервала можемо узети 2 и додајемо још две класе на крајевима.

range(discoveries)
## [1]  0 12
cut.points <- seq(-2 , 14 , by = 2)

Табеле фреквенција

disc.cut <- cut(discoveries, cut.points, right = FALSE)
disc.freq <- table(disc.cut)
cbind(disc.freq)
##         disc.freq
## [-2,0)          0
## [0,2)          21
## [2,4)          46
## [4,6)          19
## [6,8)          10
## [8,10)          2
## [10,12)         1
## [12,14)         1

Цртамо хистограм и полигон фреквенција

hist(discoveries, 
     breaks=cut.points, 
     col="slategray3", 
     border = "dodgerblue4",
     right=FALSE,
     xlab = "x-osa", 
     main = "Histogram")

plot(disc.freq,
     type = "b",
     col = "orange",
     main = "Poligon frekvencija")

Хистограм као оцена густине

Неколико примера у којима ћемо да генеришемо узорак из познате расподеле и да упоредимо облик хистограма са теоријском густином. (Користимо хистограм из пакета lattice).

library (lattice)
  • Узорак обима 500 из стандардне нормалне расподеле
x <- rnorm (500)
hist (x, prob =TRUE , xlab ="",ylab ="",col ='coral1',border ='bisque', main="N(0,1)")
curve (dnorm (x),add =TRUE,lwd =3,col ='cornflowerblue')

  • Узорак обима 1000 из експоненцијалне расподеле са параметром 4
y <- rexp (1000 ,4)
hist (y, prob =TRUE , xlab ="",ylab ="",col ='cornflowerblue',border ='bisque' , main="Exp(1)")
curve ( dexp (x ,4) ,add =TRUE ,lwd =3, col ='coral1')

  • Узорак из униформне \(U(0 ,1)\) расподеле обима 500
z <- runif (500)
hist(z,prob =TRUE, xlab ="",ylab ="",col ='darksalmon',border ='bisque',main="U(0,1)")
curve(dunif (x),add =TRUE,lwd =3,col='cadetblue')

  • Пример: Нека је \(S_n=X_1+...+X_n\), где су \(X_i,\) \(i=1,...,n\) независне случајне величине са експоненцијалном \(E(2)\) расподелом. Генерисати случајну величину \(S_n\). Генерисати 1000 бројева из исте расподеле као \(S_n\) и нацртати њихов хистограм. Да ли је резултат очекиван? (Подсетите се ЦГТ)
s_n <- function(n) {
  x <- rexp(n, rate = 2)
  sum(x)
}
N <- 1000
n <- 100
s <- replicate(N, s_n(n))
hist(s,probability = T,col = 'lightblue',main = "")

# Znamo da je EX=1/lambda, Dx=1/lambda^2
EX <- 1 / 2
DX <- 1 / 4

Хоћемо да стандардизујемо податке

s.z <- (s - n * EX) / sqrt(n * DX)
hist(s.z,probability = T,col = 'lightblue',main = "")
curve(dnorm(x),add = T,lwd = 2,col = 'coral')

Специјални случај централне граничне теореме је Муавр-Лапласова теорема:

Познато нам је да се биномна случајна величина \(B(n,p)\) може представити као збир \(n\) независних случајних величина са Бернулијевом \(Ber(p)\) расподелом (збир \(n\) независних индикатора) и такође \(ES_n=np\), \(DS_n=np(1−p)\). Ако је \(np>10\), можемо је апроксимирати нормалном.

Генерисаћемо \(B(n,p)\) као збир \(n\) независних Бернулијевих случајних величина.

binom <- function(n, p) {
  x <- sample(c(0, 1), n, replace = TRUE, prob = c(1 - p, p))
  b <- sum(x)
  return(b)
}
uzorak <- replicate(1000, binom(50, 0.7))
# standardizujemo podatke
st.uzorak <- (uzorak - 50 * 0.7) / sqrt(50 * 0.7 * 0.3)
plot(density(st.uzorak), lwd=2, col='coral', main = "")  
curve(dnorm(x), col='lightblue', lwd=2, add=T, from = -4, to =4)

Хистограм за груписане податке

library(ISwR)
data(energy)
attach(energy)
head(energy)
##   expend stature
## 1   9.21   obese
## 2   7.53    lean
## 3   7.48    lean
## 4   8.08    lean
## 5   8.09    lean
## 6  10.15    lean
# Delimo podatke u dve grupe
expend.lean<-expend[stature=="lean"]
expend.obese<-expend[stature=="obese"]
par(mfrow=c(2,1))
hist(expend.lean) # ovde breaks prosledjujemo kao broj celija koje hocemo, ali R zadrzava pravo da ga izmeni da bi granice bile sto zaokruzeniji brojevi
hist(expend.obese)

par(mfrow=c(1,1))

Box-plot

Користи се за детекцију аутлајера.

boxplot(discoveries,col = "pink")

range(discoveries, na.rm = T)
## [1]  0 12
median(discoveries, na.rm = T)   
## [1] 3
q1 <- quantile(discoveries, na.rm = T)[2]
q3 <- quantile(discoveries, na.rm = T)[4]
qr <- IQR(discoveries, na.rm = T)
q1
## 25% 
##   2
q3
## 75% 
##   4
q1 - 1.5 * qr # f1
## 25% 
##  -1
q3 + 1.5 * qr # f3
## 75% 
##   7
q1 - 3 * qr # F1
## 25% 
##  -4
q3 + 3 * qr # F3
## 75% 
##  10
max(discoveries[discoveries < q3 + 1.5 * qr], na.rm = T) # a3
## [1] 6

Boxplot за груписане податке

boxplot(expend~stature) # y~x, za neke vektore x i y znaci: y je opisano preko x, i zove se model formula

# drugi nacin
boxplot(expend.lean, expend.obese) # samo ih shvata kao odvojene vektore, pa crta i odvojene plotove 

Емпиријска функција расподеле

Нека је \((X_1,...,X_n)\) узорак из расподеле \(F\). \[F_n(x)=\frac{1}{n}\sum_{k=1}^nI\{X_k\le x\}\] је емпиријска функција расподеле.

Детаљније погледати у пакету stepfun.

  • Пример
x <- rpois(20, lambda = 3)
table(x)
## x
## 0 1 2 3 4 5 7 8 
## 2 1 6 6 2 1 1 1
Fn <- ecdf(x)
plot(Fn, main = "Empirijska funkcija raspodele")

Q-Q plot (quantile versus quantile)

График који се добија када се \(k\)-та вредност по величини плотује са очекиваном \(k\)-том вредношћу по величини у нормалној расподели. Ако се добије приближно права линија, јесте нормална расподела.

qqnorm(x)

Табеле

attach(hellung)
## The following object is masked from package:PASWR:
## 
##     glucose
head(hellung)
##   glucose   conc diameter
## 1       1 631000     21.2
## 2       1 592000     21.5
## 3       1 563000     21.3
## 4       1 475000     21.0
## 5       1 461000     21.5
## 6       1 416000     21.3
tabela<-table(glucose, conc)
tabela #prikazuje koliko elemenata ima u preseku svake dve mogucnosti za glucose i conc 
##        conc
## glucose 11000 11600 13000 13500 14000 14500 16000 20000 21000 22000 24000 27000
##       1     1     1     0     1     0     1     1     1     1     0     0     0
##       2     1     0     1     0     1     0     0     0     0     1     1     1
##        conc
## glucose 28000 30000 32000 34000 35000 38000 41000 46000 52000 55000 62000 66000
##       1     1     1     1     1     0     1     1     1     1     1     0     1
##       2     0     0     0     0     1     0     0     0     0     0     1     0
##        conc
## glucose 69000 70000 78000 90000 111000 129000 130000 137000 165000 175000
##       1     0     0     0     1      0      0      1      1      1      0
##       2     1     1     1     0      1      1      0      0      0      1
##        conc
## glucose 195000 199000 201000 285000 302000 321000 332000 385000 416000 461000
##       1      1      1      0      0      1      1      0      1      1      1
##       2      0      0      1      1      0      0      1      0      0      0
##        conc
## glucose 475000 501000 563000 592000 630000 631000
##       1      1      0      1      1      0      1
##       2      0      1      0      0      1      0
# slicno sa
data(juul)
attach(juul)
head(juul)
##    age menarche sex igf1 tanner testvol
## 1   NA       NA  NA   90     NA      NA
## 2   NA       NA  NA   88     NA      NA
## 3   NA       NA  NA  164     NA      NA
## 4   NA       NA  NA  166     NA      NA
## 5   NA       NA  NA  131     NA      NA
## 6 0.17       NA   1  101      1      NA
table(menarche, tanner)
##         tanner
## menarche   1   2   3   4   5
##        1 221  43  32  14   2
##        2   1   1   5  26 202
# tabelu mozemo transponovati kao i matricu
t(tabela)
##         glucose
## conc     1 2
##   11000  1 1
##   11600  1 0
##   13000  0 1
##   13500  1 0
##   14000  0 1
##   14500  1 0
##   16000  1 0
##   20000  1 0
##   21000  1 0
##   22000  0 1
##   24000  0 1
##   27000  0 1
##   28000  1 0
##   30000  1 0
##   32000  1 0
##   34000  1 0
##   35000  0 1
##   38000  1 0
##   41000  1 0
##   46000  1 0
##   52000  1 0
##   55000  1 0
##   62000  0 1
##   66000  1 0
##   69000  0 1
##   70000  0 1
##   78000  0 1
##   90000  1 0
##   111000 0 1
##   129000 0 1
##   130000 1 0
##   137000 1 0
##   165000 1 0
##   175000 0 1
##   195000 1 0
##   199000 1 0
##   201000 0 1
##   285000 0 1
##   302000 1 0
##   321000 1 0
##   332000 0 1
##   385000 1 0
##   416000 1 0
##   461000 1 0
##   475000 1 0
##   501000 0 1
##   563000 1 0
##   592000 1 0
##   630000 0 1
##   631000 1 0
# Marginalne tabele - zbirovi tabele po kolonama i vrstama (umesto sum na svaku vrstu/kolonu redom, moze i tako)
m1<-margin.table(tabela,1) # po vrstama
m2<-margin.table(tabela, 2) # po kolonama
m1
## glucose
##  1  2 
## 32 19
m2
## conc
##  11000  11600  13000  13500  14000  14500  16000  20000  21000  22000  24000 
##      2      1      1      1      1      1      1      1      1      1      1 
##  27000  28000  30000  32000  34000  35000  38000  41000  46000  52000  55000 
##      1      1      1      1      1      1      1      1      1      1      1 
##  62000  66000  69000  70000  78000  90000 111000 129000 130000 137000 165000 
##      1      1      1      1      1      1      1      1      1      1      1 
## 175000 195000 199000 201000 285000 302000 321000 332000 385000 416000 461000 
##      1      1      1      1      1      1      1      1      1      1      1 
## 475000 501000 563000 592000 630000 631000 
##      1      1      1      1      1      1
# Ako necemo da ih broji (apsolutne frekvencije), nego da vraca relativne frekvencije
prop.table(tabela,1)
##        conc
## glucose      11000      11600      13000      13500      14000      14500
##       1 0.03125000 0.03125000 0.00000000 0.03125000 0.00000000 0.03125000
##       2 0.05263158 0.00000000 0.05263158 0.00000000 0.05263158 0.00000000
##        conc
## glucose      16000      20000      21000      22000      24000      27000
##       1 0.03125000 0.03125000 0.03125000 0.00000000 0.00000000 0.00000000
##       2 0.00000000 0.00000000 0.00000000 0.05263158 0.05263158 0.05263158
##        conc
## glucose      28000      30000      32000      34000      35000      38000
##       1 0.03125000 0.03125000 0.03125000 0.03125000 0.00000000 0.03125000
##       2 0.00000000 0.00000000 0.00000000 0.00000000 0.05263158 0.00000000
##        conc
## glucose      41000      46000      52000      55000      62000      66000
##       1 0.03125000 0.03125000 0.03125000 0.03125000 0.00000000 0.03125000
##       2 0.00000000 0.00000000 0.00000000 0.00000000 0.05263158 0.00000000
##        conc
## glucose      69000      70000      78000      90000     111000     129000
##       1 0.00000000 0.00000000 0.00000000 0.03125000 0.00000000 0.00000000
##       2 0.05263158 0.05263158 0.05263158 0.00000000 0.05263158 0.05263158
##        conc
## glucose     130000     137000     165000     175000     195000     199000
##       1 0.03125000 0.03125000 0.03125000 0.00000000 0.03125000 0.03125000
##       2 0.00000000 0.00000000 0.00000000 0.05263158 0.00000000 0.00000000
##        conc
## glucose     201000     285000     302000     321000     332000     385000
##       1 0.00000000 0.00000000 0.03125000 0.03125000 0.00000000 0.03125000
##       2 0.05263158 0.05263158 0.00000000 0.00000000 0.05263158 0.00000000
##        conc
## glucose     416000     461000     475000     501000     563000     592000
##       1 0.03125000 0.03125000 0.03125000 0.00000000 0.03125000 0.03125000
##       2 0.00000000 0.00000000 0.00000000 0.05263158 0.00000000 0.00000000
##        conc
## glucose     630000     631000
##       1 0.00000000 0.03125000
##       2 0.05263158 0.00000000
prop.table(tabela,2)
##        conc
## glucose 11000 11600 13000 13500 14000 14500 16000 20000 21000 22000 24000 27000
##       1   0.5   1.0   0.0   1.0   0.0   1.0   1.0   1.0   1.0   0.0   0.0   0.0
##       2   0.5   0.0   1.0   0.0   1.0   0.0   0.0   0.0   0.0   1.0   1.0   1.0
##        conc
## glucose 28000 30000 32000 34000 35000 38000 41000 46000 52000 55000 62000 66000
##       1   1.0   1.0   1.0   1.0   0.0   1.0   1.0   1.0   1.0   1.0   0.0   1.0
##       2   0.0   0.0   0.0   0.0   1.0   0.0   0.0   0.0   0.0   0.0   1.0   0.0
##        conc
## glucose 69000 70000 78000 90000 111000 129000 130000 137000 165000 175000
##       1   0.0   0.0   0.0   1.0    0.0    0.0    1.0    1.0    1.0    0.0
##       2   1.0   1.0   1.0   0.0    1.0    1.0    0.0    0.0    0.0    1.0
##        conc
## glucose 195000 199000 201000 285000 302000 321000 332000 385000 416000 461000
##       1    1.0    1.0    0.0    0.0    1.0    1.0    0.0    1.0    1.0    1.0
##       2    0.0    0.0    1.0    1.0    0.0    0.0    1.0    0.0    0.0    0.0
##        conc
## glucose 475000 501000 563000 592000 630000 631000
##       1    1.0    0.0    1.0    1.0    0.0    1.0
##       2    0.0    1.0    0.0    0.0    1.0    0.0
# Sume po vrstama i kolonama treba da su 1

Графички приказ табела - bar plot

Функција barplot, чији је аргумент вектор или матрица

barplot(m1) # moze se podesiti i boja sa col, itd.

# Ako je argument matrica, bice naslagane vrste jedna preko druge u okviru kolone, po udelu
tab1<-table(menarche, tanner)
par(mfrow=c(2,2))
barplot(tab1,col="white")
barplot(t(tab1),col="white")
barplot(tab1,beside=T) # da slaze vrste jednu do druge a ne vertikalno
barplot(prop.table(tab1,2),col="white",beside=T)

par(mfrow=c(1,1))

Задаци за вежбу

  1. За променљиву speed из базе података cars одредити узорачку средину, узорачку дисперзију, узорачко стандардно одступање, медијану и квантиле и нацртати хистограм.

  2. Бацају се истовремено коцка за игру и новчић. Исписати скуп свих исхода. Оценити вероватноћу исхода “5-писмо” на основу 1000 бацања.

  3. Формирати вектор \(X\) са елементима \(0,0.1,0.2,0.3,...,6.5\) и вектор \(Y\) који је \(Y=sin(X)\). Нацртати график зависности \(Y(X)\), за оне \(X\) где је \(|sin(X)| < 0.5\), при чему се на графику не цртају појединачне тачке, већ линије између њих.