Sei sulla pagina 1di 17

Introduzione ai metodi Monte Carlo e distribuzioni cam-

pionarie
1. Cenno sui metodi Monte Carlo
Le tecniche di simulazione, in statistica e in altri ambiti, sono fortemente legate al calcolo
automatico e agli elaboratori elettronici. Simulare un processo significa sperimentare lo
stesso processo in condizioni analoghe un gran numero di volte, rilevando ogni volta lo
stato finale del sistema. Se quest’ultimo è esprimibile da variabili numeriche, una prima
sintesi della simulazione è data, ad esempio, dalla media aritmetica degli stati e dalla
loro varianza. Questa tecnica prende il nome di metodo “Monte Carlo”, termine che fu
inizialmente utilizzato con riferimento alle dinamiche del gioco d’azzardo.
Gli studi di simulazione possono permetterci di apprezzare alcune delle proprietà
di distribuzioni campionarie ricavate per via teorica. Soprattutto, essi permettono di
valutare il comportamento di statistiche (funzioni di dati campionari), nel contesto del
principio del campionamento ripetuto, quando sia difficile o impossibile farlo per via
analitica. Il principio del campionamento ripetuto consiste nell’usare come riferimen-
to per l’inferenza la distribuzione campionaria di una statistica (di uno stimatore, in
particolare). Ad esempio, la stima della vera e ignota proporzione di pezzi difettosi in
un processo produttivo è data da θ̂ = y/n, dove y è il numero di pezzi difettosi e n è
la numerosità di un campione casuale di pezzi; essendo y una determinazione di una
variabile casuale, allora anche θ̂ = y/n lo è. Pertanto si adotta il criterio di valutare l’a-
deguatezza di θ̂ cosiderandolo come determinazione di una v.c. e studiando le proprietà
di tale variabile. Si può simulare dalla distribuzione campionaria di una statistica
• simulando l’estrazione dal campione, ovvero ottenendo una n-pla di valori y1 , . . . , yn ,
come determinazioni di una data v.a.;
• calcolando la statistica di un campione casuale di pezzi sul campione simulato;
• ripetendo i primi due passi un gran numero di volte, N.
Si ottiene cosı̀ un campione di ampiezza N dalla distribuzione campionaria della stati-
stica. La distribuzione campionaria della statistica di interesse dovrebbe, a rigore, essere
valutata con riferimento a tutti i possibili campioni, cosa palesemente impossibile nel
caso di popolazioni infinite, e quasi sempre impraticabile anche nel caso di popolazioni
finite. Per questa ragione ciò che si fa di solito è esaminare il valore della statistica per
un numero finito, ma molto ampio, di replicazioni di campioni. Si ottiene in questo
modo una descrizione (approssimata), detta di “Monte Carlo”, della sua distribuzio-
ne. Il numero di replicazioni sufficiente dipende dal problema in esame; di solito, per
semplici problemi, si pone N = 1000. Utilizzeremo questa tecnica per illustrare alcuni ri-
sultati teorici noti riguardanti la distribuzione della media campionaria e della varianza
campionaria. Tuttavia, come accennato in precedenza, gli studi di simulazione vengo-
no spesso utilizzati in problemi di inferenza riguardo statistiche campionarie per cui i
risultati teorici non sono noti o non sono applicabili perchè sono presenti condizioni

1
diverse da quelle teoriche, o se si riscontrano problemi nei dati (ad esempio, la ridotta
numerosità campionaria, la presenza di valori anomali, errori nelle assunzioni riguardo
il campionamento o la distribuzione della variabile di interesse nella popolazione).

2. Distribuzione campionaria della media


