Statsmodels FTestAnovaPower继承异常:参数报错与返回内存地址问题
解决Statsmodels FTestAnovaPower继承与样本量计算问题
问题1:「意外关键字参数」错误的修复
错误根源:
- 未正确调用父类
__init__方法,导致继承的类未初始化父类核心属性 - 调用
solve_power时错误传入self作为参数,且未使用关键字参数传递参数 X_func是__init__内的局部变量,new_lst方法无法访问
问题2:仅返回内存地址的修复
错误根源:
new_lst中直接使用vals,未通过self.vals访问实例属性,变量作用域错误- 调用
solve_power时未明确指定要计算的参数(需将目标参数设为None)
修正后的完整代码
import statsmodels.stats.power as smp class smpl_pwr(smp.FTestAnovaPower): def __init__(self, effect_size=None, nobs=None, alpha=None, power=None, k_groups=None, vals=None): # 正确调用父类初始化,继承父类所有属性与方法 super().__init__( effect_size=effect_size, nobs=nobs, alpha=alpha, power=power, k_groups=k_groups ) self.vals = vals # 存储待迭代的power值列表 def new_lst(self): smpl_size = [] # 遍历每个power值,计算对应样本量 for power_val in self.vals: sample_n = self.solve_power( effect_size=self.effect_size, alpha=self.alpha, k_groups=self.k_groups, power=power_val, nobs=None # 指定计算样本量,必须设为None ) smpl_size.append(sample_n) return smpl_size
使用示例
# 实例化计算器,固定已知参数,传入待迭代的power列表 calculator = smpl_pwr( effect_size=0.5, alpha=0.05, k_groups=3, vals=[0.7, 0.8, 0.9] ) # 生成对应样本量列表 sample_sizes = calculator.new_lst() print(sample_sizes)
关键修复说明
- 用
super().__init__正确初始化父类,避免重复创建FTestAnovaPower实例 - 直接调用继承的
solve_power方法,无需额外实例化父类 - 所有参数传递使用关键字参数,避免位置参数匹配错误
- 访问实例属性时统一使用
self.xxx,确保变量作用域正确 - 计算样本量时必须将
nobs设为None,明确告知函数需计算该参数
内容的提问来源于stack exchange,提问作者Hasben0
相关产品推荐
相关产品推荐

