Tutorial Statystyki Bayesowskiej

Część V: Selekcja modeli, wybór rozkładów a priori i inne przydatne rzeczy

Szymon Mąka https://revan-tech.github.io/kontakt.html
06-18-2023

Wstęp

Dzisiejszy wpis będzie nie będzie w formie zamkniętej, będę dodawał do niego treści gdy czas pozwoli. Poruszymy problematykę selekcji modeli, wyboru rozkładów a priori i innych przydatnych rzeczy w analizie Bayesowskiej.

Selekcja modeli

Wyprodukujmy sobie dane powiązane kwadratowo.

set.seed(123)
x = rnorm(100,1,1)
y = 0.5*x^2 + rnorm(100,0,1)
plot(x,y)

Następnie zamodelujemy związek x i y liniowo i kwadratowo.

library(rjags)
library(coda)
library(MCMCvis)

mod_lin = "model {
  # Priors
  a ~ dunif(-1000, 1000)
  b ~ dnorm(0, 100^-2)
  sigma ~ dunif(0.000001,1000)
  
  # Likelihood
  for (i in 1:length(y)) {
    y[i] ~ dnorm(a + b * x[i], sigma^-2)
  }}"

mod_sq = "model {
  # Priors
  a ~ dunif(-1000, 1000)
  b ~ dnorm(0, 100^-2)
  sigma ~ dunif(0.000001,1000)
  
  # Likelihood
  for (i in 1:length(y)) {
    y[i] ~ dnorm(a + b * x[i]^2, sigma^-2)
  }}"


params = c("a","b","sigma")
n.adapt = 100
ni = 3000
nb = 3000
nt = 1
nc = 3

model_lin = jags.model(file = textConnection(mod_lin), data = list(x = x, y = y), n.chains = nc, inits = NULL, n.adapt = n.adapt)
update(model_lin, n.iter=ni, by=1)
samples_lin = coda.samples(model_lin, params, n.iter = nb, thin = nt)

model_sq = jags.model(file = textConnection(mod_sq), data = list(x = x, y = y), n.chains = nc, inits = NULL, n.adapt = n.adapt)
update(model_sq, n.iter=ni, by=1)
samples_sq = coda.samples(model_sq, params, n.iter = nb, thin = nt)

Zerknijmy na przedziały wiarygodności dla współczynników regresji.

summary(samples_lin)

Iterations = 3101:6100
Thinning interval = 1 
Number of chains = 3 
Sample size per chain = 3000 

1. Empirical mean and standard deviation for each variable,
   plus standard error of the mean:

         Mean      SD  Naive SE Time-series SE
a     -0.2573 0.16894 0.0017808      0.0035766
b      1.0620 0.11893 0.0012536      0.0024819
sigma  1.0857 0.07811 0.0008234      0.0008731

2. Quantiles for each variable:

         2.5%     25%     50%     75%   97.5%
a     -0.5892 -0.3671 -0.2587 -0.1463 0.07539
b      0.8255  0.9841  1.0629  1.1394 1.29638
sigma  0.9465  1.0313  1.0819  1.1341 1.25375
summary(samples_sq)

Iterations = 3101:6100
Thinning interval = 1 
Number of chains = 3 
Sample size per chain = 3000 

1. Empirical mean and standard deviation for each variable,
   plus standard error of the mean:

          Mean      SD  Naive SE Time-series SE
a     -0.02982 0.13000 0.0013703      0.0022181
b      0.46119 0.04209 0.0004437      0.0007099
sigma  0.97997 0.07155 0.0007542      0.0007791

2. Quantiles for each variable:

         2.5%     25%      50%     75%  97.5%
a     -0.2840 -0.1188 -0.03036 0.05631 0.2263
b      0.3801  0.4329  0.46076 0.48969 0.5442
sigma  0.8527  0.9295  0.97626 1.02560 1.1314

W obydwu przypadkach przedziały nie zawierają zera. Musimy rozsądzić, który model jest lepszy. Moglibyśmy zrobić to przy pomocy już omówionego Czynnika Bayesa. Jednak, tak jak już wspominałem, obliczenie go w bardziej skomplikowanych modelach jest problematyczne.

W modelach częstościowych używa się kryteriów informacyjnych takich jak AIC i BIC do selekcji modeli. W statystyce Bayesowskiej do oceny dopoasowania modelu możemy użyć Deviance Information Cryterion (DIC).

\[\text{DIC} = \overline{D(\theta)} + p_D\] gdzie:

\[ D(\theta) = - 2\log ({\rm{P}}(y|\theta ))\]

\[ p_D=\overline{D(\theta)} - D(\bar{\theta})\]

DIC jest zdefiniowane jako suma (ujemnego) średniego logarytmu funkcji wiarygodności zewaluowanym dla wszystkich wartości parametrów \(\theta\) z rozkładu post priori \(\overline{D(\theta)}\) i dewiacji \(p_D\). Dewiacja, z kolei, jest obliczana jako różnica między wartością funkcji wiarygodności \(D(\bar{\theta})\) a średnią wartością logarytmu funkcji wiarygodności dla wszystkich parametrów(gdzie dla symetrycznych rozkładów otrzymujemy najbardziej wiarygodne wartości).

