f_oneway#
- scipy.stats.f_oneway(*samples, axis=0, nan_policy='propagate', keepdims=False)[源代码][源代码]#
执行单因素方差分析。
单向方差分析检验了两个或更多组的总体均值相同的零假设。该检验应用于来自两个或更多组的样本,这些样本的大小可能不同。
- 参数:
- 示例1, 示例2, …array_like
每个组的样本测量值。必须至少有两个参数。如果数组是多维的,那么数组的所有维度必须相同,除了 axis。
- 轴int 或 None, 默认值: 0
如果是一个整数,表示输入数据中要计算统计量的轴。输入数据的每个轴切片(例如行)的统计量将出现在输出的相应元素中。如果为
None
,则在计算统计量之前会将输入数据展平。- nan_policy{‘propagate’, ‘omit’, ‘raise’}
定义如何处理输入的 NaN。
propagate
: 如果在计算统计量的轴切片(例如行)中存在 NaN,则输出的相应条目将为 NaN。omit
: 在执行计算时,NaN 将被省略。如果在计算统计量的轴切片中剩余的数据不足,则输出的相应条目将为 NaN。raise
: 如果存在 NaN,将引发ValueError
。
- keepdimsbool, 默认值: False
如果设置为True,被减少的轴将作为尺寸为1的维度保留在结果中。通过此选项,结果将正确地与输入数组进行广播。
- 返回:
- 统计浮动
测试的计算 F 统计量。
- p值浮动
来自F分布的相关p值。
- 警告:
ConstantInputWarning
如果输入数组中的所有值都相同,则发出此信号。在这种情况下,F统计量要么是无穷大,要么未定义,因此返回
np.inf
或np.nan
。- RuntimeWarning
如果任何输入数组的长度为0,或者所有输入数组的长度均为1,则发出此信号。在这些情况下,F统计量和p值将返回
np.nan
。
注释
ANOVA 检验有一些重要的假设必须满足,以确保相关的 p 值有效。
这些示例是独立的。
每个样本来自一个正态分布的总体。
各组的总体标准差都相等。这一特性被称为同方差性。
如果这些假设对给定的一组数据不成立,仍然可能使用 Kruskal-Wallis H 检验(
scipy.stats.kruskal
)或 Alexander-Govern 检验(scipy.stats.alexandergovern
),尽管可能会损失一些效力。每个组的长度必须至少为1,并且必须至少有一个组的长度大于1。如果这些条件不满足,则会生成警告,并返回 (
np.nan
,np.nan
)。如果每个组中的所有值都相同,并且存在至少两个具有不同值的组,该函数将生成警告并返回 (
np.inf
, 0)。如果所有组中的所有值都相同,函数将生成警告并返回 (
np.nan
,np.nan
)。该算法来自 Heiman [2],第394-7页。
从 SciPy 1.9 开始,
np.matrix
输入(不推荐用于新代码)在计算执行前被转换为np.ndarray
。在这种情况下,输出将是一个标量或适当形状的np.ndarray
,而不是一个 2D 的np.matrix
。同样,虽然掩码数组的掩码元素被忽略,但输出将是一个标量或np.ndarray
,而不是一个mask=False
的掩码数组。参考文献
[1]R. Lowry, “Concepts and Applications of Inferential Statistics”, Chapter 14, 2014, http://vassarstats.net/textbook/
[2]G.W. Heiman, “理解研究方法和统计学:心理学综合导论”, Houghton, Mifflin 和 Company, 2001.
[3]G.H. McDonald, “生物统计学手册”, 单因素方差分析. http://www.biostathandbook.com/onewayanova.html
示例
>>> import numpy as np >>> from scipy.stats import f_oneway
以下是一些关于贻贝 Mytilus trossulus 的壳测量数据 [R74f03ee7d776-3]_(前闭壳肌疤痕的长度,通过除以长度标准化),数据来自五个地点:俄勒冈州的Tillamook、俄勒冈州的Newport、阿拉斯加的Petersburg、俄罗斯的Magadan和芬兰的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])