

#     Cas 3                                                     27. 10. 2017.




# Zadatak 0

# Kockica za igru je tako napravljena da je vjerovatnoca padanja nekog broja
# proporcionalna kolicini tackica na toj strani. (Tj vjerovatnoca da padne 6 je
# tri puta veca nego 2). Odrediti vjerovatnocu da padne paran broj. 


s<-sample(1:6, 10000, replace = TRUE, prob = c(1/21,2/21,3/21,4/21,5/21,6/21))

mean(s%%2==0)



# Zadatak 1 
# [Uslovna vjerovatnoca]


# Biramo jedan broj iz skupa {1,2,3,...,15} na slucajan nacin. Izracunati
# vjerovatnocu dogadjaja da je broj paran ako se zna da je broj djelijv sa 3.


# A-broj je paran
# B-broj je djeljiv sa 3

# P(A|B)=P(AB)/P(B)=2/5


# Provjerimo rezultat simulacijama:

x<-sample(1:15, 100000, replace = T)

mean(x%%2==0 & x%%3==0)/(mean(x%%3==0))
# Napomena: ako hocemo clan po clan da gledamo pisemo &, | ( umjesto &&, ||)




# Zadatak 2.1
# [Formula mnozenja vjerovatnoca]


# U kutiji se nalaze 3 bijele i 4 crne kuglice. Vadimo jednu za drugom dvije
# kuglice. Kolika je vjerovatnoca da su obje kuglice bijele?

# A-prva kuglica je bijela; B-druga kuglica je bijela
# P(AB)=P(A)P(B|A)=3/7 * 2/6 = 1/7 ili
# P(AB)=( 3 ) / ( 7 ) = 1/7
#       ( 2 )/  ( 2 )  

sim<-function(){

kuglice<-c(rep("C",4),rep("B",3))
s<-sample(kuglice, 2) # Vazno: replace = FALSE (po default-u)
ifelse(s[1]=="B" & s[2]=="B", return(1), return(0))

}

mean(replicate(10000,sim()))


# Zadatak 2.2

# Covjek ima u dzepu n kljuceva od kojih samo jedan otvata vrata. Kljuceve vadi
# redom iz dzepa (bez vracanja) dok ne nadje odgovarajuci kljuc. Izracunati
# vjerovatnocu da trazeni kljuc izvuce u k-tom izvlacenju. (1<=k<=n)


# Ai- u i-tom izvlacenju je nasao kljuc
# A- u k-tom je nasao kljuc
# P(A)=P(A1'A2'...Ak-1'Ak)=n-1/n * n-2/n-1 *...* 1/n-k+1 = 1/n


kljucevi<-function(k,n){
  
  s<-sample(c("pravi", rep("drugi",n-1)),size=n, replace = FALSE)
  ifelse(s[k]=="pravi", return(1), return(0))
  
  
}

# Primjer za k=5, n=7, ocekivana vjerovatnoca: 1/7

mean(replicate(10000, kljucevi(3,7)))



# Zadatak 3 
#[Nezavisnost dogadjaja]



# Na turniru treba odigrati tri partije protiv sampiona A i nesto slabijeg
# igraca B. po jednoj od sema A-B-A ili B-A-B . Nagrada se dobija ako se
# pobijedi bar u dvije partije uzastopno. Koju semu odabrati?


# p-vjerovatnoca da se dobije A, q-vjerovatnoa da se dobije B (p<q)
# A-igrac dobija nagradu
# 1.sema: P(A)=pq(1-p)+pqp+(1-p)qp=(2-p)qp
# 2.sema: P(A)=qp(1-q)+qpq+(1-q)pq=(2-q)pq < (2-p)qp
# Zakljucujemo da treba izabrati prvu semu.

# Provjeravamo simulacijama

sema1<-function(p,q){
  
  # p- vjerovatnoca da se pobijedi A
  # q- vjerovatnoca da se pobijedi B
  
  # Biramo tri slucajna broja iz intervala [0,1] koji predstavljaju tri odgirane
  # partije. Npr. ako pogodimo interval [0,p] dobili smo igraca A i slicno za B.
  
  
  x<-runif(3, 0, 1)
  
  ifelse( (x[1]<p & x[2]<q) | (x[2]<q & x[3]<p), return(1), return(0) )
  
}

sema2<-function(p,q){
  
  x<-runif(3, 0, 1)
  
  ifelse( (x[1]<q & x[2]<p) | (x[2]<p & x[3]<q), return(1), return(0) )
  
  
}

# Provjeravamo koja je sema bolja, tj. u kojem slucaju nam je pobjeda 
# vjerovatnija:

# Uzmimo p=0.4, q=0.7 (Bitno da je p<q, u uvodnom dijelu smo vidjeli da ne 
# zavisi od konkretnih vrijednosti)

prva<-replicate(1000, sema1(0.4,0.7))
druga<-replicate(1000, sema2(0.4,0.7))

mean(prva)/mean(druga)




# Zadatak 4


# Tri strijelca nezavisno jedan od drugog gadjaju u cilj  po jednom, pogadjajuci
# ga sa vjerovatnocama 4/5, 3/4, 2/3 respektivno. Ako su postigli jedan pogodak,
# naci vjerovatnocu da je treci strelac promasio. Provjeriti rezultat
# simulacijom.

# Resenje: 
# A-treci strijelac je promasio 
# B-postigli su tacno jedan pogodak
# Po formuli za uslovnu vjerovatnocu:

#(4/5*1/4*1/3+1/5*3/4*1/3)/(4/5*1/4*1/3+1/5*3/4*1/3+1/5*1/4*2/3) ~ 0.7778

