Python中Kruskal-Wallis测试的输入格式

我正在比较DNA中有关癌症患者和健康人群结构性断裂的区域.我试图对每个区域的中断次数进行Kruskal-Wallis检验(SciPy Stats),看看这两个分布之间是否存在差异.
我不确定Kruskal – Wallis的输入是否应该是数组(文档)或数组列表(互联网上的其他地方).

首先,我尝试了一个用于样本控制的数组,如下所示:

controls = ['1', '2', '3', '4', '5']
samples = ['10', '20', '30', '40', '50']
n=0
for item in controls:
    array_item = np.array([item, samples[n]])
    kw_test = stats.mstats.kruskalwallis(array_item)
    print(kw_test)
    n+=1

这给了我所有项目的以下输出:

(0.0, nan)

我也尝试转换数组中的各个数据点,然后运行KW测试.

controls = ['1', '2', '3', '4', '5']
samples = ['10', '20', '30', '40', '50']
n=0
kw_results = []
for item in controls:
    array_controls = np.array([item])
    array_samples = np.array([samples[n]])
    kw_test = stats.mstats.kruskalwallis(array_samples, array_controls)
    kw_results.append(kw_test)
    n+=1
print(kw_results)

这给了所有比较(1.0,0.31731050786291404),即使我彻底改变了其中一个列表.

深入挖掘,我读到输入应该是一个数组列表,所以我认为只给出两个数据点(一个样本,一个控件)可能会导致'(0.0,nan)’,所以我也试过了.

controls = ['1', '2', '3', '4', '5']
samples = ['10', '20', '30', '40', '50']
list_ = []
n=0
for item in controls:
    array_item = np.array([item, samples[n]])
    list_.append(array_item)
    n+=1
kw_test = stats.mstats.kruskalwallis(list_)
print(kw_test)

这给了我这个错误:

TypeError: Not implemented for this type

现在我不确定使用什么格式/类型,希望任何人都可以帮助我!

最佳答案
scipy.stats.mstats.kruskalwallis模块使用数组.这些可以是具有不均匀观察数的阵列.

如果您在CSV文件中的数据位于不同的列中,则此类内容应该有效:

import pandas
from scipy.stats import mstats

Data = pandas.read_csv("CSVfile.csv")
Col_1 = Data['Colname1']
Col_2 = Data['Colname2']
Col_3 = Data['Colname3']
Col_4 = Data['Colname4']

print("Kruskal Wallis H-test test:")

H, pval = mstats.kruskalwallis(Col_1, Col_2, Col_3, Col_4)

print("H-statistic:", H)
print("P-Value:", pval)

if pval < 0.05:
    print("Reject NULL hypothesis - Significant differences exist between groups.")
if pval > 0.05:
    print("Accept NULL hypothesis - No significant difference between groups.")

转载注明原文:Python中Kruskal-Wallis测试的输入格式 - 代码日志