Posteriorin ennustetarkistukset
Vahvistakaa mallin sopivuus vertaamalla simuloitujen ja havaittujen aineistojen jakaumia.
Posteriorin ennustetarkistukset on ilmainen R Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu R Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. R Academy-kurssilla on yhteensä 4 oppituntia.
Mitä posteriorin ennustavat tarkistukset ovat?
Bayesiläisen mallin sovittamisen jälkeen on kysyttävä: tuottaako tämä malli dataa, joka näyttää havaitulta datalta? Posteriorin ennustavat tarkistukset (PPC:t) vastaavat tähän simuloimalla posteriorista toistettuja aineistoja yrep ja vertaamalla niitä graafisesti havaittuun dataan y.
Posterioriotosten poimiminen
extract(fit, pars='mu') palauttaa nimetyn listan; $mu on numeerinen vektori, joka sisältää kaikki kyseisen parametrin lämmittelyn jälkeiset otokset. Kun ketjuja on 4 ja lämmittelyn jälkeisiä iteraatioita kussakin ketjussa 1000, otoksia saadaan 4000.
# library(rstan)
# mu_samples <- extract(fit, pars = 'mu')$mu
# sigma_samples <- extract(fit, pars = 'sigma')$sigma
#
# cat('Samples drawn:', length(mu_samples), '
')
# cat('Posterior mean of mu:', mean(mu_samples), '
')
# cat('90% CI:', quantile(mu_samples, c(0.05, 0.95)), '
')yrep:n muodostaminen posterioriotoksista
Simuloikaa jokaisesta posterioriarvonnasta (mu_s, sigma_s) alkuperäisen datan kanssa samankokoinen toistettu aineisto. Tallentakaa nämä matriisiin yrep, jossa kukin rivi on yksi simuloitu aineisto.
# y <- c(2.1, 1.8, 2.4, 1.9, 2.3, 2.0, 1.7, 2.2)
# n_obs <- length(y)
# S <- length(mu_samples) # 4000 posterior draws
#
# yrep <- matrix(NA, nrow = S, ncol = n_obs)
# for (s in seq_len(S)) {
# yrep[s, ] <- rnorm(n_obs, mean = mu_samples[s], sd = sigma_samples[s])
# }
# dim(yrep) # [4000, 8]ppc_dens_overlay() — tiheyksien vertailu
bayesplot::ppc_dens_overlay(y, yrep[1:50,]) asettaa havaitun datan ydintiheyden (tumma viiva) päälle 50 satunnaisesti valitun simuloidun aineiston tiheydet (vaaleat viivat). Malli sopii hyvin, kun tumma viiva sijoittuu vaaleiden viivojen muodostaman pilven sisään.
# library(bayesplot)
#
# ppc_dens_overlay(y, yrep[1:50, ])
#
# Interpretation:
# - Dark line (y_obs) surrounded by light lines (yrep): good fit
# - Dark line systematically outside the cloud: model misfit
# - Light lines much wider than dark: overdispersed model
# - Light lines much narrower than dark: underdispersed modelppc_stat() — testisuureen tarkistus
ppc_stat(y, yrep, stat = 'mean') näyttää histogrammin testisuureesta, esimerkiksi keskiarvosta, joka on laskettu jokaisesta simuloidusta aineistosta. Havaitun testisuureen kohdalle piirretään pystysuora viiva. Jos havaittu arvo sijoittuu histogrammin pääosaan, malli kuvaa kyseistä datan ominaisuutta.
# library(bayesplot)
#
# ppc_stat(y, yrep, stat = 'mean') # does model capture the mean?
# ppc_stat(y, yrep, stat = 'sd') # does model capture spread?
# ppc_stat(y, yrep, stat = 'max') # does model capture extremes?
#
# If observed stat is in the tail of the histogram,
# the model fails to reproduce that statistic.Bayesiläinen p-arvo
Bayesiläinen p-arvo (posteriorin ennustava p-arvo) on niiden simuloitujen aineistojen osuus, joissa testisuure on havaittua arvoa äärimmäisempi. Lähellä arvoa 0.5 olevat arvot osoittavat hyvää kalibrointia; lähellä arvoja 0 tai 1 olevat arvot osoittavat mallin sopimattomuutta kyseisen testisuureen osalta.
# Bayesian p-value for the mean:
# obs_mean <- mean(y)
# rep_means <- apply(yrep, 1, mean)
# pval <- mean(rep_means >= obs_mean)
# cat('Bayesian p-value (mean):', round(pval, 3), '
')
# # 0.5 is perfect; < 0.05 or > 0.95 suggests misfitMuita bayesplotin PPC-funktioita
bayesplot tarjoaa tiheyksien päällekkäiskuvioiden lisäksi monia muita PPC-visualisointeja:
ppc_hist(y, yrep[1:8,])— histogrammiverkkoppc_scatter_avg(y, yrep)— havaitun datan ja yrep:n keskiarvon hajontakuvioppc_intervals(y, yrep)— jokaiseen havaintoon liittyvät epävarmuusvälitppc_rootogram(y, yrep)— lukumäärädatalla
# library(bayesplot)
#
# # Grid of 8 simulated histograms vs the observed
# ppc_hist(y, yrep[1:8, ])
#
# # Scatter: y_obs (x) vs mean of yrep (y) — should hug diagonal
# ppc_scatter_avg(y, yrep)
#
# # 50% and 90% posterior predictive intervals around each y_i
# ppc_intervals(y, yrep)PPC-kuvioiden tulkinta — mallin sopimattomuus
Yleisiä sopimattomuuden muotoja ja niiden syitä:
- yrep liian leveä — priori on liian hajautunut tai mallissa on liikaa hajontaa
- yrep siirtynyt — väärä uskottavuusjakaumaperhe, esimerkiksi normaalijakauma vinoon dataan
- yrep ei tuota monihuippuisuutta — tarvitaan seosmalli
- yrep ei kata äärimmäisiä arvoja — tarvitaan paksuhäntäinen jakauma
# Example: if data has a long right tail but yrep does not,
# consider switching:
# y ~ normal(mu, sigma) => y ~ student_t(nu, mu, sigma)
#
# Or for count data:
# y ~ poisson(lambda) => y ~ neg_binomial_2(mu, phi) (overdispersion)
cat('PPCs guide model improvement by revealing specific failure modes
')PPC:t Stanin mallilohkossa
yrep-arvot voi muodostaa suoraan Stanissa käyttämällä generated quantities -lohkoa. Näin parametreja ei tarvitse poimia uudelleen R:ssä, ja laskennallinen tulos on vastaava.
# Stan model with generated quantities:
# '
# generated quantities {
# array[N] real y_rep;
# for (n in 1:N) {
# y_rep[n] = normal_rng(mu, sigma);
# }
# }
# '
# Then extract in R:
# yrep <- extract(fit, pars = 'y_rep')$y_rep # [S, N] matrixLeave-One-Out-ristiinvalidointi
PPC-tarkistusten lisäksi loo::loo(fit) laskee leave-one-out-ristiinvalidoinnin kilpailevien mallien vertailemiseksi. Malli, jolla on suurempi ELPD-arvo (ennustettu log-tiheys), on suositeltavampi. Käyttäkää mallien järjestämiseen funktiota loo::loo_compare(loo1, loo2).
# library(loo)
# loo1 <- loo(fit1) # normal model
# loo2 <- loo(fit2) # student-t model
#
# comparison <- loo_compare(loo1, loo2)
# print(comparison)
#
# Model with elpd_diff > 0 is preferred
# se_diff > |elpd_diff| means difference is not reliablePPC-tarkistusten parhaat käytännöt
Seuraavat käytännöt auttavat tekemään posteriorin ennustavista tarkistuksista perusteellisia:
- Aloittakaa aina funktiolla
ppc_dens_overlay()yleisenä järkevyystarkistuksena - Jatkakaa analyysin tavoitteisiin liittyvillä toimialakohtaisilla testisuureilla (
ppc_stat()) - Käyttäkää visuaalisiin tarkistuksiin vähintään 50 yrep-arvontaa ja Bayesiläisiin p-arvoihin kaikkia 4000:ta
- Epäonnistuneet PPC-tarkistukset ohjaavat mallin parantamista — ne ovat diagnostiikkaa, eivät epäonnistumisia
# Workflow:
# 1. Fit model -> extract() -> generate yrep matrix
# 2. ppc_dens_overlay(y, yrep[1:50,]) -- visual global check
# 3. ppc_stat(y, yrep, stat='mean') -- check mean
# 4. ppc_stat(y, yrep, stat='sd') -- check spread
# 5. ppc_stat(y, yrep, stat='max') -- check tails
# 6. If misfit found -> revise model -> refit -> re-checkPikatarkistus: Bayesiläisen p-arvon tulkinta
Mitä mallista kertoo Bayesiläinen p-arvo 0.03 maksimitestisuureelle?
Posteriorin ennustavat tarkistukset — kertaus
PPC-työnkulku RStanilla ja bayesplotilla:
- Poimikaa otokset:
extract(fit, pars='mu')$mu - Muodostakaa yrep: käykää posterioriarvonnat silmukassa ja kutsukaa funktiota
rnorm(n, mu_s, sigma_s) - Yleinen tarkistus:
ppc_dens_overlay(y, yrep[1:50,]) - Testisuuretarkistukset:
ppc_stat(y, yrep, stat='mean') - Bayesiläinen p-arvo:
mean(apply(yrep,1,stat) >= stat(y))— lähellä arvoa 0.5 on hyvä - Käyttäkää mallien vertailuun funktiota
loo::loo_compare()
Opi R tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 43
- Oppitunnit
- 159
Usein kysytyt kysymykset
Onko oppitunti ”Posteriorin ennustetarkistukset” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa R Academy-oppimispolun 3 oppituntia, myös oppitunnin “Posteriorin ennustetarkistukset”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. R Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Posteriorin ennustetarkistukset”?
Vahvistakaa mallin sopivuus vertaamalla simuloitujen ja havaittujen aineistojen jakaumia. Harjoittelet R Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni R Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin R Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Posteriorin ennustetarkistukset”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä R Academy-oppitunnilla?
Kyllä. Jokainen R Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Bayesilaisen ajattelun perusteet
- Stan-mallien kirjoittaminen R:ssä
- MCMC-otanta ja diagnostiikka
- Posteriorin ennustetarkistukset