# analisi delle sei (n) scatole a mano a mano che
# osserviamo i colori delle palline
#
# G. D'Agostini, PED nov 2009
#---------------------------------------------------

n=6
prior.H       <- rep(1/n,n)        # prior
pW.dato.H     <- c(0:(n-1))/(n-1)  # likelihood W
pB.dato.H     <- 1 - pW.dato.H     # likelihood B

# Theorema di Bayes
bayes.6box <- function(pObs.dato.H, p.H) {
  # pObs.dato.H e' il 'vettore' delle prob. condizionate
  # p.H         e' il vettore delle prior
  posteriors = pObs.dato.H * p.H / sum(pObs.dato.H * p.H)
  return(posteriors)
}

# ora possiamo cominciare:

# inizialmente:
p.H <- prior.H
sum(p.H*pW.dato.H)  # prob. iniziale di W

# esce W:
p.H <- bayes.6box(pW.dato.H, p.H)
p.H
sum(p.H*pW.dato.H)  # previsione dellla prossima bianca

# ariesce W:
p.H <- bayes.6box(pW.dato.H, p.H)
p.H
sum(p.H*pW.dato.H)  # previsione dellla prossima bianca

# esce B:
p.H <- bayes.6box(pB.dato.H, p.H)
p.H
sum(p.H*pW.dato.H)  # previsione dellla prossima bianca

# etc. etc.

#---------------------------------------------------------------
# ovviamente poi si puo' pensare di fara un'altra function a cui
# diamo 'in pasto' l'intera sequenza...
analizza.seq <- function(ris, p.H) {
  nr <- length(ris)
  if (nr == 1) ris <- as.vector(ris) 
  for (i in 1:nr) {
    if (ris[i] == 0 || ris[i] == 'B' || ris[i] == 'b') {
      p.H <- bayes.6box(pB.dato.H, p.H)
    } else {
      p.H <- bayes.6box(pW.dato.H, p.H)
    }
  }
  return(p.H)
}

# ad es.
ris <- c(0,0,0,0)
p.H <- prior.H
p.H <- analizza.seq(ris, p.H)
p.H
ris <- c(ris,1)
p.H <- analizza.seq(ris, p.H)
p.H

sum(p.H*pW.dato.H)  # previsione dellla prossima bianca



