def funbgh2(s, a, b, R, df): n = len(a) sqrt_df = np.sqrt(df) #np.power(s, df-1) * np_exp(-s*s*0.5) return np_exp((df-1)*np_log(s)-s*s*0.5) \ * mvstdnormcdf(s*a/sqrt_df, s*b/sqrt_df, R[np.tril_indices(n, -1)], maxpts=1000000, abseps=1e-4)
def funbgh(s, a, b, R, df): sqrt_df = np.sqrt(df+0.5) ret = chi_logpdf(s,df) ret += np_log(mvstdnormcdf(s*a/sqrt_df, s*b/sqrt_df, R, maxpts=1000000, abseps=1e-6)) ret = np_exp(ret) return ret
def funbgh(s, a, b, R, df): sqrt_df = np.sqrt(df + 0.5) ret = chi_logpdf(s, df) ret += np_log( mvstdnormcdf(s * a / sqrt_df, s * b / sqrt_df, R, maxpts=1000000, abseps=1e-6)) ret = np_exp(ret) return ret
if __name__ == '__main__': corr = np.asarray([[1.0, 0, 0.5], [0, 1, 0], [0.5, 0, 1]]) corr_indep = np.asarray([[1.0, 0, 0], [0, 1, 0], [0, 0, 1]]) corr_equal = np.asarray([[1.0, 0.5, 0.5], [0.5, 1, 0.5], [0.5, 0.5, 1]]) R = corr_equal a = np.array([-np.inf, -np.inf, -100.0]) a = np.array([-0.96, -0.96, -0.96]) b = np.array([0.0, 0.0, 0.0]) b = np.array([0.96, 0.96, 0.96]) a[:] = -1 b[:] = 3 df = 10. sqrt_df = np.sqrt(df) print mvstdnormcdf(a, b, corr, abseps=1e-6) #print integrate.quad(funbgh, 0, np.inf, args=(a,b,R,df)) print(stats.t.cdf(b[0], df) - stats.t.cdf(a[0], df))**3 s = 1 print mvstdnormcdf(s * a / sqrt_df, s * b / sqrt_df, R) df = 4 print mvstdtprob(a, b, R, df) S = np.array([[1., .5], [.5, 1.]]) print multivariate_t_rvs([10., 20.], S, 2, 5) nobs = 10000 rvst = multivariate_t_rvs([10., 20.], S, 2, nobs)
if __name__ == '__main__': corr = np.asarray([[1.0, 0, 0.5],[0,1,0],[0.5,0,1]]) corr_indep = np.asarray([[1.0, 0, 0],[0,1,0],[0,0,1]]) corr_equal = np.asarray([[1.0, 0.5, 0.5],[0.5,1,0.5],[0.5,0.5,1]]) R = corr_equal a = np.array([-np.inf,-np.inf,-100.0]) a = np.array([-0.96,-0.96,-0.96]) b = np.array([0.0,0.0,0.0]) b = np.array([0.96,0.96, 0.96]) a[:] = -1 b[:] = 3 df = 10. sqrt_df = np.sqrt(df) print mvstdnormcdf(a, b, corr, abseps=1e-6) #print integrate.quad(funbgh, 0, np.inf, args=(a,b,R,df)) print (stats.t.cdf(b[0], df) - stats.t.cdf(a[0], df))**3 s = 1 print mvstdnormcdf(s*a/sqrt_df, s*b/sqrt_df, R) df=4 print mvstdtprob(a, b, R, df) S = np.array([[1.,.5],[.5,1.]]) print multivariate_t_rvs([10.,20.], S, 2, 5) nobs = 10000