Come notato da Henry , stai assumendo una distribuzione normale ed è perfettamente ok se i tuoi dati seguono una distribuzione normale, ma sarà errato se non puoi assumere una distribuzione normale per esso. Di seguito descrivo due diversi approcci che è possibile utilizzare per la distribuzione sconosciuta dati solo i punti dati x
e le stime di densità associate px
.
La prima cosa da considerare è esattamente cosa vuoi riassumere usando i tuoi intervalli. Ad esempio, potresti essere interessato agli intervalli ottenuti usando i quantili, ma potresti anche essere interessato alla regione a più alta densità (vedi qui o qui ) della tua distribuzione. Anche se questo non dovrebbe fare molta (o nessuna) differenza in casi semplici come distribuzioni simmetriche e unimodali, questo farà la differenza per distribuzioni più "complicate". Generalmente, i quantili ti daranno un intervallo contenente la massa di probabilità concentrata attorno alla mediana (il medio della tua distribuzione), mentre la regione a più alta densità è una regione attorno alle modalità100α%della distribuzione. Ciò sarà più chiaro se si confrontano i due grafici nell'immagine seguente: i quantili "tagliano" la distribuzione in verticale, mentre la regione a più alta densità "la taglia" in orizzontale.
La prossima cosa da considerare è come affrontare il fatto che hai informazioni incomplete sulla distribuzione (supponendo che stiamo parlando di distribuzione continua, hai solo un mucchio di punti piuttosto che una funzione). Quello che potresti fare al riguardo è prendere i valori "così come sono", o usare un qualche tipo di interpolazione, o smoothing, per ottenere i valori "nel mezzo".
Un approccio sarebbe quello di usare l'interpolazione lineare (vedi ?approxfun
in R), o in alternativa qualcosa di più liscio come le spline (vedi ?splinefun
in R). Se si sceglie tale approccio, è necessario ricordare che gli algoritmi di interpolazione non hanno conoscenza del dominio dei dati e possono restituire risultati non validi come valori inferiori a zero, ecc.
# grid of points
xx <- seq(min(x), max(x), by = 0.001)
# interpolate function from the sample
fx <- splinefun(x, px) # interpolating function
pxx <- pmax(0, fx(xx)) # normalize so prob >0
Il secondo approccio che potresti prendere in considerazione è usare la densità del kernel / distribuzione della miscela per approssimare la tua distribuzione usando i dati che hai. La parte difficile qui è decidere l'ampiezza di banda ottimale.
# density of kernel density/mixture distribution
dmix <- function(x, m, s, w) {
k <- length(m)
rowSums(vapply(1:k, function(j) w[j]*dnorm(x, m[j], s[j]), numeric(length(x))))
}
# approximate function using kernel density/mixture distribution
pxx <- dmix(xx, x, rep(0.4, length.out = length(x)), px) # bandwidth 0.4 chosen arbitrary
Successivamente, troverai gli intervalli di interesse. Puoi procedere in modo numerico o mediante simulazione.
1a) Campionamento per ottenere intervalli quantili
# sample from the "empirical" distribution
samp <- sample(xx, 1e5, replace = TRUE, prob = pxx)
# or sample from kernel density
idx <- sample.int(length(x), 1e5, replace = TRUE, prob = px)
samp <- rnorm(1e5, x[idx], 0.4) # this is arbitrary sd
# and take sample quantiles
quantile(samp, c(0.05, 0.975))
1b) Campionamento per ottenere la regione a più alta densità
samp <- sample(pxx, 1e5, replace = TRUE, prob = pxx) # sample probabilities
crit <- quantile(samp, 0.05) # boundary for the lower 5% of probability mass
# values from the 95% highest density region
xx[pxx >= crit]
2a) Trova i quantili numericamente
cpxx <- cumsum(pxx) / sum(pxx)
xx[which(cpxx >= 0.025)[1]] # lower boundary
xx[which(cpxx >= 0.975)[1]-1] # upper boundary
2b) Trova numericamente la regione di massima densità
const <- sum(pxx)
spxx <- sort(pxx, decreasing = TRUE) / const
crit <- spxx[which(cumsum(spxx) >= 0.95)[1]] * const
Come puoi vedere nei grafici seguenti, in caso di distribuzione unimodale e simmetrica entrambi i metodi restituiscono lo stesso intervallo.
Ovviamente, potresti anche provare a trovare l' intervallo attorno a un valore centrale tale che e utilizzare un qualche tipo di ottimizzazione per trovare appropriato , ma i due approcci descritti sopra sembrano essere usati più comunemente e sono più intuitivi.100α%Pr(X∈μ±ζ)≥αζ