0

我有一个包含 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 数组,而不是单个值。谁能解释如何解释这个数组?

4

1 回答 1

2

如果p[x]<0.05,您可以假设列x中的值不是正态分布的。因为使用正态性检验,零假设是总体呈正态分布。p<0.05,我们接受这个假设的可能性只有不到 5%,这在统计上是很低的。相反,当 p[i]>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 值。)

于 2020-03-16T16:46:29.877 回答