#--------------------------------------------------------------------------
# distribuzione geometrica che descrive il primo tentativo
# al quale si verifica un processo di Bernoulli di prob p
# (Nota: nella geometrica standard di R il nr aleatorio 
# e' pari al numero di volte in cui il successo non si e' verificato
# fino a quando esso si verifica per la prima volta, quindi x parte da 0.)
#
# GdA 19/2/09
#---------------------------------------------------------------------------
 
dgeom1 <- function(x, p) {
  if ( as.integer(x) == x && x > 0
       && p > 0 && p <= 1 )
    return( p*(1-p)^(x-1) )
  else
    return(0)
}
 
pgeom1  <- function(x, p) {
  if ( as.integer(x) == x && x > 0
       && p > 0 && p <= 1 )
    return( 1-(1-p)^x )
  else
    return(0)
}
 
rgeom1  <- function(n, p) {
  if ( as.integer(n) == n && n > 0
       && p > 0 && p <= 1)
    return( ceiling( log(runif(n), (1-p)) ) )
  else
    return(0)
}
 
qgeom1  <- function(P, p) {
  if (  P > 0 && P <= 1
       && p > 0 && p <= 1)
    return( ceiling( log(1-P, (1-p)) ) )
  else
    return(0)
}
 
 
# tests (da eseguire in modalita' interattiva)
# dgeom1(seq(10),1/2)
# pgeom1(seq(10),1/2)
 
# x <- rgeom1(10000, 1/18)
# mean(x)
# sd(x)
 
# seq(from=0.01, to=0.99, by=0.01) -> s
# qgeom1(s,1/8)
# qgeom1(0.95,s)
 
# confronto con pgeom standard.
# qgeom(s,1/8)
# qgeom(0.95,s)