2017-01-31 2 views
2

Мне интересно, есть ли функция для выборки из многомерного t-распределения учеников в Python. У меня есть средний вектор с 14 элементами, матрицей ковариации 14x14 и степенями свободы, и я хочу пробовать вектор из этого t-распределения. Для одномерного случая я использовал stats.t.rvs (df, loc, scale), и мне было интересно, есть ли что-то подобное для многомерного случая. Любая помощь будет очень высоко ценится.Пример из многомерного распределения t python

Благодаря

ответ

2

Вы можете найти эту функцию в песочнице каталог statsmodels GitHub репо. Ссылка на функцию: https://github.com/statsmodels/statsmodels/blob/master/statsmodels/sandbox/distributions/multivariate.py#L90

Исходный код функции:

#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 distribution 
    Parameters 
    ---------- 
    m : array_like 
     mean of random variable, length determines dimension of random variable 
    S : array_like 
     square array of covariance matrix 
    df : int or float 
     degrees of freedom 
    n : int 
     number 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 distributed 
     random variable 
    ''' 
    m = np.asarray(m) 
    d = len(m) 
    if df == np.inf: 
     x = 1. 
    else: 
     x = np.random.chisquare(df, n)/df 
    z = np.random.multivariate_normal(np.zeros(d),S,(n,)) 
    return m + z/np.sqrt(x)[:,None] # same output format as random.multivariate_normal 
Смежные вопросы