0Pricing
R Academy · Ders

MCMC Örneklemesi ve Tanılamalar

Örnekleme çalıştırın, zincirleri inceleyin ve Rhat ile ESS tanılamalarını yorumlayın.

MCMC Örneklemesi ve Tanılamalar, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.

MCMC Nedir?

Markov Zinciri Monte Carlo (MCMC), doğrudan örneklemenin mümkün olmadığı durumlarda bir olasılık dağılımından örnekler çekmeye yarayan algoritma ailesidir. Bayesçi istatistikte MCMC, artçıl dağılımdan P(parameters | data) örnekleri çeker.

RStan, gelişmiş bir MCMC algoritması olan No-U-Turn Sampler'ı (NUTS) uygular.

Basit Bir Stan Modeli

Stan modeli, veri türlerini, parametreleri ve log-artçılı dağılımı tanımlayan bir metin bloğudur. En basit model, varyansı bilinen bir normal dağılımın ortalamasını tahmin eder.

# library(rstan)
#
# stan_code <- '
# data {
#   int<lower=0> N;
#   vector[N] y;
# }
# parameters {
#   real mu;
#   real<lower=0> sigma;
# }
# model {
#   mu    ~ normal(0, 10);   // prior
#   sigma ~ exponential(1);   // prior
#   y     ~ normal(mu, sigma); // likelihood
# }
# '

Örnekleme için stan() Çağrısı

stan(model_code=..., data=..., chains=4, iter=2000, warmup=1000) modeli bir kez derler ve ardından örnekler çeker. iter=2000 ve warmup=1000 ile her zincir, 1000 ısınma sonrası örnek üretir; 4 zincir genelinde toplam 4000 örnek elde edilir.

# library(rstan)
# options(mc.cores = parallel::detectCores())
#
# y <- c(2.1, 1.8, 2.4, 1.9, 2.3, 2.0, 1.7, 2.2)
# stan_data <- list(N = length(y), y = y)
#
# fit <- stan(
#   model_code = stan_code,
#   data       = stan_data,
#   chains     = 4,
#   iter       = 2000,
#   warmup     = 1000,
#   seed       = 42
# )

print(fit) — Özet Tablosu

print(fit), her parametre için artçıl ortalama, standart sapma, kantiller, Rhat ve n_eff değerlerini içeren bir özet tablosu gösterir. Bu iki tanı değeri, ilk kontrol etmeniz gereken şeylerdir.

# print(fit)
#
# Example output:
#       mean se_mean   sd  2.5%   25%   50%   75%  97.5%  n_eff Rhat
# mu    2.05    0.00 0.15  1.76  1.95  2.05  2.15   2.34   3842    1
# sigma 0.22    0.00 0.06  0.13  0.18  0.21  0.25   0.37   3521    1
# lp__  4.38    0.02 1.01  1.60  3.91  4.71  5.18   5.50   2148    1

Rhat Yakınsama Ölçütü

Rhat (olası ölçek azaltma faktörü), zincirlerin içindeki varyansı zincirler arasındaki varyansla karşılaştırır. 1,0'a yakın değerler, tüm zincirlerin aynı dağılıma yakınsadığını gösterir.

  • Rhat < 1.01 — yakınsamış (güncel standart)
  • Rhat > 1.01 — zincirler karışmamış; daha fazla yineleme çalıştırın
  • Rhat > 1.1 — ciddi yakınsama sorunu
# Check Rhat for all parameters:
# s <- summary(fit)$summary
# rhat_vals <- s[, 'Rhat']
# cat('Max Rhat:', max(rhat_vals, na.rm = TRUE), '
')
# if (any(rhat_vals > 1.01, na.rm = TRUE)) {
#   warning('Convergence issue detected!')
# } else {
#   cat('All Rhat < 1.01 — chains converged
')
# }

n_eff — Etkin Örneklem Büyüklüğü

n_eff (etkin örneklem büyüklüğü), ardışık MCMC örnekleri arasındaki otokorelasyonu hesaba katar. Birbiriyle ilişkili örnekler, bağımsız örneklerden daha az bilgi taşır.

  • Toplam yinelemeye yakın n_eff — birbirinden bağımsız örneklere yakın, mükemmel
  • n_eff / total_samples > 0.1 — genellikle kabul edilebilir
  • Çok düşük n_eff — yüksek otokorelasyon; modeli yeniden parametreleştirmeyi değerlendirin
# s <- summary(fit)$summary
# n_eff_vals <- s[, 'n_eff']
# total_samples <- 4 * 1000   # chains * post-warmup iter
# ratio <- n_eff_vals / total_samples
# cat('n_eff ratio (mu)   :', round(ratio['mu'], 2), '
')
# cat('n_eff ratio (sigma):', round(ratio['sigma'], 2), '
')

Görsel Yakınsama için traceplot()

traceplot(fit, pars = 'mu'), her zincir için mu değerlerinin yinelemeler boyunca örneklenen değerlerini çizer. Yakınsamış zincirler, tüm zincirlerin örtüştüğü ve herhangi bir eğilim ya da kaymanın görülmediği bulanık bir tırtıl gibi görünür. Yakınsamamış zincirler gezinir veya ayrı kalır.