Innymi słowy, wartość \(\overline{D(\theta)}\) dostarcza informacji jak dobrze model przewiduje dane \(y\). Im lepszy jest model, tym mniejsza jest ta wartość. Jednakże, gdy liczba parametrów w modelu wzrasta, wartość \(\overline{D(\theta)}\) może również maleć, ponieważ bardziej skomplikowany model ma większą elastyczność w dopasowaniu się do danych. Dlatego drugi składnik, \(p_D\), mierzy poziom skomplikowania modelu (efektywną liczbę parametrów).

Podsumowując, modele z mniejszą wartością DIC są preferowane, ponieważ sugerują większe skupienie gęstości prawdopodobieństwa wokół dominującej wartości, jednocześnie uwzględniając liczbę parametrów w modelu.

Policzmy DIC dla naszych modeli.

Dic_lin = dic.samples(model_lin,1000)
Dic_lin
Mean deviance:  298.6 
penalty 2.947 
Penalized deviance: 301.5 
Dic_sq = dic.samples(model_sq,1000)
Dic_sq
Mean deviance:  278.3 
penalty 3.107 
Penalized deviance: 281.4 
diffdic(Dic_sq,Dic_lin)
Difference: -20.15688
Sample standard error: 9.885177

Widzimy, że model z kwadratowym związkiem pomiedzy x i y jest lepiej dopasowany do danych.

Prócz DIC, w statystyce Bayesowskiej narzędziami do oceny dopasowania modeli są Widely Applicable Information Criterion (WAIC) oraz Leave-one-out cross-validation (LOO-CV). Są to metody, które nie są zaimplementowane w JAGS, jednak warto je poznać, ponieważ posiadają lepsze właściwości (Gelman et al., 2014).

Wybór rozkładów a priori

To chyba najtrudniejszy temat w statystyce Bayesowskiej. Zasadniczo zgodnie z ortodoksyjną filozofią Bayesowską rozkłady a priori powinny odzwierciedlać naszą wcześniejszą wiedzę. Filozofia ta może wydawać się kusząca, ponieważ tak właśnie powinna działać nauka. Akumulować wiedzę i następnie po otrzymaniu nowych danych aktualizować swoje oczekiwania. Jednak gdy przechodzimy do modelowania pojawia się problem.

Jak przedstawić naszą wiedzę w postaci rozkładów a priori? Czy jeśli użyjemy informatywnego rozkładu dla współczynnika regresji, powiedzmy \(N(100,0.001)\), i po otrzymaniu rozkładu a posteriori przedział wiarygodności nie będzie zawierał 0, czy właśnie nie oszukaliśmy by uzyskać “istotny” współczynnik regresji?

Z kolei jeśli użyjemy zbyt informatywnego rozkładu skoncentrowanego wokół zera, możemy ograniczyć naszą zdolność do wykrycia istniejącego efektu.

Rozważmy następujący przypadek:

Widzimy tu przykład zastosowania bardzo restrykcyjnego rozkładu a priori. Rozkład posteriori nie bardzo przypomina rozkład a priori. Z kolei gdybyśmy brali pod uwagę tylko wiarygodność (tzn, zastosowalibyśmy płaski rozkład a priori), różniłby się on znacznie od rozkładu a priori.

Przypomnijmy sobie jaką interpretacje ma rozkład a posteriori i zastosujmy ją do powyższego wykresu: Pod warunkiem naszych zaobserwowanych danych, zaobserwowane przez nas dane mają znikome prawdopodobieństwo zaobserwowania.

Hmm. Tak jak wspominałem ustalenie właściwych rozkładów to rzecz nietrywialna.

Zasadniczo, możliwe podejścia do rozkładów a priori:

Ogólne wskazówki dotyczące wybierania rozkładów a priori (niezależne od wyżej wymienionych strategii):

Rozkład a priori powinien kształtem przypominać rozkład modelowanego parametru. Jeśli parametr jest średnią - to zwykle zamodelujemy go rozkładem normalnym. Co w przypadku innych parametrów? Warto zobaczyć jak takie parametry się zachowują. Policzmy sobie wariancję z 300^2 prób, w których losujemy 25 obserwacji z rozkładu normalnego.

variances = replicate(300^2,var(rnorm(25,0,1)))
plot(density(variances))

Jak widzimy, rozkład wariancji jest prawoskośny. Rozkładem prawdopodobieństwa, którym często modeluje się wariancję jest rozkład Gamma.

curve(dgamma(x,7,7),0,3)

Garść wniosków

Statystyka Bayesowska ma swoje wady i zalety. W tutorialu skupiliśmy się głównie na metodzie numerycznej, jaką jest MCMC, do modelowania. Ta metoda umożliwia także estymację modeli, które nie mają rozwiązań analitycznych (albo ich nie znamy). Moglibyśmy estymować parametry takich modeli za pomocą zwykłej optymalizacji. Jednakże, wtedy pojawia się problem, ponieważ nie możemy obliczyć przedziałów ufności. Mnie interesuje mnie głównie wnioskowanie statystyczne, a podejście Bayesowskie dostarcza nie punktową wartość parametru tylko jego rozkład, co pozwala ocenić niepewność związana z tymi parametrami!

Gelman, A., Hwang, J., & Vehtari, A. (2014). Understanding predictive information criteria for bayesian models. Statistics and Computing, 24(6), 997–1016.
Gelman, A., Simpson, D., & Betancourt, M. (2017). The prior can often only be understood in the context of the likelihood. Entropy, 19(10), 555.

References