Intervalli di confidenza per i parametri di regressione: bayesiano vs. classico


15

Dati due array xey, entrambi di lunghezza n, ho un modello y = a + b * x e voglio calcolare un intervallo di confidenza del 95% per la pendenza. Questo è (b - delta, b + delta) dove b si trova nel solito modo e

delta = qt(0.975,df=n-2)*se.slope

e se.slope è l'errore standard nella pendenza. Un modo per ottenere l'errore standard della pendenza da R è summary(lm(y~x))$coef[2,2].

Supponiamo ora di scrivere la probabilità della pendenza data xey, moltiplicarla per un precedente "piatto" e utilizzare una tecnica MCMC per estrarre un campione m dalla distribuzione posteriore. Definire

lims = quantile(m,c(0.025,0.975))

La mia domanda: è (lims[[2]]-lims[[1]])/2approssimativamente uguale al delta come definito sopra?

Addendum Di seguito è riportato un semplice modello JAGS in cui questi due sembrano essere diversi.

model {
 for (i in 1:N) {
  y[i] ~ dnorm(mu[i], tau)
  mu[i] <- a + b * x[i]
 }
 a ~ dnorm(0, .00001)
 b ~ dnorm(0, .00001)
 tau <- pow(sigma, -2)
 sigma ~ dunif(0, 100)
}

Eseguo quanto segue in R:

N <- 10
x <- 1:10
y <- c(30.5,40.6,20.5,59.1,52.5,
       96.0,121.4,78.9,112.1,128.4)
lin <- lm(y~x)

#Calculate delta for a 95% confidence interval on the slope
delta.lm <- qt(0.975,df=N-2)*summary(lin)$coef[2,2]

library('rjags')
jags <- jags.model('example.bug', data = list('x' = x,'y' = y,'N' = N),
                   n.chains = 4,n.adapt = 100)
update(jags, 1000)
params <- jags.samples(jags,c('a', 'b', 'sigma'),7500)
lims <- quantile(params$b,c(0.025,0.975))
delta.bayes <- (lims[[2]]-lims[[1]])/2

cat("Classical confidence region: +/-",round(delta.lm, digits=4),"\n")
cat("Bayesian confidence region:  +/-",round(delta.bayes,digits=4),"\n")

E prendi:

Area di confidenza classica: +/- 4.6939

Regione di fiducia bayesiana: +/- 5.1605

Riesaminando questo più volte, la regione di confidenza bayesiana è costantemente più ampia di quella classica. Quindi questo è dovuto ai priori che ho scelto?

Risposte:


9

Il "problema" è nel precedente sigma. Prova un'impostazione meno istruttiva

tau ~ dgamma(1.0E-3,1.0E-3)
sigma <- pow(tau, -1/2)

nel tuo file jags. Quindi aggiorna un gruppo

update(10000)

prendi i parametri e riassumi la tua quantità di interesse. Dovrebbe allinearsi ragionevolmente bene con la versione classica.

Chiarimento: l'aggiornamento serve solo per assicurarti di arrivare dove vuoi, qualunque sia la scelta prima di decidere, anche se le catene per modelli come questo con priori diffusi e valori iniziali casuali impiegano più tempo a convergere. In problemi reali verifichi la convergenza prima di riassumere qualsiasi cosa, ma la convergenza non è il problema principale nel tuo esempio, non credo.


@Ringold, cosa ha funzionato? Il precedente su sigma o l'aggiornamento? O entrambi? Li hai testati separatamente?
Curioso

dovrebbe essere sigma <- pow(tau, -1/2)osigma <- 1/sqrt(tau)
Curioso il

@Tomas, giusto. Errore di battitura.
conjugateprior il

Anche se francamente potrebbe essere la fonte della differenza poiché è nel codice originale ...
conjugateprior

6

Se si campiona dalla parte posteriore di b | y e calcola lims (come definito) dovrebbe essere uguale a (b - delta, b + delta). In particolare, se si calcola la distribuzione posteriore di b | y sotto un piano precedente, è uguale alla distribuzione di campionamento classica di b.

Per maggiori dettagli consultare: Gelman et al. (2003). Analisi dei dati bayesiani. CRC Press. Sezione 3.6

Modificare:

Ringold, il comportamento osservato da te è coerente con l'idea bayesiana. Il Bayesian Credible Interval (CI) è generalmente più ampio di quelli classici. E la ragione è, come hai indovinato correttamente, che gli hyperpriors hanno preso in considerazione la variabilità a causa di parametri sconosciuti.

Per scenari semplici come questi (NON IN GENERALE):

CI Baysiano> CI Bayesiano Empirico> CI Classico; > == più ampio


Ho aggiunto un po 'di codice usando JAGS dove sembra che stia ottenendo una risposta diversa. Dov'è il mio errore? Succede a causa dei priori?
Ringold,

