# Generisanje slucajnih velicina # Binomna raspodjela # X~B(n,p) broj uspjeha u n pokusaja # Na proslom casu smo vidjeli da ako zelimo da generisemo neki uzorak iz binomne # raspodje sa parametrima n i p, odnosno da generisemo slucajnu velicinu X iz # binomne B(n,p) raspodjele, za to imamo gotovu funkciju rbinom(velicina # vektora, n, p). # Hocemo da generisemo binomnu slucajnu velicinu bez koriscenja fje rbinom. # 1. nacin: # Objasnjenje: na casu binomna1 <- function(n, p) { k <- (-1):n vec <- choose(n, k) * p ^ k * (1 - p) ^ (n - k) x <- runif(1) which((cumsum(vec)[-length(vec)] < x) & (x <= cumsum(vec)[-1])) - 1 } # 2. nacin # Neka X1, X2,...,Xn imaju Bernulijevu raspodjelu Ber(p), tj. to su indikatori # nekog dogadjaja cija je vjerovatnoca p. Tada ce zbir X=X1+X2+...+Xn imati # binomnu B(n,p) raspodjelu. # Kako nam za binomnu raspodjelu treba n indikatora, generisacemo vektor od n 0 # ili 1 koje ce da predstavljaju uspjehe odnosno neuspjehe. Zbir takvog vektora # ce da da bas broj uspjeha u n nezavisnih izvodjenja eksperimenta, sto bas # predstavlja binomna slucajna velicina binomna2 <- function(n, p) { vec <- sample(c(1, 0), size = n, replace = TRUE, prob = c(p, 1 - p)) k <- sum(vec) return(k) } # Sa proslog casa znamo da je ocekivanje X iz B(n,p) EX=np. # Ocjenjivanje matematickog ocekivanja EX: # Ocjena za ocekivanje neke slucajne velicine je srednja vrijednost zbira # nezavisnih slucajnih velicina iz iste raspodjele. # Dakle, da bismo ga ocijenili, generismo vektor iz nase raspodjele duzine N i # nadjemo njegovu srednju vrijednost. # Mozemo da iskoristimo bilo koju od funkcija rbinom(), binomna1() ili # binomna2() za generisanje takvog vektora ocekivanje<-function(n,p){ vec<-replicate(10000, binomna1(n,p)) mean(vec) } ocekivanje(10,0.7) # 10*0.7=7 # Disperzija DX=np(1-p) # Rekli smo da je ocjena za disperziju var(x) disperzija<-function(n,p){ vec<-replicate(10000, binomna1(n,p)) var(vec) } disperzija(10,0.7) 10*0.7*0.3 # Geometrijska raspodjela # X~G(p) broj pokusaja do prvog uspjeha # Na proslom casu smo vidjeli da postoji gotova funkcija rgeom() koja ce da # vrati uzorak iz geometrijske raspodjele, medjutim ne bas one koju smo mi # definisali, nego pomjerene, koja uzima vrijednosti od 0, tj. broji neuspjehe # do prvog uspjeha # Mi cemo generisati bas slucajnu velicinu koja broji sve pokusaje do prvog # uspjeha. # Algoritam za generisanje broja iz geometrijske raspodjele sa parametrom p. # 1. Generisemo nezavisne Bernulijeve slucajne velicine X1,X2,...sa parametrom p # (ogranicemo broj na 1000 zbog veoma male terojske vjerovatnoce da se prvi # uspjeh ne desi prije 1000. pokusaja) # 2. Trazimo najmanji indeks i takav da je Xi uzela vrijednost 1, tj trazimo prvi # elemenat u vektoru koji je jednak jedinici # 3. Trazeni broj pokusaja je bas i. geometrijska <- function(p) { vec <- sample(c(1, 0), size = 1000, replace = TRUE, prob = c(p, 1 - p)) # Trazimo prvi element iz vektora koji je jednak jedinici # Ako su svi nula, smatramo da nikad nije doslo do uspjeha if (all(vec == 0)) return("infty") which.max(vec == 1) # Napomena: Ako je x logicki vektor (sto postizemo zadavanjem nekog uslova u # zagradi)which.min(x) i which.max(x) vracaju indeks prvog FALSE ili TRUE, # redom, posmatrajuci FALSE EY= 1/p - 1 # Disperzija ce biti ista. ocekivanje<-function(p){ vec<-rgeom(1000,p) mean(vec) } ocekivanje(0.4) 1/0.4-1 # Puasonova raspodjela # broj realizacija nekog dogadjaja na zadatom intervalu, npr. u jedincici # vremena # X ~ P(lambda), lambda >0 # X={0,1,2,3,...} # Prefiksi r, p, d i q oznavaju iste funkcije kao do sad: dpois(x, lambda) # P{X=x} ppois(x, lambda) # F(x)=P{X<=x}-funckija raspodjele rpois(n, lambda) # Vektor velicine n sa slucajnim uzorkom iz Puasonove raspodjele # Ocekivanje teorijsko EX=lambda, kao i disperzija DX=lambda # Mozemo da ga ocijenimo kao sva prethodna ocekivanja. ocekivanje <- function(lambda) { vec <- rpois(1000, lambda) mean(vec) } ocekivanje(3) # Takodje i disperziju: disperzija <- function(lambda) { vec<- rpois(1000, lambda) var(vec) } disperzija(3) # Primjer: # Broj poziva za hotelske rezervacije je u prosjeku 3 poziva po satu. Izracunati # vjerovatnocu u toku jednog sata stignu bar 2 poziva. # X~P(3) Trazi se: P{X>=2}=1-P{X<2}=1-P{x<=1}=1-F(1) # resenje: 1 - ppois(1, lambda = 3) # Primjer: # Slucajna velicina X ~ P(3), dok Y~P(5) i nezavisne su. Ocijeniti ocekivanje # slucajne velicine Z=X+Y. # Hocemo da generisemo vektor velicine N iz raspodjele Z: Z<-function(N){ X<-rpois(N, lambda=3) Y<-rpois(N, lambda=5) X+Y } mean(Z(1000))