La media campionaria X = n−1 ∑in=1 Xi per un campione i.i.d. di n valori da una popola-
zione gaussiana di media µ e varianza σ2 , segue una legge N (µ, σ2 /n). Questo risultato
è valido solo asintoticamente se n tende ad infinito, se il campionamento avviene da
altre distribuzioni. Tuttavia, per n sufficientemente grande, la legge N (µ, σ2 /n) fornisce
una approssimazione della vera legge di X̄, in virtù del Teorema del Limite Centrale.
Si consideri il caso molto semplice in cui si vuole ottenere la distribuzione di cam-
pionamento di x̄ per un campione casuale di dimensione 30 quando nella popolazione
la variabile X è
(i) X ∼ N (0, 1);

(ii) X ∼ R(0, 1).


 
1 1
Nel primo caso X ha distribuzione esatta N (0, 1/n); nel secondo caso X ∼ ˙N 2 , 12n
, e ci
aspettiamo che l’approssimazione sia soddisfacente anche per n moderatamente elevato
(la R(0, 1) è simmetrica e l’approssimazione alla gaussiana che deriva dal teorema del
limite centrale è accettabile anche per n non troppo elevato).
Se volessimo verificare tale risultato atrraverso uno studio di simulazione, potremmo
procedere come segue:
1. estraiamo un campione di dimensione n = 30 da una popolazione in cui la va-
riabile X è distribuita secondo il modello di interesse (per il nostro esempio, nel
caso (i) la gaussiana o, nel caso (ii), la Rettangolare) che deve essere completamente
noto (conosciamo infatti i parametri). Si noti che questo equivale a generare nu-
meri aleatori da una variabile casuale che ha distribuzione uguale a quella della
popolazione. L’operazione di campionamento casuale semplice in effetti equivale
a estrarre un numero casuale da una variabile aleatoria distribuita come X.
2. calcoliamo la statistica di interesse (la media in questo caso) da tale campione;
3. ripetiamo i passi 1) e 2) un elevato numero di volte (ad esempio 1000).
Disponiamo ora di N medie campionarie ottenute da diversi campioni e quindi deter-
minazioni della distribuzione di X̄ al variare delle n-ple campionarie. Possiamo, quindi,
confrontarle con la distribuzione teorica (di cui conosciamo i parametri, almeno in questo
caso). Utilizzeremo gli usuali strumenti statistici:
• possiamo calcolare la media delle medie campionarie che darebbe un’approssimazione
del valore atteso della variabile aleatoria media campionaria. La teoria ci dice che do-
vrebbe essere pari al valor medio della popolazione. Poichè noi abbiamo fatto solo

2
1000 replicazioni (invece di infinite) esso sarà molto vicino ma non uguale. Si noti
che aumentando il numero di replicazioni l’approssimazione migliora.
• possiamo calcolare la varianza della media campionaria;
• possiamo ottenere il grafico della distribuzione dei dati simulati (un istogramma
con molti breaks o anche un density plot).
# CASO (i)
R <- 1000 #numero di replicazioni
n <- 30 #dimensione del campione
medie = vector(mode = "numeric", length = R)
for (i in 1:R) {
x <- rnorm(n)
medie[i] <- mean(x)
}
mean(medie)

## [1] 0.004520938

var(medie)

## [1] 0.03574498

# distribuzione della media campionaria


hist(medie, breaks = 30, prob = TRUE)
# distribuzione teorica esatta
curve(dnorm(x, mean = 0, sd = sqrt(1/n)), col = 2, lwd = 2, add = T)

Histogram of medie
2.0
1.5
Density

1.0
0.5
0.0

−0.6 −0.4 −0.2 0.0 0.2 0.4 0.6

medie

3
Si consideri ora il caso di campioni tratti da una R(0, 1), anche di numerosità piccola
(n < 10). Che conclusioni possiamo trarre?

Distribuzione campionaria della media per una popolazione esponenziale


Si considerino X1 , . . . , Xn , n = 9, da una popolazione esponenziale con λ = 2. Qual
è la distribuzione della media campionaria? Come valutiamo l’approssimazione
gaussiana?
n = 9
lambda = 2
# parametri per l'approssimazione normale
mu = 1/lambda
sigma2 = (1/lambda^2)/n

