Функција sample()
У најједноставнијем облику функција sample пермутује
задати низ на случајан начин.
## [1] 1 7 5 2 10 6 4 8 9 3
## [1] 2 8 3 7 9 10 1 6 5 4
Ова функција има аргумент replace који може узимати
вредности FALSE или TRUE. Подразумевано, ако
није другачије наведено, узима вредност FALSE, што значи да
се симулира случајно бирање бројева без понављања. Ако проследимо
вредност TRUE функција враћа случајан узорак са
понављањем.
Још један аргумент је prob (односно probability) и он је
подразумевано NULL, али можемо и да задамо неке тежине
(вероватноће) елементима скупа.
Аргумент size одређује колико елемената бирамо из
прослеђеног вектора.
НАПОМЕНА: Може доћи до забуне приликом следећих израза. Зашто?
## [1] 9 10
## [1] 8 7 3 2 4 9 6 5 1 10
- Симулирајмо бацање новчића
## [1] "Tails"
Желимо 100 симулација овог случајног експеримента.
Зашто јавља грешку?
## [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"
Приказ резултата експеримента
##
## Heads Tails
## 497 503
- Симулација бацања фаличног новчића
## [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"
##
## Heads Tails
## 32 68
Уочава се разлика у фреквенцијама.
Приметимо да ће пропорције елемената излазног резултата конвергирати ка спецификованим вероватноћама како се величина узорка повећава.
# 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() можемо применити и на базе података како бисмо генерисали случајни узорак из базе.
## 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)\) по закону униформне расподеле. Ова
функција може да се користи за генерисање случајности.
## [1] 0.468
## [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)Задатак 1
Симулирати бацање регуларне коцкице за игру. Израчунати фреквенцију појављивања 6 у 1000 бацања.
## [1] 2
## [1] 0.18
Задатак 2
Коцкица за игру је таква да је вероватноћа падања неког броја пропорционална броју тачкица на тој страни. Одредити вероватноћу да падне паран број.
## [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\).
## [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\) хиљада динара.
- Други начин: Ако желимо да избегнемо петљу.
Кумулативна сума вектора \(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")Приметимо да је други начин ефикаснији.
## user system elapsed
## 0.00 0.00 0.02
## 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
## [1] 0.702
## [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.
Детаљније погледати на
Расподеле
Биномна расподела \(B(n,p)\)
За рачунање појединачних вероватноћа:
dbinom(x,size,prob,log=FALSE).
## [1] 0.0009765625
## [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\)
## [1] 0.9998563
Функција квантила:
qbinom(p,size,prob,lower.tail=T,log.p=F), где је \(q\), такво да је \(P\{X\le q\}=p\)
## [1] 9
Узорак из биномне расподеле: rbinom(n,size,prob), где је
\(n\) обим узорка.
## [1] 6 5 4 4 5 5 7 7 7 4 6 7 3 10 8 5 4 4 4 6
График
plot(x,dbinom(x,size=50,prob=0.4),type="h",
main="Binomna raspodela B(50, 0.4)",
xlab="k",ylab="binomne verovatnoce")Биномни коефицијенти
## [1] 6
Норамлна расподела \(N(m,\sigma^2)\)
Густина: dnorm(x,mean=0,sd=1,log=F)
## [1] 0.09666703
Функција расподеле:
pnorm(z,mean=0,sd=1,lower.tail=T,log.p=F)
## [1] 0.5
## [1] 0.8413447
## [1] -0.1727538
График густине
График функције расподеле
Квантили: qnorm(p,mean=0,sd=1)
## [1] 1.281552
## [1] 2
Узорак случајних бројева из \(N(m,\sigma^2)\) расподеле:
rnorm(size,mean=0,sd=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)
## [1] 0
## [1] 0
Функција расподеле:
punif(q,min=0,max=1,lower.tail=TRUE,log.p=FALSE)
## [1] 0.3333333
Квантили:
qunif(p,min=0,max=1,lower.tail=TRUE,log.p=FALSE)
## [1] 0.5
## [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)
## [1] 0.03663128
## [1] 0.4
Студентова расподела
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)
## [1] 0.02297204
## [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)
Пакет PASWR - Probability and Statistics with R
Неке функције у овом пакету везане су за вероватноћу. На пример,
функција bino.gen(samples,n,pi) за симулацију биномне
расподеле.
## $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) исписује све могуће
комбинације.
## [,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.
## [,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
Основне статистичке функције
## [1] -0.08789409
## [1] 0.02169323
## [1] 0.8911899
## [1] 0.7942194
## 0% 25% 50% 75% 100%
## -2.02260468 -0.71279822 0.02169323 0.63221050 1.63927991
## 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
## [1] -2.022605 1.639280
Графички приказ података
Хистограм
Хистограм је графичка репрезентација низа датих нумеричких података. Користи се за оцену густине.
Хистограм се формира на следећи начин:
Добијени подаци се сортирају.
Одабере се дужина подеока \(d\).
Подели се цео интервал (распон података) на подинтервале дужине \(d\).
На \(x\)-оси се означе ти добијени интервали, а одговарајућа вредност на \(y\)-оси је број елемената из узорка који се налазе у том интервалу.
У \(R\)-у постоји уграђена функција
hist(). Аргументи ове функције су:
x- вектор чији хистограм желимо да прикажемоbreaks- вектор са крајевима сваког интервала.freq- да ли су апсолутне или релативне фреквенције, у другом случају укупно површина је 1right- ако је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\)-у узорачку средину и медијану, узорачки распон и нацртати хистограм над прикупљеним подацима.
## [1] 1.340167
## [1] 1.35
## [1] 1.20 1.49
Правимо хистограм
## [1] 6
## [1] 0.04833333
Правимо поделу на интервале
## [1] 1.200000 1.248333 1.296667 1.345000 1.393333 1.441667 1.490000
Упоредимо овај хистограм са оним који се добија ако не задамо сами поделе.
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. године.
## 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 и додајемо још две класе на крајевима.
## [1] 0 12
Табеле фреквенција
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")Хистограм као оцена густине
Неколико примера у којима ћемо да генеришемо узорак из познате
расподеле и да упоредимо облик хистограма са теоријском густином.
(Користимо хистограм из пакета 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 = "")Хоћемо да стандардизујемо податке
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)Хистограм за груписане податке
## 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)Box-plot
Користи се за детекцију аутлајера.
## [1] 0 12
## [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
## 75%
## 4
## 25%
## -1
## 75%
## 7
## 25%
## -4
## 75%
## 10
## [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
## 0 1 2 3 4 5 7 8
## 2 1 6 6 2 1 1 1
Табеле
## The following object is masked from package:PASWR:
##
## glucose
## 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
## 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
## tanner
## menarche 1 2 3 4 5
## 1 221 43 32 14 2
## 2 1 1 5 26 202
## 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
## 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
## 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
Графички приказ табела - bar plot
Функција barplot, чији је аргумент вектор или
матрица
# 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)Задаци за вежбу
За променљиву speed из базе података cars одредити узорачку средину, узорачку дисперзију, узорачко стандардно одступање, медијану и квантиле и нацртати хистограм.
Бацају се истовремено коцка за игру и новчић. Исписати скуп свих исхода. Оценити вероватноћу исхода “5-писмо” на основу 1000 бацања.
Формирати вектор \(X\) са елементима \(0,0.1,0.2,0.3,...,6.5\) и вектор \(Y\) који је \(Y=sin(X)\). Нацртати график зависности \(Y(X)\), за оне \(X\) где је \(|sin(X)| < 0.5\), при чему се на графику не цртају појединачне тачке, већ линије између њих.