我一直在尝试使用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])
ValueError:设置带有序列的数组元素。
或者甚至
levene(matrixAudioData)
ValueError:必须输入至少两个输入样本向量。
这是可行的:
levene([1,2,3],[2,3,4])
但如果每个样本不只是一个数字呢?
请注意,我作为参数使用的每个matrixAudioData[np.ix_((cutTree == 0).ravel()),:][0]
都具有形状(1048,45100),因此应该没有问题。
你们能给我指个方向吗
谢谢你!
2条答案
按热度按时间xdnvmnnf1#
正如你所注意到的,
levene([1,2,3],[2,3,4])
可以工作,因为你要传递array_like
对象给函数。但是,把matrixAudioData[np.ix_((cutTree == 0).ravel()),:][0]
作为输入就不行了,因为你需要一个一维数组作为输入。例如,考虑下一个示例
注意每个列表都有不同的长度,因为我们可以用不同长度的样本进行统计测试。
在这种情况下,
p_value=1.3326317740560537e-14
。如果Levene结果的p_value大于0.05,则可以假定存在方差齐性(HOV)。否则,不存在齐性。因此,在这种情况下,我们可以拒绝零假设,即
col1
、col2
和col3
的方差相同。bpsygsoo2#
基于Box's M Test formula,这里是一个Python程序,用于对两个大小相等的协方差矩阵X0和X1(即,每个矩阵都有相同的行数和列数)进行Box's M检验,使用np.cov()函数将其存储为numpy数组。
Numpy是一个依赖项,缩写为np。