내가 모델링하고 나는 주식보고 있었다 자산 클래스의 분산 - 공분산 행렬이 너무 반환 추정 할 필요가 추정 반환 여기 https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-HackersPyMC은 - 공분산에 대한 wishart 분포가
의 6 장에 주어진 예 내 간단한 구현 곳이다 나는 알려진 평균과 분산 - 공분산 행렬을 가진 다변량 법선을 사용하는 샘플부터 시작합니다. 나는 정보가없는 priror를 사용하여 그것을 추정하려고 노력한다.
추정치가 알려진 이전과 다르므로 구현이 올바른지 잘 모르겠습니다. 누군가 내가 잘못하고있는 것을 지적 해 주시면 고맙겠습니다.
import numpy as np
import pandas as pd
import pymc as pm
p=3
mu=[.03,.05,-.02]
cov_matrix= [[.025,0.0075, 0.00175],[0.0075,.007,0.00135],[0.00175,0.00135,.00043]]
n_obs=10000
x=np.random.multivariate_normal(mu,cov_matrix,n_obs)
prior_mu=np.ones(p)
prior_sigma = np.eye(p)
post_mu = pm.Normal("returns",prior_mu,1,size=p)
post_cov_matrix_inv = pm.Wishart("cov_matrix_inv",n_obs,np.linalg.inv(cov_matrix))
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)
mu_samples = mcmc.trace("returns")[:]
mu_samples.mean(axis=0)
cov_inv_samples = mcmc.trace("cov_matrix_inv")[:]
mean_covariance_matrix = np.linalg.inv(cov_inv_samples.mean(axis=0))
의견을 주셔서 감사합니다! 나는 당신이 제안한대로 변화를 구현했고 그것이 효과를 낸다. 주제에 대한 더 많은 문헌을 검토 한 후, 하나의 중요한 개선점은 wishart 분포에서 생성 된 공분산 행렬이 관측 수에 의해 축소 될 필요가 있다는 것입니다. 나는이 게시물에 위의 개선 사항을 게시했습니다 - http://stackoverflow.com/questions/21711150/pymc-variance-covariance-matrix-estimation – akhil