如何计算 Python 中的可检测效应大小(statsmodels 或其他)

How to calculate detectable effect size in Python (statsmodels or other)

我有一个不同于往常的问题。它涉及 Python(或 Excel 等)中的功效和样本量计算。在 Python 中,Statsmodels 可用于执行此操作。例如,下面的代码将输出提供 alpha、功效和效应大小的样本量。

但是,我想解决这个方程的影响大小。意思是,我需要计算最大可检测效应大小,提供一组 alpha、功率和 n。

如果statsmodels可以做到,我还没想好怎么做。或者我很乐意解方程,但我做不到。不确定这种问题是否适合这里,但如果有人能提供帮助,我很高兴!

from statsmodels.stats.power import TTestIndPower

#parameters for the analysis 
effect_size = 0.2
alpha = 0.05 # significance level
power = 0.3

power_analysis = TTestIndPower()
sample_size = power_analysis.solve_power(effect_size = effect_size, 
                                         power = power, 
                                         alpha = alpha)

print('Required sample size: {0:.2f}'.format(sample_size))

您可以使用例如数值求解 effect_size 的方程式root_scalar:

from statsmodels.stats.power import TTestIndPower
from scipy import optimize

sample_size = 100
alpha = 0.05
power = 0.3
power_analysis = TTestIndPower()

def f(effect_size):
    return power_analysis.solve_power(effect_size=effect_size, power=power, alpha = alpha) - sample_size

print('Maximum detectable effect size: {0:.2f}'.format(optimize.root_scalar(f, bracket=[0.01, 1.0]).root))

结果:

Maximum detectable effect size: 0.20

solve_power 可以解决给定其他变量中的任何一个变量。求解幂使用基于非中心 t 分布的显式公式。所有其他的都涉及寻根。

在给定功效、alpha 和观察次数的情况下查找效果大小可以使用

power_analysis = TTestIndPower()
effect_size = power_analysis.solve_power(effect_size = None, 
                                         power = 0.8, 
                                         alpha = 0.05,
                                         nobs1 = 100)

TTestIndPower 用于比较 2 个独立样本的测试。样本大小由第一个样本中的观察数 nobs1 和样本之间样本大小的比率 ratio 指定,默认为 1,即两个样本中的样本大小相等。