使用 python 的多元学生 t 分布 [英] multivariate student t-distribution with python
本文介绍了使用 python 的多元学生 t 分布的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
要生成具有多元 t 分布的样本,我使用此函数:
To generate samples with multivariate t-distribution I use this function:
def multivariatet(mu,Sigma,N,M):
'''
Output:
Produce M samples of d-dimensional multivariate t distribution
Input:
mu = mean (d dimensional numpy array or scalar)
Sigma = scale matrix (dxd numpy array)
N = degrees of freedom
M = # of samples to produce
'''
d = len(Sigma)
g = np.tile(np.random.gamma(N/2.,2./N,M),(d,1)).T
Z = np.random.multivariate_normal(np.zeros(d),Sigma,M)
return mu + Z/np.sqrt(g)
但我现在正在寻找的是 多元学生 t-distribution 本身所以我可以计算元素的密度,其中 dimension >1
.
but what I am looking for now is the multivariate student t-distribution it self so I can calculate the density of elements where dimension > 1
.
这将类似于scipy 但在多维空间中.
That will be something like stats.t.pdf(x, df, loc, scale)
of the package scipy but in multi-dimensional space.
推荐答案
我自己编码了密度:
import numpy as np
from math import *
def multivariate_t_distribution(x,mu,Sigma,df,d):
'''
Multivariate t-student density:
output:
the density of the given element
input:
x = parameter (d dimensional numpy array or scalar)
mu = mean (d dimensional numpy array or scalar)
Sigma = scale matrix (dxd numpy array)
df = degrees of freedom
d: dimension
'''
Num = gamma(1. * (d+df)/2)
Denom = ( gamma(1.*df/2) * pow(df*pi,1.*d/2) * pow(np.linalg.det(Sigma),1./2) * pow(1 + (1./df)*np.dot(np.dot((x - mu),np.linalg.inv(Sigma)), (x - mu)),1.* (d+df)/2))
d = 1. * Num / Denom
return d
这篇关于使用 python 的多元学生 t 分布的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文