如何在Python中计算R²的统计功效?
Python中计算R²统计功效的方法
在Python中,你可以通过线性回归的F检验功效分析间接计算R²的统计功效——因为R²的显著性检验本质就是F检验,二者完全对应。核心思路是先把R²转换为常用的效应量f²(公式:f² = R²/(1-R²)),再基于F分布完成功效计算。
方法1:使用statsmodels的power模块
statsmodels库提供了专门的线性回归功效分析工具,直接支持基于f²的功效计算,步骤简洁:
import statsmodels.stats.power as smp # 定义分析参数 r_squared = 0.2 # 预期的R²值 n_predictors = 3 # 自变量个数 alpha = 0.05 # 显著性水平 sample_size = 50 # 样本量 # 将R²转换为f²效应量 f_squared = r_squared / (1 - r_squared) # 初始化线性回归功效分析器 power_analyzer = smp.LinearModelPower() # 计算统计功效 power = power_analyzer.solve_power( effect_size=f_squared, nobs=sample_size, df_model=n_predictors, alpha=alpha ) print(f"统计功效: {power:.4f}") # 反向计算:已知目标功效,求所需样本量 required_sample = power_analyzer.solve_power( effect_size=f_squared, power=0.8, df_model=n_predictors, alpha=alpha ) print(f"达到0.8功效所需样本量: {round(required_sample)}")
方法2:自定义计算(基于F分布)
如果需要更灵活的控制逻辑,可以直接用scipy的F分布函数手动实现:
from scipy.stats import f def calculate_r2_power(r_squared, n_predictors, sample_size, alpha=0.05): f_squared = r_squared / (1 - r_squared) df1 = n_predictors # F检验分子自由度 df2 = sample_size - n_predictors - 1 # F检验分母自由度 # 计算显著性水平对应的临界F值 critical_f = f.ppf(1 - alpha, df1, df2) # 计算非中心参数 noncentrality = sample_size * f_squared # 功效 = 1 - 非中心F分布在临界值处的累积概率 power = 1 - f.ncdf(critical_f, df1, df2, noncentrality) return power # 示例调用 power = calculate_r2_power(r_squared=0.2, n_predictors=3, sample_size=50) print(f"统计功效: {power:.4f}")
注:这里的统计功效指的是在给定R²、样本量、自变量个数和显著性水平下,成功拒绝原假设(即检测到真实回归效应)的概率。
内容的提问来源于stack exchange,提问作者mrepic1123
相关产品推荐
相关产品推荐

