Tests for Multivariate Normality

image.png

image.png
import numpy as np
from scipy import stats
x=np.array([[72,66,76,77],[60,53,66,63],[56,57,64,58],[41,29,36,38],
           [32,32,35,36],[30,35,34,26],[39,39,31,27],[42,43,31,25],[37,40,31,25],
                        [33,29,27,36],[32,30,34,28],[63,45,74,63],[54,46,60,52],
                        [47,51,52,43],[91,79,100,75],[56,68,47,50],[79,65,70,61],
                        [81,80,68,58],[78,55,67,60],[46,38,37,38],[39,35,34,37],
                        [32,30,30,32],[60,50,67,54],[35,37,48,39],[39,36,39,31],
                        [50,34,37,40],[43,37,39,50],[48,54,57,43]])
z=x.shape#(28,4)
n=z[0]
p=z[1]
dfchi=p*(p+1)*(p+2)/6#
q=np.eye(n)-1/n*np.ones((n,n))
s=1/n*np.dot(np.dot(x.T,q),x)
s_inv=np.linalg.inv(s)#矩阵求逆
g_matrix=np.dot(np.dot(np.dot(np.dot(q,x),s_inv),x.T),q)#矩阵相乘
print("based on skewness")
beta1hat=(sum(sum(g_matrix*g_matrix*g_matrix)))/(n*n) #矩阵对应元素相乘
print(beta1hat)
kappa1=n*beta1hat/6
print(kappa1)
pvalshew=1 - stats.chi2.cdf(kappa1,dfchi)
    #1-cdf('chi2',kappa1,cdfchi)
print(pvalshew)

print("based on kurtosis:")
beta2hat=(g_matrix*g_matrix).trace()/n
print(beta2hat)
kappa2=(beta2hat-p*(p+2))/np.sqrt(8*p*(p+2)/n)
print(kappa2)
pvalkurt = 2*(1 - stats.norm.cdf(abs(kappa2)))
    #2*(1-cdf('norm',abs(kappa2),0,1))
print(pvalkurt)



image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容