strijelci<-function(){
  
  # Racunamo samo slucajeve kada tacno jedan od 3 igraca postigne pogodak
  
  x<-runif(3, 0, 1)
  
  if(x[1]<4/5 & x[2]>3/4 & x[3]>2/3)      return(1)
  else if(x[1]>4/5 & x[2]<3/4 & x[3]>2/3) return(2)
  else if(x[1]>4/5 & x[2]>3/4 & x[3]<2/3) return(3)
  else                                    return(0)
  
  
}

r<-replicate(100000, strijelci())
sum(r==1 | r==2)/sum(r==1 | r==2 | r==3)


# Zadatak 5 [ Formula potpune vjerovatnoce ]


# U jednom paketu je a kaseta sa ozbiljnom i b kaseta sa zabavnom muzikom, a u
# drugom c kaseta sa ozbiljnom i d sa zabavnom muzikom. Na slucajan nacin se iz
# svakog paketa bira po jedna kaseta i uzajamno im se zamijene mjesta. Zatim se
# iz prvog paketa bira kaseta. Kolika je vjerovatnoca da je izabrana kaseta sa
# ozbiljnom muzikom?



# Zadatak 6 [ Bajesova teorema ]



# Vjerovatnoca da se knjiga nalazi u biblioteci je p. Ako je knjiga u
# biblioteci, sa istom vjerovatnocom se nalazi na jednoj od n polica. Pregledano
# je m (m<n) polica i knjiga nije nadjena. Kolika je sada vjerovatnoca da je
# knjiga u biblioteci.

# ( Zadatke 5 i 6 radimo samo teorijski, bez simulacija )




# Zadatak 7 [Monty Hall problem]



# Postavka problema: Pretpostavimo da ste u igri i dat vam izbor od troje vrata:
# iza jednih je automobil, a iza preostalih su koze. Vi birate vrata, recimo vrata 1, a domacin
# koji zna sta je iza vrata otvara druga vrata iza kojih je koza. Onda vam
# ponudi da promijenite odluku i da izaberete druga neotvorena vrata. Da li je u
# vasu korist da promijenite izbor?

# Sta nam govori intuicija?

# Insert iz serije "Brojevi" : 

# https://www.youtube.com/watch?v=P9WFKmLK0dc&feature=youtu.be


# Simulacija Monty Hall problema 


monty.hall<-function(){

doors<-c("A", "B", "C")

car<-sample(doors, 1)
pick<-sample(doors)[1]

open<-sample(doors[which(doors!=car & doors!=pick)],1)

switchyes<-doors[which(doors!=pick & doors!=open)]

ifelse(car==switchyes, return("yes"), return("no"))


}

# Racunamo frekvenciju pogodataka ako smo promijenili izbor

r<-replicate(100000, monty.hall())
mean(r=="yes")
mean(r=="no")


# Razmotrimo ovu vjerovatnocu. Uvedimo hipoteze:

# Hi<-kola su iza i-tih vrata, i=1,2,3
# P(Hi)=1/3 za sve i=1,2,3
# B- B su vrata koja otvara domacin
# P(B|H1)=1/2
# P(B|H2)=0
# P(B|H3)=1
# P(B)=P(H1)P(B|H1)+P(H2)P(B|H2)+P(H3)P(B|H3)=1/3*1/2+1/3=1/2

# Iskoristimo Bjesovu teoremu:

# P(H1|B)=P(B|H1)P(H1)/P(B)=(1/2*1/3)/ 1/2=1/3

# Dobijamo da treba da promijenimo odluku pri zadatim uslovima. U tom slucaju 
# pogodicemo poziciju kola sa vjerovatnocom 2/3, sto su simulacije pokazale.


# Jos zadataka iz uslovne vjerovatnoce

# Zadatak 8 [Gardnerov zadatak]


# Gospodin Smit ima dvoje djece. Bar jedno od njih je djecak. Kolika je
# vjerovatnoca da su oba djeteta djecaci ako:

# a) nema dodatnih informacija
# b) zna se da je starije dijete djecak


# Zadatak 9

# U red sa 10 sjedista na slucajan nacin sjedaju osobe X, Y i Z. Izracunati
# vjervatnocu da osoba Z sjedne izmedju osoba X i Y ako se zna da X i Y ne sjede
# jedna do druge.


xyz<-function(){
  
  red<-sample(1:10, replace = FALSE)
  
  # neka je X-1, Y-2, Z-3
  # trazimo pozicije osoba X, Y i Z 
  # odgovaraju nam rasporedi X-Z-Y i Y-Z-X (ne nuzno susjedna sjedista)
  
  # funckija which() vraca poziciju elementa u vektoru koji zadovoljava zadati
  # uslov
  
  x<-which(red == 1)
  y<-which(red == 2)
  z<-which(red == 3)
  
  ifelse((x<z & z<y) | (y<z & z<x), return(1), return(0) )
  
}
 
mean(replicate(1000, xyz()))

# Napomena: Ovaj poziv nam daje vjerovatnocu dogadjaja A: Z sjedi izmedju X i Y.
# Neka je B: X i Y ne sjede jedno do drugog
# Kako je A podskup od B, P(A|B)=P(A)/P(B)
# Za simulaciju B samo cemo modifikovati funkciju xyz()

x_y<-function(){
  
  red<-sample(1:10)
  
  x<-which(red==1)
  y<-which(red==2)
  z<-which(red==3)
  
  ifelse(abs(y-x)==1, return(0), return(1))
  
}

mean(replicate(10000,x_y()))

# procjenjujemo uslovnu vjerovatnocu

sum(replicate(10000,xyz()))/sum(replicate(10000,x_y()))

# Umjesto sum u ovom pozivu, mogli smo da stavimo i mean(). Zasto?
















