R <- 10000
medie = vector(mode = "numeric", length = R)
for (i in 1:R) {
x <- rexp(n, lambda)
medie[i] <- mean(x)
}
hist(medie, breaks = 30, prob = TRUE, main = " ")
# distribuzione teorica: Gamma(n, n*lambda)
curve(dgamma(x, n, n * lambda), type = "l", add = T)
# distribuzione approssimata: N(mu, sigma2)
curve(dnorm(x, mean = mu, sd = sqrt(sigma2)), col = 3, add = T, lwd = 2)
2.5
2.0
1.5
Density

1.0
0.5
0.0

0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4

medie

4
3. Distribuzione campionaria della varianza
Utilizziamo lo stesso schema di simulazione per verificare alcuni risultati teorici sulla
distribuzione campionaria della per una popolazione normale. Consideriamo un cam-
pione casuale X1 , X2 , . . . Xn da una gaussiana di media e varianza fissate (consideriamo
una numerosità non elevata). Valutiamo la distribuzione della varianza campionaria

∑in=1 ( Xi − X̄ )2
S2 =
n−1

che sappiamo essere uno stimatore non distorto della varianza della popolazione. Con-
frontiamo inoltre questa statistica con la statistica S2 = ∑in=1 ( Xi − X̄ )2 /n, che invece è
uno stimatore distorto di σ2 .

#numero di replicazioni
R <- 1000
#dimensione del campione
n <- 8
#parametri
mu<-5
sigma<-2

#si predispone il vettore dove salvare i valori della statistica


S2 <- S2nc <- vector(mode="numeric", length=R)
for(i in 1:R)
{
x <- rnorm(n, mu, sigma)
S2[i] <- var(x)
S2nc[i] <- S2[i]*(n-1)/n
}
#confronto grafico
par(mfrow=c(1,2))
hist(S2, prob=TRUE, breaks=30, main="S2")
hist(S2nc, prob=TRUE, breaks=30, main="S2nc")
#media del campione di S2
mean(S2)

## [1] 3.96711

#media del campione di S2nc (var. campionaria non corretta)


mean(S2nc)

## [1] 3.471221

5
S2 S2nc

0.25
0.20

0.20
0.15

0.15
Density

Density
0.10

0.10
0.05

0.05
0.00

0.00
0 2 4 6 8 10 14 0 2 4 6 8 10

S2 S2nc

Nell’ipotesi che il modello della popolazione sia normale, sappiamo che la varian-
za campionaria S2 ha distribuzione di probabilità proporzionale a quella di una chi-
quadrato con n − 1 gradi di libertà:

σ2 2
S2 ∼ χ .
n − 1 n −1

σ2
Verifichiamo questo risultato, osservando che se Y ∼ χ2n−1 e X = n−1 Y, allora

n−1 n−1
 
f X (x) = fY x
σ2 σ2

hist(S2, prob=TRUE, breaks=30, ylab="densità", main=" ")


curve(((n-1)/sigma^2) * dchisq(x * ((n-1)/sigma^2), df = n - 1),
add = TRUE, col=4, lwd=2, main="")

6
0.20
0.15
densità

0.10
0.05
0.00

0 2 4 6 8 10 12 14

S2

Esercizi
1. Si conduca un piccolo studio di simulazione simile a quello visto nella Sezione
2. per valutare la distribuzione della media campionaria per un campione di
ampiezza n tratto da X ∼ N (µ, σ2 ), con diversi valori dei parametri. Si provi
anche a far variare il numero di replicazioni R. Si commentino i risultati.
2. Si definisca ora una funzione che attua lo studio Monte Carlo dell’esercizio 1.,
che abbia come argomenti R, n, µ e σ2 .
3. Si valuti la media e la distribuzione di S2 e Snc
2 al variare di n (n < 30) quando

