




# Cas 4                                                                3.11.2017.



# Zadatak 1



# Sa vjerovatnocom 1/2 su postavili pare u jedan od 8 sanducica. Otvoreno je
# 7 sanducica i nije bilo para. Koja je vjerovatnoca da se nalaze u 8.?
# Simulirati taj dogadjaj N puta i pomocu simulacije ocijeniti vjerovatnocu.


# H1-pare se nalaze u nekom sanducetu
# H2-pare se ne nalaze ni u jednom sanducetu

# A- ne nalaze se u otvorenih 7 sanducica

# P(H1|A) je bas vjerovatnoca koja nam se trazi

# P(H1|A)=P(AH1)/P(A)=1/9

# Iz poslednje formule vidimo da cemo brojati takve dogadjaje gdje se novac
# nalazi u 8. sanducetu i dijeliti sa brojem ishoda gdje se novac ili nalazi u
# 8. ili ga nema uopste u sanducicima

# Mozemo problem da posmatramo i na sledeci nacin: Kako se sa vjerovatnocom 1/2
# stavljamo novac u jedan od 8 sanducica, sa istom vjerovatnocom nece biti novca
# u tih 8 sanducica. Uvedemo 8 imaginarnih sanducica koji predstavljaju taj
# drugi slucaj. Vjerovatnoca svakog sanducica, bilo da je imaginarni ili
# stvarni, bice 1/16. Odavde lako dolazimo do zakljucka da je trazena uslovna
# vjerovatnoca 1/9.


# 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.


# Funkciji sanduce() prosledjujemo broj simulacija N

sanduce <- function(N)
{
  q <- sample(1:9,
             size = N,
             prob = c(rep(1 / 16, 8), 1 / 2),
             replace = TRUE)
  
  return(sum(q == 8) / sum(q > 7))
  
}
sanduce(100000)


# [ Poredjenje zavisnih i nezavisnih dogadjaja ]


# Zadatak 2


# Na slucajan nacin biraju se dvije karte iz standardnog spila od 52 karte. Koja
# je vjerovatnoca da prva karte nije sa likom ( kralj, dama ili zandar) a da
# druga karte nije karta sa likom, ako:

# a) vratimo u spil prvu kartu prije izvlacenja druge
# b) ne vracamo prvu kartu prije izvlacenja druge


# Neka su A i B sledeci dogadjaji:
# A- prva izvucena karta nije sa likom
# B- druga karta je sa likom

# a) U ovom slucaju, kada izvlacimo karte sa vracanjem, A i B su nezavisni
# dogadjaji, pa je P(AB)=P(A)P(B)= 40/52 * 12/52 = 0.1775

# b) U slucaju bez vracanja, A i B nisu nezavisni dogadjaji pa vazi:
# P(AB)=P(A)P(B|A)= 40/52 * 12/51 = 0.1809


karte <- function(vracanje) {
  # spil karata s pravimo kao u zadatku sa jednog od prethodnih casova
  
  
  vrijednosti <- c("A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K")
  
  # Napomena: Svi elementi vektora ce se pretvoriti u tip prvog, tj. brojevi ce
  # se pretvoriti tip "character"
  
  boje <- c("t", "h", "k", "p")
  spil <- outer(vrijednosti, boje, FUN = "paste", sep = "")
  
  # print(spil)   matrica 13x4
  
  s <- sample(spil, 2 , replace = vracanje)
  
  prva <- which(spil == s[1])
  druga <- which(spil == s[2])
  
  
  
  if (prva %% 13 > 0 &
      prva %% 13 <= 10 &
      (druga %% 13 > 10 | druga %% 13 == 0))
    return(1)
  else
    return(0)
  
}

# Za domaci: Uradite simulaciju na drugi nacin, tako sto cete zanemariti boju
# karata.


# Sa vracanjem:

r1 <- replicate(1000000, karte(TRUE))
mean(r1)

# Bez vracanja:

r2 <- replicate(1000000, karte(FALSE))
mean(r2)

# posto je razlika u vjerovatnocama mala, aproksimacije nam ne daju dovoljno
# jasne rezultate posle malog broja simulacija, zbog toga je dato n=1000000


# Zadatak 3

# Pod pretpostavkom da su verovatnoce radjanja zenske i muske dece jednake,
# ispitati nezavisnost sledecih dogadjaja: A - nisu sva deca istog pola, B -
# medju decom najvise jedna devojcica. a) u porodici sa troje dece, b) u
# porodici sa cetvoro dece.

# Za domaci simulacija.


# Zadatak 4

# Poceci vjerovatnoce vezuju se za dva poznata mateticara, Paskala i Fermu.
# 1654. godine Paskal je pisao Fermi opisujuci kockarski problem. Naime,
# francuski plemic Gombaud se kockao i ulagao velike sume novca za odredjene
# ishode bacanja kockice. On je resavajuci neka dva problema zakljucio da su mu
# vjerovatnoce pobjede 2/3. Posle izvjesnog vremena shvatio je da gubi velike
# kolicine novca i pisao je Paskalu, koji je problem proslijedio Fermi.
# Problemi se sastoje u sledecem:


# 1) Koja je vjerovatnoca da se dobije bar jedna sestica u 4 bacanja kockice?
# 2) Bacamo dvije kockice istovremeno 24 puta. Koja je vjerovatnoca da su bar
#    pale dvije sestice.

# 1) 1-(5/6)^4=0.5177469 > 0.5  ( Zasto mozemo da mnozimo ove vjerovatnoce?)
# 2) 1-(35/36)^24=0.4914039 < 0.5



