You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 14:18:09