Bir korelasyon katsayı hesabının p-değerini, yani onun istatistiki olarak ne kadar anlamlı (significant) olduğunu hesaplamak mümkündür.
Korelasyon \(\rho\)’yu daha önce gördük, tahmin edicisi \(r\)’dir,
\[ \hat{\rho} = r = \frac{S_{xy}}{\sqrt{S_{xx}S_{yy}}} \tag{1} \]
ki örneklem hesapları \(S_{xx},S_{xy},S_{yy}\)
\[ S_{xx} = \sum_{i=1}^{n} (x_i-\bar{x})^2 \]
\[ S_{xy} = \sum_{i=1}^{n} (x_i-\bar{x})(y_i-\bar{y}) \]
\[ S_{yy} = \sum_{i=1}^{n} (y_i-\bar{y})^2 \]
olsun; bu hesapların teorik varyans ile olan bağlantısı görülebilir. Eğer \(X,Y\) iki değişkenli (bivariate) bir normal dağılımından geliyorsa, o zaman ortada bir regresyon varmış gibi gösterebiliriz
\[ E(Y|X=x) = \beta_0 + \beta_1 x + \epsilon \]
ki \(\beta_1 = \sigma_Y / \sigma_X \cdot \rho\) olur. Detaylar için [1]. Soru şu, \(r\) için bir istatistiksel önemlilik (significance) hesabı nasıl yapardık? Yani, eğer \(-1 \le r \le 1\) işe, ve \(r=0\) hiç korelasyon olmama durumu ise, acaba bu “sıfır olmama’’ durumunu test edebilir miydim? Evet. Yukarıdaki normallik faraziyesi doğru ise \(\beta_1 = 0\) olmama durumunu test etmek \(\rho = 0\) olmama testi ile aynı, bu durumda
\[ t_0 = \frac{\hat{\beta_1}}{\sqrt{ Var(\hat{\beta_1} ) }} \]
gibi bir test istatistiği yaratırız, ki bu istatistik Öğrenci t dağılımına sahip olurdu çünkü sıfır hipotezi \(\hat{\beta_1} = 0\), ve üstteki istatistik sıfır hipotezi altında ile Öğrenci t dağılımına sahip olmak zorundadır, çünkü bölünen normal dağılmış, bölen chi karenin karekökü olarak dağılmış. Eğer \(t_o\) hesabı veriye uygulandıktan sonra hipotezin öngördüğü dağılıma uymaz ise, sıfır hipotezini reddederiz.
Bu noktada lineer regresyon ile alakalı bilgiler devreye sokulabilir, [1]’den biliyoruz ki,
\[ Var(\hat{\beta_1}) = \frac{\sigma^2}{S_{xx}} \]
\(\sigma\) yerine örneklemden gelen \(S\) kullanırsak ve üstteki formüle koyarsak,
\[ t_0 = \frac{\hat{\beta_1}}{\sqrt{S / S_{xx}}} \]
Bu ifadeyi \(r\) bazında ifade edebilir miyiz? Deneyelim, \(\hat{\beta_1} = S_{xy} / S_{xx}\) ve \(r = \hat{\beta_1}\sqrt{\frac{S_{xx}}{S_{yy}}}\) olduğunu biliyoruz [1], ayrıca
\[ S = \frac{SSE}{n-2}, \qquad SSE = S_{yy} - \hat{\beta_1} S_{xy} \]
ki \(SSE\) hata karelerinin toplamıdır (sum of squared errors),
\[ t_0 = \frac{ \sqrt{S_{xx}} \hat{\beta_1} \sqrt{n-2} }{\sqrt{SSE}} \]
\[ = \frac{ \sqrt{S_{xx}} \hat{\beta_1} \sqrt{n-2} }{\sqrt{S_{yy} - \hat{\beta_1} S_{xy}}} \]
Bölümün iki kısmını \(\sqrt{S_y}\) ile bölelim,
\[ = \frac{ \sqrt{S_{xx}/S_{yy}} \hat{\beta_1} \sqrt{n-2} } {\sqrt{1 - \hat{\beta_1} S_{xy}/S_{yy}}} \]
Bölünen kısmında bir \(r\) ortaya çıktı,
\[ = \frac{ r\sqrt{n-2} } {\sqrt{1 - \hat{\beta_1} S_{xy}/S_{yy}}} \]
Bölen kısmındaki \(\hat{\beta_1}\) yerine \(\hat{\beta_1} = S_{xy} / S_{xx}\) koyarsak yine (1)’deki \(r\) tanımına geliriz, ve alttaki basitleştirilmiş ifade ortaya çıkar,
\[ t_o = \sqrt{\frac{(n-2)r^2}{(1-r^2)}} \]
Bu istatistik \(n-2\) derece serbestliğe sahip bir Öğrenci t dağılımıdır.
Örnek
Possum adı verilen bir tür hayvanın dişilerinin tüm uzunluğu ve kafa
ölçümü totlngth,hdlngth değişkenleri arasında korelasyon
olup olmadığı merak edilmektedir.
import pandas as pd
import scipy.stats
def p_corr(df1, df2):
corr = df1.corr(df2)
N = np.sum(df1.notnull())
t = corr*np.sqrt((N-2)/(1-corr**2))
p = 1-scipy.stats.t.cdf(abs(t),N-2) # one-tailed
return corr, t, p
df = pd.read_csv('fossum.csv')
c,tval, pval = p_corr(df.totlngth,df.hdlngth)
print (c, pval)0.779239322172 3.75045772216e-10
p-değeri çok küçük, demek ki korelason olmadığı tezi reddedildi. Korelasyon var.
Frekansçı yaklaşımla korelasyon hesabı yaptığımızda verinin dağılımı hakkında bir faraziye yapmığımızı söylemiştik, bu faraziye dağılımın iki değişkenli (bivariate) Gaussian olduğu idi. O zaman Bayes yaklaşımı ile korelasyon tahmini yapmak için bu başlangıç noktasını kullanabiliriz.
Önce Gaussian dağılımının formülünü hatırlayalım, genel \(d\) boyutlu Gaussian dağılımı şöyledir,
\[ f(x | \mu,\Sigma) = \frac{ 1}{(2\pi)^{k/2} \det(\Sigma)^{1/2}} \exp \bigg\{ -\frac{ 1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu) \bigg\} \]
Bizim için iki değişkenli Gaussian lazım, yani \(k=2\) olacak, o zaman bir veri noktası \(x_i\)’nin olasılığı,
\[ f(x_i \mid \theta) = \frac{1}{2\pi \sqrt{\det(\Sigma)}} \exp \left( -\frac{1}{2} (x_i - \mu)^T \Sigma^{-1} (x_i - \mu) \right) \tag{2} \]
ki
\[ \mu = \begin{pmatrix} \mu_1 \\ \mu_2 \end{pmatrix}, \quad \Sigma = \begin{pmatrix} \sigma_1^2 & \sigma_{12} \\ \sigma_{21} & \sigma_2^2 \end{pmatrix} \]
\(\theta = (\mu_1, \mu_2, \sigma_1, \sigma_2, \sigma_{12}, \sigma_{21})^T\) şeklinde de tanımlanabilirdi. Bu dağılımı bir korelasyon hesabı \(\rho\) için nasıl kullanabiliriz? Düşünelim, korelasyon katsayısı nedir? Bu katsayı eğer pür dağılım üzerinden düşünürsek \(\rho = \frac{\sigma_{12}}{\sigma_1 \sigma_2}\) değil midir? Evet, o zaman üstteki dağılımdaki varyans ile ilgili değişkenleri saptayabilirsek bize gereken sonucu elde etmiş olacağız. Bu değişkenleri nasıl buluruz? Bayes yaklaşımında \(\theta\) içeriği rasgele değişken olarak kabul edilir, onların bir dağılımı vardır. Bayes terminolojisinde (yine rasgele değişken kabul edilen) veri ile koşullandırılmış (conditioned) \(\theta\) olasılık (sonsal) yoğunluğu fonksiyonunu bulmamız gerekiyor.
İşin cebirsel / mekaniksel / hesapsal kısmına gelirsek, bazen bu sonsal (posterior) dağılımın ne olduğunu analitik olarak bulunabilir, eğer bu mümkün değil ise sayısal yöntemlerle sonsaldan örneklem toplamak mümkündür. Demek ki \(\sigma_1, \sigma_2, \sigma_{12}, \sigma_{21}\) rasgele değişkenlerinin dağılımından örneklem toplayabilirsek bu simülasyon sonuçlarından \(\rho\) hesaplanabilir.
Daha ilerlemeden bir numara daha tanıştıralım. Birazdan göreceğimiz Metropolis yönteminde \(\theta\)’daki değişkenlerden örneklem topluyor olacağız, fakat bu sırada \(\sigma_{12}\), \(\sigma_{21}\) değişkenlerinin \(\sigma_1, \sigma_2\) değişkenlerinden alakasız yönlere evrilmesi sayısal problem çıkartabilir. Ayrıca hesaplamaya uğraştığımız nihai değişken \(\rho\)’yu direk simülasyon içine dahil edebilirsek bizim için daha iyi olacak. O zaman
\[\rho = \frac{\sigma_{12}}{\sigma_1 \sigma_2}\]
olduğundan hareketle \(\rho \sigma_1 \sigma_2 = \sigma_{12}\) ifadesi de doğrudur. Ayrıca \(\sigma_{12} = \sigma_{21}\) da olduğu için \(\rho \sigma_1 \sigma_2 = \sigma_{21}\) da diyebiliriz. Bu iki eşitliği Gaussian formülünde \(\sigma_{12}\) ve \(\sigma_{21}\) yerine kullanırsak simülasyon kodu daha basitleşecek. O zaman iki değişkenli Gaussian’ımız için \(\mu\) ve \(\Sigma\) şu hale gelecek,
\[ \mu = \begin{pmatrix} \mu_1 \\ \mu_2 \end{pmatrix}, \quad \Sigma = \begin{pmatrix} \sigma_1^2 & \rho \sigma_1 \sigma_2 \\ \rho \sigma_1 \sigma_2 & \sigma_2^2 \end{pmatrix} \tag{3} \]
O zaman ilgilendiğimiz parametreler \(\theta = (\mu_1, \mu_2, \sigma_1, \sigma_2, \rho)^T\) olacak. Veri \(D = \{x_1, x_2, \dots, x_N\}\) ise, ki her veri noktası iki değişkenli \(x_i = (x_{i,1}, x_{i,2})^T\) olur, Bayes Teorisi şöyle der,
\[ p(\theta \mid D) = \frac{p(D \mid \theta) \, p(\theta)}{p(D)} \propto p(D \mid \theta) \, p(\theta) \]
Her iki tarafın doğal logiratmasını alalım, bu işlem çarpımları toplama dönüştürür,
\[ \ln p(\theta \mid D) = \ln p(D \mid \theta) + \ln p(\theta) + \text{sabit} \]
Demek ki üstteki hesabı yapabilmek için eşitliğin sağındaki verinin log olurluğu (log likelihood) bize lazım, tüm veri için
\[ L(\theta \mid D) = \prod_{i=1}^N f(x_i \mid \theta) \]
\[ \ln L(\theta \mid D) = \sum_{i=1}^N \ln f(x_i \mid \theta) \tag{4} \]
Eriştiğimiz son ifade için (2) formülündeki determinantlar, onun tersi, formülde görülen karesel ifadenin açılımı ve tüm bunların log’unun alınması gerekecek. (3) üzerinde determinant alalım,
\[ \det(\Sigma) = (\sigma_1^2)(\sigma_2^2) - (\rho \sigma_1 \sigma_2)^2 = \sigma_1^2 \sigma_2^2 (1 - \rho^2) \]
Karekök alınca
\[ \sqrt{\det(\Sigma)} = \sigma_1 \sigma_2 \sqrt{1 - \rho^2} \]
Kovaryans matrisinin tersi
\[ \Sigma^{-1} = \frac{1}{\sigma_1^2 \sigma_2^2 (1 - \rho^2)} \begin{pmatrix} \sigma_2^2 & -\rho \sigma_1 \sigma_2 \\ -\rho \sigma_1 \sigma_2 & \sigma_1^2 \end{pmatrix} = \frac{1}{1 - \rho^2} \begin{pmatrix} \frac{1}{\sigma_1^2} & -\frac{\rho}{\sigma_1 \sigma_2} \\ -\frac{\rho}{\sigma_1 \sigma_2} & \frac{1}{\sigma_2^2} \end{pmatrix} \]
\(z_{i,1} = \frac{x_{i,1} - \mu_1}{\sigma_1}\) ve \(z_{i,2} = \frac{x_{i,2} - \mu_2}{\sigma_2}\) olsun (bir tür “standardizasyon” işlemi yapıyoruz). Üstel içindeki terimler şu hale gelir,
\[(x_i - \mu)^T \Sigma^{-1} (x_i - \mu) = \begin{pmatrix} x_{i,1} - \mu_1 & x_{i,2} - \mu_2 \end{pmatrix} \left[ \frac{1}{1 - \rho^2} \begin{pmatrix} \frac{1}{\sigma_1^2} & -\frac{\rho}{\sigma_1 \sigma_2} \\ -\frac{\rho}{\sigma_1 \sigma_2} & \frac{1}{\sigma_2^2} \end{pmatrix} \right] \begin{pmatrix} x_{i,1} - \mu_1 \\ x_{i,2} - \mu_2 \end{pmatrix}\]
\[ = \frac{1}{1 - \rho^2} \left[ \left(\frac{x_{i,1} - \mu_1}{\sigma_1}\right)^2 - 2\rho \left(\frac{x_{i,1} - \mu_1}{\sigma_1}\right)\left(\frac{x_{i,2} - \mu_2}{\sigma_2}\right) + \left(\frac{x_{i,2} - \mu_2}{\sigma_2}\right)^2 \right] \]
\[ = \frac{1}{1 - \rho^2} \left( z_{i,1}^2 - 2\rho z_{i,1} z_{i,2} + z_{i,2}^2 \right) \]
O zaman (4) hesabı şu şekilde yapılabilir,
\[\ln L(\theta \mid D) = \sum_{i=1}^N \left[ -\ln(2\pi) - \ln\left(\sigma_1 \sigma_2 \sqrt{1 - \rho^2}\right) - \frac{1}{2(1 - \rho^2)} \left( z_{i,1}^2 - 2\rho z_{i,1} z_{i,2} + z_{i,2}^2 \right) \right]\]
\[ \ln L(\theta \mid D) = -N \ln\left(2\pi \sigma_1 \sigma_2 \sqrt{1 - \rho^2}\right) - \frac{1}{2(1 - \rho^2)} \sum_{i=1}^N \left( z_{i,1}^2 - 2\rho z_{i,1} z_{i,2} + z_{i,2}^2 \right) \tag{5} \]
Kodlar
Alttaki kod parçasında gördüğümüz formülleri kodlayacağız. İşlenecek veri ABD altın ve reel faiz seviyeleri. Finans verileri çoğunlukla Gaussian faraziyesine uymaz, durağan değildirler, ortalamaları ve standart sapmaları zaman geçtikçe değişim gösterir. Durağanlığı geri getirmek için veri üzerinde fark alma işlemi yapabiliriz, yani serinin kendisi yerine iki öğe arasındaki farkından yaratılmış yeni bir seri ile işlem yaparız. Bu niye işliyor? Çoğu finans fiyat seviyeleri rasgele yürüyüş (random walk) olarak davranır, bugünün fiyat seviyesi dünün seviyesi artı gürültüdür,
\[ Y_t = Y_{t-1} + \epsilon_t \]
Fark alma işlemi yapınca
\[ \Delta Y_t = Y_t - Y_{t-1} = \epsilon_t \]
\(\Delta Y_t\) serisi durağan hale geldi, sadece gürültüye bağlı.
import pandas as pd
import scipy.stats as st
# 1. Kurulum ve veri temizleme
np.random.seed(42)
df = pd.read_csv('../stat_102_regchpt/gold_ir.csv', index_col=0)
df_clean = df.dropna().copy()
raw_gold = df_clean.Gold_Price
raw_rate = df_clean.Calculated_Real_IR
# Durağanlık (stabilite) için farkını alma
diff_gold = np.diff(raw_gold)
diff_rate = np.diff(raw_rate)
data = np.column_stack((diff_gold, diff_rate))
N = len(data)
# --- FREKANSÇI (FREQUENTIST) YAKLAŞIM ---
r_freq, p_freq = st.pearsonr(diff_gold, diff_rate)
# --- MODÜLER BAYESÇİ KURULUM (Regresyon Tarzı) ---
def log_prior(params):
"""
Parametreler için kesin sınırlar belirler.
Önerilen parametreler fiziksel olarak mümkünse 0.0 (ln(1)) döndürür,
kurallarımızı ihlal ediyorsa -inf (ln(0)) döndürür.
"""
mu1, mu2, sigma1, sigma2, rho = params
# Standart sapmalar pozitif olmalı, korelasyon [-1, 1] aralığında olmalı
if sigma1 <= 0 or sigma2 <= 0 or not (-1 < rho < 1):
return -np.inf
return 0.0
def log_likelihood(params, data):
"""
İki değişkenli Normal Olurluk'u hesaplar. Önsel kontrolü zaten
çalıştığı için parametrelerin geçerli olduğunu varsayar.
"""
mu1, mu2, sigma1, sigma2, rho = params
# Standart skorları hesapla
z1 = (data[:, 0] - mu1) / sigma1
z2 = (data[:, 1] - mu2) / sigma2
# İki değişkenli normal log-yoğunluk fonksiyonu toplamı
term1 = -N * np.log(2 * np.pi * sigma1 * sigma2 * np.sqrt(1 - rho**2))
term2 = -1 / (2 * (1 - rho**2)) * np.sum(z1**2 - 2 * rho * z1 * z2 + z2**2)
return term1 + term2
def log_posterior(params, data):
"""
Geçersiz matematiksel durumlara karşı korumak amacıyla kısa devre
değerlendirmesi kullanarak Önsel ve Olurluk'u birleştirir.
"""
lp = log_prior(params)
# Eğer önsel "hayır" diyorsa, sıfıra bölme veya NaN durumlarını
önlemek için hemen dur
if np.isneginf(lp):
return -np.inf
return lp + log_likelihood(params, data)
# --- MCMC METROPOLIS ÖRNEKLEYİCİ ---
n_samples = 50000
burn_in = 10000
# Parametre vektörü formatı: [mu1, mu2, sigma1, sigma2, rho]
initial_params = [np.mean(diff_gold), np.mean(diff_rate), np.std(diff_gold), np.std(diff_rate), 0.0]
proposal_sigmas = np.array([0.001, 0.001, 0.001, 0.001, 0.005])
# İz (trace) depolama
trace = np.zeros((n_samples, 5))
trace[0] = initial_params
current_log_post = log_posterior(trace[0], data)
accepted = 0
for i in range(1, n_samples):
# Gauss rastgele yürüyüşü kullanarak yeni parametreler öner
proposal = trace[i-1] + np.random.normal(0, proposal_sigmas)
# Önerilen log-sonsal değerini hesapla
proposal_log_post = log_posterior(proposal, data)
# Metropolis kabul kriteri
log_acceptance_ratio = proposal_log_post - current_log_post
if np.log(np.random.uniform(0, 1)) < log_acceptance_ratio:
trace[i] = proposal
current_log_post = proposal_log_post
accepted += 1
else:
trace[i] = trace[i-1]
# Yanma süresi (burn-in) sonrası korelasyon katsayısı için örneklemler (rho 4. indekste)
rho_samples = trace[burn_in:, 4]
acceptance_rate = accepted / n_samples
# Bayesçi "p-değeri" karşılığı (Ters işaret olasılığı)
mean_rho = np.mean(rho_samples)
if mean_rho > 0:
p_bayes = np.mean(rho_samples <= 0)
else:
p_bayes = np.mean(rho_samples >= 0)
# %95 Güvenilir Aralığı (Trace'ten yüzdelik yöntemiyle) hesapla
hdi = np.percentile(rho_samples, [2.5, 97.5])
# Frekansçı için Güven Aralığı (Fisher Dönüşümü ile)
r_z = np.arctanh(r_freq)
se = 1 / np.sqrt(N - 3)
z_crit = st.norm.ppf(0.975)
ci_freq = np.tanh([r_z - z_crit * se, r_z + z_crit * se])
# --- SONUÇLARI YAN YANA GÖSTER ---
print("=" * 60)
print(f"MCMC Raporu: Kabul Oranı = {acceptance_rate:.2%}")
print("=" * 60)
print(f"{'Metrik':<25} | {'Frekansçı (Pearson)':<20} | {'Bayesçi MCMC (El Yapımı)':<20}")
print("-" * 60)
print(f"{'Korelasyon (r / rho)':<25} | {r_freq:>20.4f} | {mean_rho:>20.4f}")
print(f"{'p-değeri (işaret olasılık)':<25} | {p_freq:>20.4e} | {p_bayes:>20.4f}")
print(f"{'%95 Aralık Alt Sınır':<25} | {ci_freq[0]:>20.4f} | {hdi[0]:>20.4f}")
print(f"{'%95 Aralık Üst Sınır':<25} | {ci_freq[1]:>20.4f} | {hdi[1]:>20.4f}")
print("=" * 60)============================================================
MCMC Raporu: Kabul Oranı = 57.14%
============================================================
Metrik | Frekansçı (Pearson) | Bayes MCMC
------------------------------------------------------------
Korelasyon (r / rho) | -0.0042 | -0.0045
p-değeri (işaret olasılık) | 7.9035e-01 | 0.3901
%95 Aralık Alt Sınır | -0.0353 | -0.0353
%95 Aralık Üst Sınır | 0.0269 | 0.0251
============================================================
Kodda görülen term1 ve term2 hesapları (5)
formülündeki birinci ve ikinci terime tekabül ediyor.
Fonksiyon log_prior içinde simülasyonun istenen sınırlar
içinde kalmasının nasıl kontrol edildiğini görüyoruz. Önsel tanımımız
içinde birörnek dağılımlar vardı hatırlarsak, ve bu dağılımlar belli
aralıklar içinde kalmalıdır. sigma1, sigma2,
rho eğer istenmeyen değerlere gelirlerse fonksiyondan
np.inf yani sonsuz değer döndürüyoruz (oradaki olasılığı
sıfırlamış oluyoruz, log olasılıkta sıfırın log değeri sonsuz).
Metropolis algoritması muhtemel değerleri gezerken sınır dışı değerler
için sıfır olasılık alınca o bölgelerden uzak durmak isteyecektir.
Sonuçlara bakalım: Korelasyon katsayısının frekansçı ve Bayes ile birbirine yakın olduğunu olduğunu görüyoruz. P-değeri hesabı birinde 0.79 diğerinde 0.39 çıktı (ikinci hesap tek taraflı test, ikiyle çarpınca birinci değere yaklaşırız), 0.05 altında olmadıkları için, bulunan \(\rho\)’nun istatistiki olarak önemli (significant) olmadığı sonucuna varabiliriz.
Bayes yaklaşımında elde edilen sonuç sonsal dağılımdır demiştik, daha detaylandırmak gerekirse sonsal dağılımdan toplanmış örneklemlerdir. Bu örneklem vektörü üzerinde sayısal güven aralıkları hesaplanabilir, ve frekansçı dünyadaki güven aralıklarının (confidence interval) Bayes dünyasındaki karşılığı budur, Bayes literatürü onlara “inandırıcı aralık (credible interval)” ismini veriyor, Bayes güven aralığı olarak ta tanımlanabilirler.
Bayes p-değerini hesaplamak için elde edilen sonucun (bu örnekte \(\rho\)) işaretine bakılır, ve “sonsal örneklem içinde kaç tane değer bu işaretin tersi işaretine sahiptir” sorusu sorulur, cevap bir oran olarak raporlanır. Burada yapılmaya uğraşılan kritik eşik olan sıfırı merkez alan bir özet hesabı yaratmak. Bir sonuç elde ettik, şunu soruyoruz, “acaba ters işaretli olan sonuçların yüzde kaçı sıfırın diğer tarafında?”
Bayes güven aralığı şöyle kullanılabilir; Üstte görülen sonuçlarda aralık -0.0353 ve 0.0251 olarak hesaplanmış. Sıfır değeri bu aralığın içinde (hatta neredeyse tam ortasında) olduğu için korelasyon olmadığı sonucu daha kuvvetlenmiş demektir, ayrıca güven aralığının ne kadar sıkı (tight) olduğuna da bakabiliriz. Gördüğümüz raporda aralık uçları birbirine oldukca yakın, demek ki aralık dar, ve demek ki sıfırın bu aralıkta olması çok çok muhtemel, böylece korelasyon olmadığı tezi daha da kuvvetlenmiş oluyor.
Student-t Bazlı Getiriler
Finansal getiriler Gaussian dağılımı faraziyesine uymayabilirler, araştırmalara göre bu tür verileri modellemek için Student-t dağılımı daha uygundur, çünkü finansal şok olayları, yani ekstrem değerler bir Gaussian dağılımının izin vereceğinden daha yaygındır. Bayes yaklaşımı sayesinde bu yeni dağılımı kullanmak pek zor olmayacak.
Alternatif bir MCMC kodlaması şöyle olabilir, zaman serisi \(x_t\) ve \(y_t\)’yi iki boyutlu Student-t dağılımı üzerinden analiz ederiz, ki bu dağılımın \(\nu\) serbestlik derecesi, ortalama vektörü \(\mu = [\mu_x, \mu_y]^T\), ve ölçeklemesi \(\Sigma\) olacaktır (üstteki Gaussian örneğinde olduğu gibi). N bağımsız örneklem \(D = \{(x_1, y_1), \dots, (x_N, y_N)\}\) için birleşik olasılık yoğunluğu:
\[ p(D \mid \mu, \Sigma, \nu) = \prod_{i=1}^N \frac{\Gamma(\frac{\nu+2}{2})}{\Gamma(\frac{\nu}{2})\pi\nu |\Sigma|^{1/2}} \left(1 + \frac{1}{\nu} (d_i - \mu)^T \Sigma^{-1} (d_i - \mu)\right)^{-\frac{\nu+2}{2}} \]
ki \(d_i = [x_i, y_i]^T\) olacak
şekilde. Yine \(\rho\) hesaplanacaktır,
\(\nu=3\)’yu sabitleyebiliriz (“kalın
etekleri” garantilemek için), ve Metropolis yöntemi ile \(\theta = (\mu_x, \mu_y, \sigma_x, \sigma_y,
\rho)\) değişkenlerinden örneklem toplarız. Bu kodlar
corr_studentt.py içinde bulunabilir.
Kodlar
Kaynaklar
[1] Wackerly, Mathematical Statistics, 7th Edition