0
我阅读以下纸(http://www3.stat.sinica.edu.tw/statistica/oldpdf/A10n416.pdf),其中它们的方差 - 协方差矩阵Σ建模为:PyMC - 方差 - 协方差矩阵估计
Σ= DIAG(S)* R * DIAG(S)...(式1中(S)是对角元素S的对角矩阵,R是k×k相关矩阵。
我该如何使用PyMC来实现这个功能?
下面是一些初步的代码,我写道:
import numpy as np
import pandas as pd
import pymc as pm
k=3
prior_mu=np.ones(k)
prior_var=np.eye(k)
prior_corr=np.eye(k)
prior_cov=prior_var*prior_corr*prior_var
post_mu = pm.Normal("returns",prior_mu,1,size=k)
post_var=pm.Lognormal("variance",np.diag(prior_var),1,size=k)
post_corr_inv=pm.Wishart("inv_corr",n_obs,np.linalg.inv(prior_corr))
post_cov_matrix_inv = ???
muVector=[10,5,-2]
varMatrix=np.diag([10,20,10])
corrMatrix=np.matrix([[1,.2,0],[.2,1,0],[0,0,1]])
cov_matrix=varMatrix*corrMatrix*varMatrix
n_obs=10000
x=np.random.multivariate_normal(muVector,cov_matrix,n_obs)
obs = pm.MvNormal("observed returns", post_mu, post_cov_matrix_inv, observed = True, value = x)
model = pm.Model([obs, post_mu, post_cov_matrix_inv])
mcmc = pm.MCMC()
mcmc.sample(5000, 2000, 3)
感谢
[编辑]
我认为这是可以做到使用以下:
@pm.deterministic
def post_cov_matrix_inv(post_sdev=post_sdev,post_corr_inv=post_corr_inv):
return np.diag(post_sdev)*post_corr_inv*np.diag(post_sdev)
请详细解释“模型”的含义。这个词在统计和科学中有很多含义,这些在这里似乎都不适用。你可能在问怎么把协方差矩阵分解成这种形式?如果你的问题只是关于在PyMC中编码算法,那么请让我们知道,以便我们可以将它迁移到SO社区。 – whuber
我的问题只是关于PyMC中的实现。 – akhil
我认为这可以使用以下方法:@ pm.deterministic def post_cov_matrix_inv(post_sdev = post_sdev,post_corr_inv = post_corr_inv): return np.diag(post_sdev)* post_corr_inv * np.diag(post_sdev) – akhil