X è normale. Commentare i risultati.

7
Stimatori e loro proprietà, funzione di verosimiglianza

1. Stimatori della media di una popolazione


La teoria statistica ci dice che la media campionaria è un eccellente stimatore della media
di una popolazione. Tuttavia è interessante verificare le proprietà di alcuni stimatori
alternativi mediante uno studio di simulazione. Per stimare la media a partire da un
campione casuale di n elementi tratto da una gaussiana consideriamo i seguenti stimatori
(comunque tutti dotati di qualche ragionevolezza):

Stimatore 1: la media aritmetica di tutti i dati campionari;

Stimatore 2: la semisomma del minimo e del massimo dei dati campionari;

Stimatore 3: la media dei dati escludendo i due più piccoli e i due più grandi ottenendo
la media sfrondata (trimmed).

Per un confronto tra i primi due stimatori proposti potremmo descrivere le loro ca-
ratteristiche (la distribuzione, la media e l’errore quadratico medio) simulando molte
replicazioni di un campione da una N (µ, σ2 ). Poniamo n = 10 e fissiamo µ = 5 e σ2 = 4.
Lo studio Monte Carlo, come già osservato in precedenza, si realizza secondo i seguenti
passi:

(i) estrazione di un campione pseudo-casuale di dimensione 10 da una gaussiana di


media 5 e varianza 4

(ii) calcolo delle stime mediante gli Stimatori 1 e 2

I passi (i) e (ii) andranno ripetuti un elevato numero di volte: in questo modo si avranno
molte repliche dei valori della stima ottenuti applicando gli Stimatori 1 e 2 ai campioni
pseudo-casuali. Si noti che è possibile condurre lo studio di simulazione poiché sono
noti i valori dei parametri della distribuzione da cui si simula.

#numero di replicazioni
R=10000
#ampiezza del campione
n=10
#parametri
mu=5
sig2=4

#vettori delle stime


stima1 <- stima2 <- vector(mode="numeric", length=R)
for (i in 1:R)

8
{
y=rnorm(n=n,mean=mu,sd=sqrt(sig2))
stima1[i]=sum(y)/n #stimatore 1
stima2[i]=(max(y)+min(y))/2 #stimatore 2
}
mean(stima1)

## [1] 4.99568

var(stima1)

## [1] 0.3986426

mean((stima1-mu)^2) #MSE(T1)

## [1] 0.3986214

mean(stima2)

## [1] 5.003039

var(stima2)

## [1] 0.739404

mean((stima2-mu)^2) #MSE(T2)

## [1] 0.7393392

boxplot(cbind(stima1,stima2), main="")

9
8
6
4
2

stima1 stima2

Come si vede dal grafico lo Stimatore 1 è meno variabile e quindi è da preferire allo
Stimatore 2 (almeno per n=10), essendo molto vicina a zero la distrosione E( T ) − µ per
entrambi gli stimatori.

Dati contaminati. Si può procedere analogamente con gli altri stimatori e alla fine
dovremmo poter concludere che il migliore stimatore della media di una popolazione
gaussiana è proprio la media campionaria.
Si immagini ora che la nostra popolazione non rispecchi esattamente quello che ab-
biamo assunto. Crediamo di campionare da una popolazione gaussiana ma in realtà per
qualche motivo la popolazione contiene una piccola percentuale di valori (diciamo 1 su
100) che provengono da una diversa popolazione la cui media è molto più elevata. In
questo caso si parla di dati contaminati che si compongono di una parte prevalente e di
una parte contaminante di proporzione piccola e (in questo caso pari a 0.01).
Immaginiamo però che il nostro intento sia sempre quello di stimare la media del-
la gaussiana che ha generato la maggior parte dei dati. A tal fine si propongano lo
Stimatore 1 (x̄) e lo Stimatore 3 (media sfrondata).
Impostiamo un piccolo studio di simulazione in cui si genera un campione di n =
100 unità che provengano da una gaussiana di media µ = 5 e varianza σ2 = 9, con
probabilità 1 − e = 0.99, e da una gaussiana di media ξ = 60 e uguale varianza, con
probabilità pari a e = 0.01. Vediamo come generare dei dati contaminati in R:

