scipy.stats.f_oneway

scipy.stats.f_oneway(*args, axis=0)[源代码]

进行单因素方差分析。

单因素方差分析检验两个或两个以上群体具有相同总体均值的零假设。该测试适用于来自两组或更多组的样本,可能具有不同的大小。

参数
样本1,样本2,.array_like

每组的样本测量。必须至少有两个论点。如果数组是多维的,则数组的所有维度都必须相同,除了 axis

axis整型,可选

沿其应用测试的输入数组的轴。默认值为0。

退货
statistic浮动

测试的计算F统计量。

pvalue浮动

F分布中的关联p值。

警告
F_onewayConstantInputWarning

如果每个输入数组都是常量数组,则引发。在本例中,F统计量要么是无限的,要么是未定义的,因此 np.infnp.nan 返回。

F_onewayBadInputSizesWarning

如果任何输入数组的长度为0,或者如果所有输入数组的长度都为1,则引发。 np.nan 在这些情况下,为F统计量和p值返回。

注意事项

方差分析检验有重要的假设,必须满足这些假设才能使相关的p值有效。

  1. 样品是独立的。

  2. 每个样本都来自正态分布的人群。

  3. 各组别的总体标准差均相等。这一特性称为同方差。

如果这些假设对于给定的数据集不成立,那么仍然可以使用Kruskal-Wallis H检验 (scipy.stats.kruskal )或亚历山大统治测试 (scipy.stats.alexandergovern ),虽然有一些功率损失。

每个组的长度必须至少为1,并且必须至少有一个组的长度大于1。如果不满足这些条件,则会生成警告,并且 (np.nannp.nan )返回。

如果每个组包含常量值,并且至少存在两个值不同的组,则该函数将生成警告并返回 (np.inf ,0)。

如果所有组中的所有值都相同,则函数将生成警告并返回 (np.nannp.nan )。

该算法来自Heiman公司 [2], 第394-7页。

参考文献

1

R.Lowry,“推断统计学的概念和应用”,第14章,2014年,http://vassarstats.net/textbook/

2

海曼:“理解研究方法和统计学:心理学综合导论”,霍顿,米夫林和公司,2001年。

3

G.H.麦克唐纳,“生物统计手册”,单因素方差分析。http://www.biostathandbook.com/onewayanova.html

示例

>>> from scipy.stats import f_oneway

以下是一些数据 [3] 根据对五个地点黑贻贝的外壳测量(前内收肌疤痕的长度,通过除以长度来标准化):俄勒冈州蒂拉穆克、俄勒冈州纽波特、阿拉斯加州彼得堡、俄罗斯马加丹和芬兰Tvarminne,这些数据来自McDonald等人使用的更大的数据集。(1991年)

>>> tillamook = [0.0571, 0.0813, 0.0831, 0.0976, 0.0817, 0.0859, 0.0735,
...              0.0659, 0.0923, 0.0836]
>>> newport = [0.0873, 0.0662, 0.0672, 0.0819, 0.0749, 0.0649, 0.0835,
...            0.0725]
>>> petersburg = [0.0974, 0.1352, 0.0817, 0.1016, 0.0968, 0.1064, 0.105]
>>> magadan = [0.1033, 0.0915, 0.0781, 0.0685, 0.0677, 0.0697, 0.0764,
...            0.0689]
>>> tvarminne = [0.0703, 0.1026, 0.0956, 0.0973, 0.1039, 0.1045]
>>> f_oneway(tillamook, newport, petersburg, magadan, tvarminne)
F_onewayResult(statistic=7.121019471642447, pvalue=0.0002812242314534544)

f_oneway 接受多维输入数组。当输入是多维的并且 axis 则沿输入数组的第一个轴执行测试。对于以下数据,测试执行三次,每列一次。

>>> a = np.array([[9.87, 9.03, 6.81],
...               [7.18, 8.35, 7.00],
...               [8.39, 7.58, 7.68],
...               [7.45, 6.33, 9.35],
...               [6.41, 7.10, 9.33],
...               [8.00, 8.24, 8.44]])
>>> b = np.array([[6.35, 7.30, 7.16],
...               [6.65, 6.68, 7.63],
...               [5.72, 7.73, 6.72],
...               [7.01, 9.19, 7.41],
...               [7.75, 7.87, 8.30],
...               [6.90, 7.97, 6.97]])
>>> c = np.array([[3.31, 8.77, 1.01],
...               [8.25, 3.24, 3.62],
...               [6.32, 8.81, 5.19],
...               [7.48, 8.83, 8.91],
...               [8.59, 6.01, 6.07],
...               [3.07, 9.72, 7.48]])
>>> F, p = f_oneway(a, b, c)
>>> F
array([1.75676344, 0.03701228, 3.76439349])
>>> p
array([0.20630784, 0.96375203, 0.04733157])