# ampiezza della popolazione (studenti in aula)
N <- 26
# ampiezza del campione (numero di palline estratte)
n <- 5


# calcolo della taglia dei possibili campioni -----------------------------

# numero campioni ordinati senza ripetizione
factorial(N) / factorial(N - n)
# numero campioni ordinati con ripetizione
N^n
# numero campioni non ordinati senza ripetizione
choose(N, n)
# numero campioni non ordinati con ripetizione
choose(N + n - 1, n)


# campione osservato ------------------------------------------------------
# 1) PIO / APPLE / NO
# 2) RAFFAELE / ANDROID / SI
# 3) MORENA / APPLE / NO
# 4) CRISTINA / ANDROID / SI
# 5) MANISH / APPLE / SI

# vettore con gli identificativi delle unità della popolazione
id <- c("Cristina", "Desirè", "Morena",
        "Marco", "Claudia", "Giusy",
        "Berta", "Silvia", "Raffaele",
        "Lorenzo", "Davide", "Pio",
        "Carmen", "Gianluca", "Antonio D.",
        "Antonio B.", "Federico P.", "Manish",
        "Luigi C.", "Luca", "Valerio", "Tommaso",
        "Luigi S.", "Luigi V.", "Fabrizio", "Federico S.")
# vettore con il sistema operativo del telefono (apple vs android)
apple <- c("no", "sì", "sì", "sì", "sì",
           "sì", "sì", "sì", "no", "no",
           "no", "sì", "no", "no", "no",
           "no", "sì", "sì", "no", "no",
           "no", "no",
           "no", "sì", "sì", "no")

# caratteristiche della popolazione ---------------------------------------

# tabella di frequenza della variabile Apple
table(apple)
# "tabella di probabilità" della variabile Apple
# somiglia ad una Bernoulli?
prop.table(table(apple)) |> round(3)

# estrazione di un campione -----------------------------------------------

# imposto il seme (per assicurare la riproducibilità dell'esperimento)
set.seed(123)
# un esempio di campione osservato (estrazione con rimessa)
sample(id, size = 5, replace = TRUE)
# un altro esempio di campione osservato (estrazione con rimessa)
sample(id, size = 5, replace = TRUE)


# spazio campionario ------------------------------------------------------

# package che permette di ottenere l'elenco esaustativo di tutti
# i possibili campioni
library(gtools)

# spazio campionario nel caso di campionamento con rimessa
# (campioni ordinati)
# 
sc_ripet <- permutations(n = N,
                         r = n,
                         v = apple,
                         set = FALSE,
                         repeats.allowed = TRUE)
# numero di campioni dello spazio campionario
nrow(sc_ripet)
# regola calcolo combinatorio
N^n

# spazio campionario nel caso di campionamento senza rimessa
# (campioni ordinati)
sc_no_ripet <- permutations(n = N,
                            r = n,
                            v = apple,
                            set = FALSE,
                            repeats.allowed = FALSE)
# numero di campioni dello spazio campionario
nrow(sc_no_ripet)
# regola calcolo combinatorio
factorial(N) / factorial(N - n)

# trasformo gli oggetti matrice in oggetti data.frame
# per una più agevole manipolazione
sc_ripet <- data.frame(sc_ripet)
sc_no_ripet <- data.frame(sc_no_ripet)

# analisi del campione casuale --------------------------------------------

# DGP - Data Generating Process
prop.table(table(apple)) |> round(3)
# parametro del DGP
pi_greco <- prop.table(table(apple))[2]

# v.c. prima osservazione camionaria (campionamento con ripetizione) 
# NOTA: lo stesso vale anche per le altre osservazioni campionarie
sc_ripet$X1 |> table() |> prop.table() |> round(3)
# v.c. prima osservazione camionaria (campionamento senza ripetizione) 
# NOTA: lo stesso vale anche per le altre osservazioni campionarie
sc_no_ripet$X1 |> table() |> prop.table() |> round(3)


# variabile casuale binomiale ---------------------------------------------

# parametri del modello binomiale
n <- 10
pi_greco <- 0.5

# valori della variabile binomiale
x <- 0:n
# distribuzione di probabilità della binomiale
y <- dbinom(x, size = n, prob = pi_greco)
# tabella di probabilità della binomiale
cbind(x, y)


# forma della distribuzione binomiale -------------------------------------

# rappresentazione grafica
# NOTA: con pi_greco = 0.5 la distribuzione è sempre simmetrica
plot(x, y, type = "h", lwd = 3)

# se pi_greco < 0.5 la distribuzione è asimmetrica destra
# (è più probabile perdere che vincere perché si osservano
#  con maggiore probabilità meno successi)
y <- dbinom(x, size = n, prob = 0.15)
plot(x, y, type = "h", lwd = 3)

# se pi_greco > 0.5 la distribuzione è asimmetrica sinistra
# (è più probabile vincere che perdere perché si osservano
#  con maggiore probabilità più successi)
y <- dbinom(x, size = n, prob = 0.9)
plot(x, y, type = "h", lwd = 3)


# teorema del limite centrale ---------------------------------------------

# se n aumenta anche con pi_greco > 0.5 (o pi_greco > 0.5)
# la distribuzione tende a diventare simmetrica
n <- 20
x <- 0:n
y <- dbinom(x, size = n, prob = 0.9)
plot(x, y, type = "h", lwd = 3)

# più evidente se usiamo n = 30
n <- 30
x <- 0:n
y <- dbinom(x, size = n, prob = 0.9)
plot(x, y, type = "h", lwd = 3)

# oppure n = 50
n <- 50
x <- 0:n
y <- dbinom(x, size = n, prob = 0.9)
plot(x, y, type = "h", lwd = 3)

# o ancora n = 100
n <- 100
x <- 0:n
y <- dbinom(x, size = n, prob = 0.9)
plot(x, y, type = "h", lwd = 3)

# questo è più evidente se si taglia dalla rappresentazione la coda
# dove le probabilità sono praticamente nulle
plot(x[80:101], y[80:101], type = "h", lwd = 3)