#dimensione del campione


n=100
#media della gaussiana che genera la "maggior" parte dei dati
mu=5
#media della gaussiana che genera la "minor" parte dei dati

10
xi=60
#varianza delle popolazioni
sig2 <- 9
#percentuale di contaminazione
epsilon=0.01

#numerosità dati generati da N(5,9)


n1 <- rbinom(1, size=n, prob=1-epsilon)
n2 <- n-n1
#Nota: non è detto che n2>0!
n2

## [1] 1

#generiamo il campione
y <- c(rnorm(n1, mu, sqrt(sig2)), rnorm(n2, xi, sqrt(sig2)))

Vediamo come calcolare la media sfrondata in R:

##Assumiamo che il nostro campione sia dato dagli interi da 1 a 20


y=c(1:10, 20:11)
n=length(y)
# ordiniamo il campione
y=sort(y)
y

## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

#Togliamo le due osservazioni più piccole e le due più grandi


y.new=y[-c(1,2,n-1,n)]
y.new

## [1] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

media.trimm <- mean(y.new)


media.trimm

## [1] 10.5

Utilizziamo la funzione di R per calcolare la media sfrondata.

#definiamo la percentuale di osservazioni "più piccole" e


#"più grandi" che vogliamo rimuovere dal campione.

11
perc.trimm <- 2/n
media.trimmR <- mean(y, trimm=perc.trimm)
media.trimmR

## [1] 10.5

Ora impostiamo lo studio di simulazione vero e proprio.

#numero di repliche Monte Carlo


R <- 10000
#dimensione del campione
n=100
mu=5
xi=60
sig2 <- 9
epsilon=0.01
#percentuale di trimming
perc.trimm <- 2/n

stimatore1 <- stimatore3 <- N2 <- vector(mode="numeric", length=R)

for(i in 1:R)
{
n1 <- rbinom(1, size=n, prob=1-epsilon)
n2 <- n-n1
N2[i] <- n2
y <- c(rnorm(n1, mu, sqrt(sig2)), rnorm(n2, xi, sqrt(sig2)))
stimatore1[i] <- mean(y)
stimatore3[i] <- mean(y, trim=perc.trimm)
}

mean(stimatore1)

## [1] 5.562324

mean(stimatore3)

## [1] 5.122968

par(mfrow=c(1,2))
hist(stimatore1, prob=TRUE, breaks=30)
hist(stimatore3, prob=TRUE, breaks=30)

12
Histogram of stimatore1 Histogram of stimatore3

0.7

1.2
0.6

1.0
0.5

0.8
0.4
Density

Density

0.6
0.3

0.4
0.2

0.2
0.1
0.0

0.0
4 5 6 7 8 9 4 5 6 7 8

stimatore1 stimatore3

Si è verificato quindi che lo stimatore 3 si rivela migliore se l’obiettivo è stimare la


media della maggior parte dei dati. Infatti se la nostra assunzione sulla popolazione
(o sul modello che ha generato i dati) non è corretta può accadere che lo stimatore che
sappiamo essere ottimo si comporti molto male.

2. La funzione di verosimiglianza
Stima di massima verosimiglianza del parametro di una Bernoulliana.

È noto che la stima di massima verosimiglianza del parametro p di una Bernoulliana


è la proporzione campionaria, ovvero la proporzione di successi nel campione. Possiamo
verificare che si tratta di un buon stimatore e che se n è grande lo stimatore si distribuisce
come una gaussiana di opportuni parametri.
Il seguente codice calcola la proporzione campionaria su ciascun campione di n valori
generati da una Bernoulliana Be( p), e successivamente calcola media e varianza del
campione delle proporzioni campionarie. La teoria ci dice che E( X̄ ) = p e Var ( X̄ ) =
p(1 − p)/n.

