statsmodels.stats.oneway.effectsize_oneway

statsmodels.stats.oneway.effectsize_oneway(means, vars_, nobs, use_var='unequal', ddof_between=0)[source]

对应于单因素方差分析的Cohen’s f = nc / nobs的效应量

这包含了Welch和Brown-Forsythe方差分析的调整,以便可以与FTestAnovaPower一起使用效应量。

Parameters:
meansarray_like

要比较的样本的平均值

vars_float or array_like

每个样本或合并的残差(组内)方差 如果 vars_ 是标量,则它被解释为所有样本相同的合并方差,use_var 将被忽略。 否则,方差将根据 use_var 关键字使用。

nobsint or array_like

样本的观测数量。 如果 nobs 是标量,则假设所有样本具有相同的 观测数量 nobs,即平衡样本情况。 否则,统计数据将根据 nobs 进行加权。 只有相对大小是相关的,对 nobs 的任何比例变化 都不会改变效应大小。

use_var{“unequal”, “equal”, “bf”}

如果 use_var 是“不等于”,那么方差可以在不同样本之间不同,并且将计算Welch方差分析的效果大小。

ddof_betweenint

加权组间平方和的自由度校正。 分母是 nobs_total - ddof_between 这可以用于匹配参考文献中的差异。

Returns:
f2float

效应量对应于平方的Cohen’s f,这也等于非中心性除以总观测数。

注释

目前处理以下单因素方差分析的情况

  • 具有同方差性的平衡样本

  • 具有不同观测数量和同方差方差的样本

  • 具有不同观测数量和异方差的样本。这对应于Welch方差分析

在“unequal”和“bf”方法用于不等方差的情况下,效应量并不直接对应于Anova中的检验统计量。两者都有修正项被删除或添加,因此效应量与使用FTestAnovaPower相匹配。如果所有方差都相等,那么所有三种方法都会得到相同的效应量。如果方差不相等,那么这三种方法会产生效应量上的微小差异。

注意,在文献中未找到BF方差分析的效果量和功效计算。添加了修正项,以便FTestAnovaPower能够提供良好的功效近似值。

状态: 实验性 我们可能会添加额外的返回值,如果这些是支持功率和样本量应用所必需的。

示例

以下展示了如何计算三种方差分析方法中每种方法的效果量和功效。原假设是均值相等,这对应于零效果量。在备择假设下,均值不同,其中两个样本均值与均值的距离为delta。我们假设在原假设和备择假设下,方差是相同的。

nobs 用于样本定义了样本中观测值的比例。nobs 在幂方法中定义了总样本大小。

在模拟中,标准方差分析(即``use_var="equal"``)计算的功率会高估模拟功率几个百分点。在此示例中,等方差假设不成立。

>>> from statsmodels.stats.oneway import effectsize_oneway
>>> from statsmodels.stats.power import FTestAnovaPower
>>>
>>> nobs = np.array([10, 12, 13, 15])
>>> delta = 0.5
>>> means_alt = np.array([-1, 0, 0, 1]) * delta
>>> vars_ = np.arange(1, len(means_alt) + 1)
>>>
>>> f2_alt = effectsize_oneway(means_alt, vars_, nobs, use_var="equal")
>>> f2_alt
0.04581300813008131
>>>
>>> kwds = {'effect_size': np.sqrt(f2_alt), 'nobs': 100, 'alpha': 0.05,
...         'k_groups': 4}
>>> power = FTestAnovaPower().power(**kwds)
>>> power
0.39165892158983273
>>>
>>> f2_alt = effectsize_oneway(means_alt, vars_, nobs, use_var="unequal")
>>> f2_alt
0.060640138408304504
>>>
>>> kwds['effect_size'] = np.sqrt(f2_alt)
>>> power = FTestAnovaPower().power(**kwds)
>>> power
0.5047366512800622
>>>
>>> f2_alt = effectsize_oneway(means_alt, vars_, nobs, use_var="bf")
>>> f2_alt
0.04391324307956788
>>>
>>> kwds['effect_size'] = np.sqrt(f2_alt)
>>> power = FTestAnovaPower().power(**kwds)
>>> power
0.3765792117047725

Last update: Oct 16, 2024