######### # CAS 3 # ######### # Definisati pojmove: uslovne verovatnoce, Bajesove formule. # 1) # Ako imamo skup elementarnih dogadjaja # Omega = {a, b, c} # i njihove verovatnoce # P(a) = 1/2, # P(b) = 1/3, # P(c) = 1/6, # Odrediti verovatnocu svih mogucih dogadaja. # 2) # Ako je P(AB)=1/4, # P(A^c)=1/3 # i P(B)=1/2, # odrediti P(AuB)=? # Taj zadatak na tabli radimo. # Resenje bi trebalo da bude 11/12. # 3) # Oznacimo sa A, B i C ocene koje mogu da se dobiju na jednom predmetu. # Predmet polazu Milica i Stefan. # Verovatnoca da Stefan dobije ocenu B je 0,3. # Verovatnoca da Milica dobije ocenu B je 0,4. # Verovatnoca da niko ne dobije ocenu A, # ali da bar neko dobije ocenu B je 0,1. #Pronaci verovatnocu da bar neko dobije ocenu B, # ali da niko ne dobije ocenu C. # 4) # Kockica za igru je tako napravljena da je verovatnoca # padanja nekog broja proporcionalna kolicini tackica na toj strani. # (Tj verovatnoca da padne 6 je tri puta veca nego 2). # Odrediti verovatnocu da padne paran broj. # Simulirati i oceniti verovatnocu. kockica <- function(N) { # Simulirano vektor duzine N, koji ce da sadrzi svih N rezultata bacanja (simulacije) kocke. x = sample(1:6, N, replace = TRUE, prob = c(1/21, 2/21, 3/21, 4/21, 5/21, 6/21) ) # realna treba da bude 12/21~0.57 # Promenljiva brojac u jednom redu sabira sve slucajeve kada smo dobili paran broj. # Tako izbegavamo sve silne for petlje i if komande. A vec ste mozda i sami videli koliko to znaci ovde. brojac = mean(x %% 2 == 0) # Vracamo uspehe/(ukupno bacanja) return(brojac) } kockica(100000) # 5) # Tri strelca nezavisno jedan od drugog gadjaju u # cilj po jednom, pogadjajuci ga sa verovatnocama 4/5, 3/4, 2/3 respektivno. # Ako su postigli tacno jedan pogodak, naci verovatnocu # da je treci strelac promasio. Proveriti rezultat simulacijom. strelci <- function(N, p1 = 4/5, p2 = 3/4, p3 = 2/3) { # Posto gadjaju nezavisno za svakog mora svoj vektor pogodaka. Na osnovu kojeg cemo odluciti da li je u datim gadjanju # cilj pogodjen ili ne. x = runif(N, 0, 1) y = runif(N, 0, 1) z = runif(N, 0, 1) # Vektor koji pokazuje da li pogodio ili ne. Ukoliko je u i-tim pokusaju pogodak bice vrednost TRUE na i-tom elementu # vektora vektor1(2)(3) vektor1 = x < p1 vektor2 = y < p2 vektor3 = z < p3 # Naredne tri promenljive ce da beleze koliko puta je svako od njih pogodio tacno jednom, tj belezice slucajeve # kada samo prvi, odnosno samo drugi, odnosno samo treci strelac pogodio cilj. pogodio1 = sum(vektor1 == TRUE & vektor2 == FALSE & vektor3 == FALSE) pogodio2 = sum(vektor2 == TRUE & vektor1 == FALSE & vektor3 == FALSE) pogodio3 = sum(vektor3 == TRUE & vektor1 == FALSE & vektor2 == FALSE) # Vracamo vrednost koja nama treba. Obratite paznju da je to isto kao kada bismo vratili: # (pogodio1+pogodio2)/(pogodio1+pogodio2+pogodio3). return(1-pogodio3/(pogodio1+pogodio2+pogodio3)) } strelci(100000, 4/5, 3/4, 2/3) 7/9 # 6) # Istorijski spisi svedoce o tome da je kralj jednog drevnog kraljevstva # poticao iz porodice sa dvoje dece. # Izracunati verovatnocu da je kralj imao sestru ako: # a) nema dodatnih informacija # b) kralj je bio starije dete # 7) # U red sa 10 sedista na slucajan nacin sedaju deset osobe. # Izracunati verovatnocu da ce osoba Y sesti izmedju U i V, # ako se zna da U i V ne sede jedno do drugog, jer su u svadji. posvadjani_ljudi <- function() { # Imamo 10 mesta, stoga sample() za 10 pozicija i recimo pratimo brojeve 1(U), # 2(V) i 3(Y) raspored = sample(1:10, 10, replace = FALSE) # Nalazimo mesto sa najmanjim brojem, tj 1 mesto_u = which.min(raspored) mesto_v = which(raspored == 2) mesto_y = which(raspored == 3) if(mesto_u != mesto_v + 1 & mesto_u != mesto_v - 1) { if( (mesto_v > mesto_y & mesto_u < mesto_y ) | (mesto_v < mesto_y & mesto_u > mesto_y ) ) { return(cbind(1, 1) ) } return(cbind(0,1)) } return(cbind(0, 0) ) } n = 100000 rezultat_funkcije = rowMeans(sapply(vector(length = n), function(x) posvadjani_ljudi())) rezultat = rezultat_funkcije[1]/rezultat_funkcije[2] rezultat 5/12 # ili rezultat_drugi_nacin = rowMeans(replicate(n = n, expr = posvadjani_ljudi(), simplify = TRUE) ) rezultat2 = rezultat_drugi_nacin[1]/rezultat_drugi_nacin[2] rezultat2 system.time(sum(sapply(vector(length = n), function(x) posvadjani_ljudi()) )/n) system.time(sum(replicate(n = n, expr = posvadjani_ljudi(), simplify = TRUE) )/n) # Nezavisnost: # 8) # Na slucajan nacin se bira broj izmedju {1, 2, ..., 22}. # Izracunati verovatnocu da je izabran paran broj, # ako je poznato da je izabran broj deljiv sa 3. deljivost <- function(N) { biranje = sample(1:22, size = N) deljiv_sa_3 = sum(ifelse(biranje %% 3 == 0, 1, 0)) deljiv_sa_6 = sum(ifelse(biranje %% 6 == 0, 1, 0)) return(deljiv_sa_6/deljiv_sa_3) } # 9) # U kutiji se nalaze po tri bele i crne kuglice numerisane ciframa 1, 2, 3. # Iz kutije se na slucajan nacin bira jedna kuglica. # Neka je A dogadjaj da je izabrana kuglica oznacena sa 1 ili 2. # B - dogadjaj da je kuglica bele boje. # Ispitati nezavisnost dogadjaja A i B. # Bajesova teorema # 10) # Sa verovatnocom 1/2 su postavili pare u jedan od 8 sanducica. # Otvorena su 7 sanducica i nije bilo para. # Koja je verovatnoca da se nalaze u 8.? # Simulirati taj dogadjaj N puta i pomocu simulacije # oceniti verovatnocu. # Kod je mozda kratak, ali je zato problem jako netrivijalan i prikazuje da intuicija nije bas dobra u tim pitanjima. sanduce <- function(N) { # br - promenljiva koja ce da belezi koliko puta je # novac u osmom sanducicu. br = 0 # br2 - promenljiva koja ce da belezi koliko puta # je novac u 8. sand, kao i koliko puta nije uopste u njima. br2 = 0 # u funkciji sample imamo 9 vrednosti, jer smo slucaj da nije uopste u sanducice nazvali 9 i stoga je verovatnoca tog # dogadjaja bas 1/2. q = sample(1:9, size = N, prob = c(1/16, 1/16, 1/16, 1/16, 1/16, 1/16, 1/16, 1/16, 1/2 ), replace = TRUE) # Funkcija ifelse(test, ako je prosao if, ako nije prosao if) # U nasem slucaju test: da li je u osmom. Ako jeste onda se br poveca za jedan, ako nije onda nista. br = sum(ifelse(q == 8, 1, 0)) # Slicno za br2, samo belezimo kad je u osmom i van svih sanducica. br2 = sum(ifelse(q > 7, 1, 0)) # Vracamo taj odnos, jer se trazi uslovna verovatnoca kada sigurno znamo da nije u prvih 7, zbog toga te slucajeve nismo # nikako ne belezili u kodu iznad, jer moramo da ih ignorisemo da bismo nasli trazenu verovatnocu. return(br/br2) } sanduce(100000)