Ora sono confuso. Per prima cosa hai detto che la distribuzione posteriore di b | y sotto un piano precedente è la stessa della classica distribuzione campionaria di b. Quindi hai detto che il CI bayesiano è più largo di quello classico. Come potrebbe essere più ampio se le distribuzioni sono uguali?
Ringold,

Scusa, avrei dovuto dire cosa suggeriva @CP nei suoi commenti. Teoricamente, sotto un precedente piatto e un CI classico sono gli stessi, ma non puoi farlo praticamente in JAGS a meno che tu non usi un precedente molto molto diffuso come CP suggerito e usi molte iterazioni MCMC.
suncoolsu,

Ho unito i tuoi account in modo che tu possa modificare le tue domande e aggiungere commenti. Tuttavia, registra il tuo account facendo clic qui: stats.stackexchange.com/users/login ; puoi utilizzare Gmail OpenID per farlo in pochi secondi e non perderai più il tuo account qui.

Grazie, mi sono registrato. E molte grazie a coloro che hanno risposto a questa domanda. Proverò prima la gamma.
Ringold,

5

Per i modelli gaussiani lineari è meglio usare il pacchetto bayesm. Implementa la famiglia di priori semi-coniugati, e il priore Jeffreys è un caso limite di questa famiglia. Vedi il mio esempio di seguito. Queste sono simulazioni classiche, non è necessario utilizzare MCMC.

Non ricordo se gli intervalli di credibilità sui parametri di regressione siano esattamente gli stessi degli intervalli di confidenza dei minimi quadrati, ma in ogni caso sono molto vicini.

> # required package
> library(bayesm)
> # data
> age <- c(35,45,55,65,75)
> tension <- c(114,124,143,158,166)
> y <- tension
> # model matrix
> X <- model.matrix(tension~age)
> # prior parameters
> Theta0 <- c(0,0)
> A0 <- 0.0001*diag(2)
> nu0 <- 0
> sigam0sq <- 0
> # number of simulations
> n.sims <- 5000
> # run posterior simulations
> Data <- list(y=y,X=X)
> Prior <- list(betabar=Theta0, A=A0, nu=nu0, ssq=sigam0sq)
> Mcmc <- list(R=n.sims)
> bayesian.reg <- runireg(Data, Prior, Mcmc)
> beta.sims <- t(bayesian.reg$betadraw) # transpose of bayesian.reg$betadraw
> sigmasq.sims <- bayesian.reg$sigmasqdraw
> apply(beta.sims, 1, quantile, probs = c(0.025, 0.975))
[,1] [,2]
2.5% 53.33948 1.170794
97.5% 77.23371 1.585798
> # to be compared with: 
> frequentist.reg <- lm(tension~age)

3

Dato che la semplice regressione lineare è analiticamente identica tra l'analisi classica e bayesiana con il precedente di Jeffrey, entrambi analitici, sembra un po 'strano ricorrere a un metodo numerico come MCMC per eseguire l'analisi bayesiana. MCMC è solo uno strumento di integrazione numerica, che consente ai metodi bayesiani di essere utilizzati in problemi più complicati che sono intrattabili analiticamente, proprio come Newton-Rhapson o Fisher Scoring sono metodi numerici per risolvere problemi classici che sono intrattabili.

La distribuzione posteriore p (b | y) utilizzando la precedente p di Jeffrey (a, b, s) proporzionale a 1 / s (dove s è la deviazione standard dell'errore) è una distribuzione t di studente con posizione b_ols, scala se_b_ols (" ols "per la stima dei" minimi quadrati ordinari ") e n-2 gradi di libertà. Ma la distribuzione campionaria di b_ols è anche uno studente t con posizione b, scala se_b_ols e n-2 gradi di libertà. Pertanto sono identici, tranne per il fatto che b e b_ols sono stati scambiati, quindi quando si tratta di creare l'intervallo, l '"est + - bound" dell'intervallo di confidenza viene invertito in un "est - + bound" nell'intervallo credibile.

Quindi l'intervallo di confidenza e l'intervallo credibile sono analiticamente identici e non importa quale metodo venga utilizzato (a condizione che non ci siano ulteriori informazioni preliminari) - quindi prendi il metodo che è più economico dal punto di vista computazionale (ad esempio quello con meno inversioni di matrice). Ciò che mostra il tuo risultato con MCMC è che la particolare approssimazione utilizzata con MCMC fornisce un intervallo credibile che è troppo ampio rispetto all'intervallo credibile analitico esatto. Questa è probabilmente una buona cosa (anche se vorremmo che l'approssimazione fosse migliore) che la soluzione bayesiana approssimativa appaia più conservativa della soluzione bayesiana esatta.


Non così strano davvero. Uno dei motivi per utilizzare un metodo numerico per trovare una risposta a un problema che può essere risolto analiticamente è quello di assicurarsi che si stia utilizzando correttamente il software.
Ringold,

1
f(β0,β1,...,βp,σ)Pr(Y>10|X)X
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.