多列数据集的Scipy Normaltest

我有一个包含100行和21列的数据集,其中列是变量。我想知道这些变量是否来自多元正态分布。 因此,我使用了Scipy库中的de Normaltest,但无法理解结果。这是我的代码:

import pandas as pd
from scipy import stats

df = pd.DataFrame(np.random.random(2100).reshape(100,21)) # dataset (100x21)
k2,p = stats.normaltest(df)

在此示例中,p是一个21数组而不是单个值。有人可以解释如何解释此数组吗?

mintz2004 回答:多列数据集的Scipy Normaltest

如果为p[x]<0.05,则可以假定列x中的值不是正态分布的。因为使用正态检验,零假设是总体呈正态分布。在p 0.5,则数据呈正态分布。您可以使用正态分布轻松地对其进行测试:

import pandas as pd
from scipy import stats
df = pd.DataFrame(np.random.normal(0,1,2100).reshape(100,21)) # dataset (100x21)
k2,p = stats.normaltest(df)
print (p)

输出为

    [0.97228661 0.49017509 0.97373345 0.97404468 0.03498392 0.61963074
 0.07712131 0.52632157 0.29887186 0.30822356 0.14416431 0.11015074
 0.81773481 0.52919266 0.81859869 0.24855451 0.16817784 0.0117747
 0.76860707 0.40384319 0.97038048]

其中大多数大于0.05。

要测试多元正态性,可以尝试Henze-Zirkler检验:

import pingouin as pg
normal,p = pg.multivariate_normality(df,alpha=.05)

其中.05是有效值(您可以根据需要更改它,它不会影响您获得的p值。)

本文链接:https://www.f2er.com/2637276.html

大家都在问