sestica <- function() {
  s <- sample(1:6, 4, replace = TRUE)
  
  if (any(s == 6))
    return (1)
  else
    return(0)
  
  # Napomena: U R-u nije potreban return, vraca se poslednji izraz u funkciji,
  # pa bi ekvivalentan poziv bio:
  
  # ifelse(any(s==6), 1 , 0 )
  
  
}

mean(replicate(10000, sestica()))

dupla.sestica <- function() {
  
  prva.kockica <- sample(1:6, 24, replace = TRUE)
  druga.kockica <- sample(1:6, 24, replace = TRUE)
  
  
  if (any(prva.kockica == 6 & druga.kockica == 6))
    return(1)
  else
    return(0)
  
  # Resenje sa for petljom :
  
  # for (i in 1:24) {
  #   if (prva.kockica[i] == 6 & druga.kockica[i] == 6)
  #     return(1)
  #   
  # }
  # 
  # return(0)
  
}

mean(replicate(10000, dupla.sestica()))


# Zadatak 4.1:

# Da li dva disjunktna dogadjaja A i B (definisana na istom prostoru 
# vjerovatnoca) sa strogom pozitivnom vjerovatnocom P(A),P(B)>0, mogu da budu
# nezavisni dogadjaji?


# Zadatak 5

# Iz segmenta [0, 1] se na slucajan nacin biraju dva broja nezavisno jedan od 
# drugog. Dogadjaj A je da je zbir brojeva manji od 1, a dogadjaj B da je 
# proizvod brojeva manji od 2/9. Odrediti vjerovatnoce dogadjaj A i B prvo 
# teorijski, a posle i napisati simulaciju za isto. Ispitati nezavisnost 
# dogajaja A i B (Monte Karlo metodom).

nezavisnost <- function()
{
  indikator.A <- 0
  indikator.B <- 0
  
  xy <- runif(2, 0, 1)  # dva slucajna broja iz intervala [0,1]
  if (xy[1] + xy[2] < 1)
  {
    indikator.A <- 1
  }
  if (xy[1] * xy[2] < 2 / 9)
  {
    indikator.B <- 1
  }
  indikator.presjeka = indikator.A * indikator.B
  
  return(c(indikator.A, indikator.B, indikator.presjeka))
}

rezultati <- rowMeans(replicate(100000, nezavisnost()))

rezultati

# Napomena: Kako nam funkcija nezavisnost() vraca vektor sa tri vrijednosti, 
# pozivom replicate(100000,nezavisnost()) dobijamo matricu 3X100000 rowMeans
# primijenjeno na ovu matricu ce da nam da srednju vrijednost po vrstama (suma
# svih vrijednosti u jednoj vrsti / n=100000)

# Sada hocemo da ispitamo nezavisnost.

rezultati[1]*rezultati[2]
rezultati[3]

# Nije ni priblizno jednako, pa ne mozemo da govorimo o nezavisnoti.




# [Slucajno lutanje po pravoj]


# Zadatak 6

# Cestita luta po pravoj i pravi jedan korak desno ili lijevo sa vjerovatnocom
# 0.5. Ako je pocetno stanje cestice u koordinatnom pocetku, iscrtati
# trajektoriju kretanja nakon N koraka.


cestica <- function(N)
{
  koraci <- sample(c(-1, 1), N, replace = TRUE)
  pozicija <- cumsum(koraci)
  plot(pozicija, type = 'o')
}
cestica(100)


# Zadatak 6 

# Slijepa kornjaca se nalazi na 14.5 cm od vode i na slucajan nacin pravi korake
# duzine 1cm ka vodi, odnosno od vode (krecuci se po pravoj liniji). Koraci su
# medjusobno nezavisni, a vjerovatnoca da ce kornjaca napraviti korak ka vodi je
# p, dok je vjerovatnoca da ce napraviti korak od vode 1-p ( 0<p<1). Kretanje se
# zavrsava kada kornjaca dodje do vode.
# a) Simulirati kretanje kornjace i nacrtati trajektoriju kretanja
# b) Ocijeniti vjerovatnocu da ce kornjaca posle N koraka doci do vode
# c) Teorijski, izracunati vjerovatnocu da ce kornjaca u nekom trenutku doci do
# vode.



kornjaca <- function(N, p) {
  
  rastojanje <- 14.5
  
  koraci <- sample(c(-1, 1), size = N, replace = TRUE, prob = c(p, 1 - p))
  
   # Drugi nacin:
   # koraci <- runif(N, 0, 1)
   # koraci[which(koraci < p)] <- -1
   # koraci[which(koraci >= p)] <- 1

  
  # Sjetite se trajektorije sa 2. casa i funckije cumsum()
  
  trajektorija <- rastojanje + cumsum(koraci)
  
  # Ako hocemo da prekinemo kretanje kad kornjaca dodje do vode, tj kad nam
  # trajektorija presjece nulu:
  
  if (!all(trajektorija > 0)) # ili if(any(trajektorija)<=0)
    
    trajektorija <- trajektorija[1:which(trajektorija == -0.5)[1]]
  
  # Crtamo trajektoriju:
  
  #plot(trajektorija, type = "o" , col = "blue")
  
  # Za drugi dio zadatka trebaju nam ishodi kod kojih posle N koraka dolazi do
  # vode
  
  ifelse(trajektorija[length(trajektorija)] < 0, 1, 0)
  
  # Ovdje vidimo da nije neophodno pisati return, vratice poslednji izraz 
  
  
}

# 2) Uzmimo neke konkretne vrijednosti za p i N


kornjaca(20, 0.7)

# Iskljuciti plot!!!

# p>0.5

mean(replicate(1000, kornjaca(1000, 0.7)))

# p<0.5

mean(replicate(1000, kornjaca(1000, 0.4)))


# Uporedite rezultate sa teorijskim.


### Slucajne velicine ###
















