mac*_*ole 5 python statistics scipy
我一直在尝试使用scipy.stats.levene没有成功。
我有一个形状为 (2128, 45100) 的 numpy 矩阵。每行是一个样本,属于 3 个集群之一。
我想测试集群之间是否存在同方差性。
我试过按集群过滤我的矩阵并发送如下参数:
from scipy.stats import levene
levene(matrixAudioData[np.ix_((cutTree == 0).ravel()),:][0],
matrixAudioData[np.ix_((cutTree == 1).ravel()),:][0],
matrixAudioData[np.ix_((cutTree == 2).ravel()),:][0])
Run Code Online (Sandbox Code Playgroud)
ValueError:使用序列设置数组元素。
甚至
levene(matrixAudioData)
Run Code Online (Sandbox Code Playgroud)
ValueError:必须输入至少两个输入样本向量。
这有效:
levene([1,2,3],[2,3,4])
Run Code Online (Sandbox Code Playgroud)
但是如果每个样本不只是一个数字呢?
请注意,matrixAudioData[np.ix_((cutTree == 0).ravel()),:][0]我用作参数的每个都有形状 (1048, 45100) 所以应该没问题。
你们能指出我的任何方向吗?
谢谢 !
小智 -1
基于Box's M Test 公式,以下是一个 Python 程序,用于对两个大小相等的协方差矩阵 X0 和 X1(即每个矩阵具有相同的行数和列数)进行 Box's M Test,使用 np.cov 存储为 numpy 数组() 功能。这已经针对 SPSS 输出进行了测试。
Numpy 是一个依赖项,缩写为 np。
def box_m(X0,X1):
global Xp
m = 2
k = len(np.cov(X0))
n_1 = len(X0[0])
n_2 = len(X1[0])
n = len(X0[0])+len(X1[0])
Xp = ( ((n_1-1)*np.cov(X0)) + ((n_2-1)*np.cov(X1)) ) / (n-m)
M = ((n-m)*np.log(np.linalg.det(Xp))) \
- (n_1-1)*(np.log(np.linalg.det(np.cov(X0)))) - (n_2-1)*(np.log(np.linalg.det(np.cov(X1))))
c = ( ( 2*(k**2) + (3*k) - 1 ) / ( (6*(k+1)*(m-1)) ) ) \
* ( (1/(n_1-1)) + (1/(n_2-1)) - (1/(n-m)) )
df = (k*(k+1)*(m-1))/2
c2 = ( ((k-1)*(k+2)) / (6*(m-1)) ) \
* ( (1/((n_1-1)**2)) + (1/((n_2-1)**2)) - (1/((n-m)**2)) )
df2 = (df+2) / (np.abs(c2-c**2))
if (c2>c**2):
a_plus = df / (1-c-(df/df2))
F = M / a_plus
else:
a_minus = df2 / (1-c+(2/df2))
F = (df2*M) / (df*(a_minus-M))
print('M = {}'.format(M))
print('c = {}'.format(c))
print('c2 = {}'.format(c2))
print('-------------------')
print('df = {}'.format(df))
print('df2 = {}'.format(df2))
print('-------------------')
print('F = {}'.format(F))
Run Code Online (Sandbox Code Playgroud)