2017-03-06 5 views
2

私はscipy.stats.leveneを成功させようとしています。scipyを使ってLeveneのテストを実行する方法

私は、形状(2128,45100)の数値が小さい行列を持っています。各行はサンプルであり、3つのクラスタの1つに属します。

クラスタ間に均質性があるかどうかをテストします。

私は、クラスターが私の行列をフィルタリングし、そのようなのparamsを送信しようとしました:

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]) 

ValueError: setting an array element with a sequence.

あるいは

levene(matrixAudioData) 

ValueError: Must enter at least two input sample vectors.

これは動作します:

levene([1,2,3],[2,3,4]) 

しかし、各サンプルが単なる数字ではない場合はどうなりますか?

パラメータとして使用しているmatrixAudioData[np.ix_((cutTree == 0).ravel()),:][0]にはそれぞれ形状(1048,45100)がありますので、問題ないはずです。

あなたはどんな方向に向いていますか?

ありがとうございます!

答えて

0

ああ...レーベンは、単変量のようです...私の悪い...

ボックスのMテストが移動するための方法ですが、Pythonには実装が存在しないようです。

2

Box's M Test formulaに基づいて、2つの等しいサイズの共分散行列X0とX1(つまりそれぞれが同じ行数と列数を持つ)でボックスMテストを実行し、npを使用してnumpy配列として格納するPythonプログラムです。 cov()関数。これは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)) 
関連する問題