# library(rstan)
#
# traceplot(fit, pars = c('mu', 'sigma'), inc_warmup = FALSE)
#
# Good traceplot characteristics:
# - All 4 chains overlapping completely (same range)
# - No visible drift or trend
# - Rapid mixing (values jump around quickly)
# - No flat regions (stuck sampler)
cat('A healthy traceplot looks like a fuzzy caterpillar
')

Artçıl Korelasyonlar için pairs()

pairs(fit, pars = c('mu', 'sigma')), artçıl örneklerin saçılım grafiği matrisini gösterir. Parametreler arasındaki korelasyonları ortaya çıkarır ve örnekleyicinin zorlandığı bölgeleri gösteren, kırmızıyla çizilmiş ıraksak geçişleri vurgular.

# pairs(fit, pars = c('mu', 'sigma'))
#
# What to look for:
# - Elliptical clouds: mild correlation (OK)
# - Banana / funnel shapes: reparameterization needed
# - Red dots (divergences): geometry problem in posterior
#   => increase adapt_delta: stan(..., control=list(adapt_delta=0.95))
cat('Red dots in pairs() indicate divergent transitions — investigate!
')

Artçıl Örnekleri Çıkarma

extract(fit, pars = 'mu')$mu, mu için ısınma sonrasındaki tüm örneklerin sayısal bir vektörünü döndürür. Herhangi bir artçıl özetini (ortalama, güvenilirlik aralıkları, bir koşulun olasılığı) hesaplamak için bu örnekleri kullanın.

# mu_samples <- extract(fit, pars = 'mu')$mu
# cat('Posterior mean :', mean(mu_samples), '
')
# cat('95% CI:', quantile(mu_samples, c(0.025, 0.975)), '
')
# cat('P(mu > 2):', mean(mu_samples > 2), '
')
# hist(mu_samples, main = 'Posterior of mu', xlab = 'mu', col = 'steelblue')

Etkileşimli Tanılar için ShinyStan'i Başlatma

shinystan::launch_shinystan(fit), traceplot'ları, artçıl dağılımları, pairs grafiklerini ve NUTS tanılarını tek bir yerde sunan etkileşimli bir Shiny uygulaması açar. RStan uydurmasını incelemek için en kapsamlı araçtır.

# install.packages('shinystan')
# library(shinystan)
#
# shinystan::launch_shinystan(fit)
#
# ShinyStan tabs:
# - Diagnose: Rhat, n_eff, divergences, energy
# - Explore:  marginal posteriors, scatter plots
# - Model:    Stan code, data
# - NUTS:     step size, tree depth per chain

Yaygın Yakınsama Düzeltmeleri

Rhat > 1.01 olduğunda veya ıraksamalar gördüğünüzde:

  • iter ve warmup değerlerini artırın
  • control içinde adapt_delta değerini 1,0'a doğru artırın (ör. 0,95)
  • Yeniden parametreleştirin — hiyerarşik modeller için merkezlenmemiş parametreleştirme kullanın
  • Önsel dağılımlar çok yaygınsa onları daraltın
  • Verileri kontrol edin — aykırı değerler veya ölçek farklılıkları örnekleyici sorunlarına yol açar
# Re-run with higher adapt_delta to reduce divergences:
# fit2 <- stan(
#   model_code = stan_code,
#   data       = stan_data,
#   chains     = 4,
#   iter       = 4000,
#   warmup     = 2000,
#   control    = list(adapt_delta = 0.95, max_treedepth = 12),
#   seed       = 42
# )

Hızlı Kontrol: Rhat Eşiği

Bir Stan modelinin yakınsadığını gösteren Rhat için güncel standart eşik nedir?

MCMC Örneklemesi ve Tanılar Özeti

Temel RStan MCMC iş akışı:

  • stan(model_code=..., data=..., chains=4, iter=2000, warmup=1000) modeli uydurur
  • print(fit), temel yakınsama tanıları olan Rhat ve n_eff değerlerini gösterir
  • Rhat < 1.01 ve n_eff / total > 0.1, iyi davranan bir örnekleme işaret eder
  • traceplot() — görsel karışma kontrolü; pairs() — artçıl geometrisi sorunlarını ortaya çıkarır
  • extract(fit, pars='mu')$mu — ham artçıl örneklere erişim
  • shinystan::launch_shinystan(fit) — kapsamlı etkileşimli tanılar

Sıkça Sorulan Sorular

“MCMC Örneklemesi ve Tanılamalar” dersi ücretsiz mi?

Evet — “MCMC Örneklemesi ve Tanılamalar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.

“MCMC Örneklemesi ve Tanılamalar” dersinde ne öğreneceğim?

Örnekleme çalıştırın, zincirleri inceleyin ve Rhat ile ESS tanılamalarını yorumlayın. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

R Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“MCMC Örneklemesi ve Tanılamalar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu R Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Bayesçi Düşünmeye Giriş
  2. R'de Stan Modelleri Yazma
  3. MCMC Örneklemesi ve Tanılamalar
  4. Sonsal Tahmin Denetimleri
← R Academy Sayfasına Dön