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_
floator array_like 每个样本或合并的残差(组内)方差 如果
vars_是标量,则它被解释为所有样本相同的合并方差,use_var将被忽略。 否则,方差将根据use_var关键字使用。- nobs
intor array_like 样本的观测数量。 如果 nobs 是标量,则假设所有样本具有相同的 观测数量
nobs,即平衡样本情况。 否则,统计数据将根据 nobs 进行加权。 只有相对大小是相关的,对 nobs 的任何比例变化 都不会改变效应大小。- use_var{“unequal”, “equal”, “bf”}
如果
use_var是“不等于”,那么方差可以在不同样本之间不同,并且将计算Welch方差分析的效果大小。- ddof_between
int 加权组间平方和的自由度校正。 分母是
nobs_total - ddof_between这可以用于匹配参考文献中的差异。
- Returns:¶
- f2
float 效应量对应于平方的Cohen’s f,这也等于非中心性除以总观测数。
- f2
注释
目前处理以下单因素方差分析的情况
具有同方差性的平衡样本
具有不同观测数量和同方差方差的样本
具有不同观测数量和异方差的样本。这对应于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