I am wondering if there is a function for sampling from a multivariate student t-distribution in Python. I have the mean vector with 14 elements, the 14x14 covariance matrix and the degrees of freedom and I want to sample a vector from this t-distribution. For the one dimensional case I used stats.t.rvs(df,loc,scale) and I was wondering if there is something similar for the multivariate case. Any help would be very much appreciated.
Thanks
You can find this function into sandbox directory of statsmodels GitHub repo. Link to the function: https://github.com/statsmodels/statsmodels/blob/master/statsmodels/sandbox/distributions/multivariate.py#L90
Source code of the function:
#written by Enzo Michelangeli, style changes by josef-pktd
# Student's T random variable
def multivariate_t_rvs(m, S, df=np.inf, n=1):'''generate random variables of multivariate t distributionParameters----------m : array_likemean of random variable, length determines dimension of random variableS : array_likesquare array of covariance matrixdf : int or floatdegrees of freedomn : intnumber of observations, return random array will be (n, len(m))Returns-------rvs : ndarray, (n, len(m))each row is an independent draw of a multivariate t distributedrandom variable'''m = np.asarray(m)d = len(m)if df == np.inf:x = np.ones(n)else:x = np.random.chisquare(df, n) / dfz = np.random.multivariate_normal(np.zeros(d), S, (n,))return m + z/np.sqrt(x)[:,None] # same output format as random.multivariate_normal