R = 1000
n = 10
p = 0.3
p * (1 - p)/n
## [1] 0.021

13
pml = vector(mode = "numeric", length = R)
for (i in 1:R) {
y = rbinom(n, 1, p)
pml[i] = mean(y)
}
mean(pml)

## [1] 0.2937

var(pml)

## [1] 0.02061092

Consideriamo un n elevato, per verificare l’approssimazione gaussiana con media p


e varianza p(1 − p)/n:

R = 1000
n = 100
p = 0.3
pml = vector(mode = "numeric", length = R)
for (i in 1:R) {
y = rbinom(n, 1, p)
pml[i] = mean(y)
}
mean(pml)

## [1] 0.30142

var(pml)

## [1] 0.002019203

# distribuzione dello stimatore


hist(pml, breaks = 30, prob = T)
curve(dnorm(x, p, sqrt(p * (1 - p)/n)), col = 2, lwd = 3, add = T)

14
Histogram of pml

10
8
6
Density

4
2
0

0.20 0.25 0.30 0.35 0.40 0.45

pml

Lo studio può essere completato valutando questo risultato al variare di p e n.

Possiamo ottenere il grafico della funzione di verosimiglianza per un parametro a


partire da un campione dato. Consideriamo ad esempio i seguenti dati relativi ai tempi
trascorsi (in anni) prima che si verifichi un guasto ad una linea di autovetture:

1.76 1.44 1.66 0.99 6.34 0.97 8.51 5.27 7.06 10.78 3.34 6.53

Si ritiene plausibile che i guasti avvengano secondo un processo di Poisson. Si vuole sti-
mare il parametro λ che riguarda l’intensità di tale processo. Possiamo quindi ipotizzare
che i tempi siano determinazioni di una variabile casuale esponenziale il cui parametro
è appunto λ. La funzione di log-verosimiglianza per il campione è:
n n n
l (λ) = log L(λ) = log ∏ λe −λxi
= ∑ log(λe −λxi
) = n log λ − λ ∑ xi
i =1 i =1 i =1

1
da cui si ottiene λ̂SMV = .

x=c(1.76, 1.44, 1.66, 0.99, 6.34, 0.97, 8.51, 5.27, 7.06, 10.78, 3.34, 6.53)

#definiamo una funzione che calcola la log-verosimiglianza


log.ver.exp=function(lambda, dati)
{

15
n=length(dati)
n*log(lambda)-lambda*sum(dati)
}
seq.lambda=seq(0.01,1,length=500)
#calcoliamo la funzione per i valori della sequenza
llik=log.ver.exp(lambda=seq.lambda, dati=x)
plot(seq.lambda, llik, type="l", ylab="log-verosimiglianza",
xlab=expression(lambda), main="campione esponenziale")

campione esponenziale
−30
−35
log−verosimiglianza

−40
−45
−50
−55

0.0 0.2 0.4 0.6 0.8 1.0

16
Esercizi
1. Ripetere lo studio di simulazione proposto nella Sezione 1., riguardante gli
stimatori 1 e 2, per diversi valori di µ e per diverse numerosità campionarie.
2. Valutare il comportamento degli stimatori media aritmetica e media sfron-
data assumento dati contaminati con uno studio di simulazione analogo a
quello proposto nella Sezione 1., utilizzando diverse numerosità campionarie,
diverse percentuali di contaminazione e di trimming.
3. Verificare con uno studio di simulazione che la varianza dello stimatore me-
πS2
diana campionaria quando si campiona da una gaussiana

è pari a 2n per cui
l’errore standard è approssimativamente pari a √πs .
2n

17

Potrebbero piacerti anche