You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中计算各预测变量与因变量的调整R方等统计量的咨询

解决单变量与因变量的调整R²及p值计算问题

嘿,我懂你现在的处境——已经搞定了用相关系数矩阵算单个自变量和因变量的R、R²,但调整R²怎么算就卡壳了,还得加上p值对吧?咱们直接上干货,一步步解决这个问题。

首先得明确:你要的是每个自变量单独和因变量做简单线性回归对应的调整R²和p值,对吧?毕竟在多元回归前先做单变量探索性分析是很合理的思路。

核心原理

  1. 调整R²的公式:对于简单线性回归(仅一个自变量),调整R²的计算公式是:

    调整R² = 1 - [(1 - R²) * (n - 1) / (n - 2)]
    

    其中n是你的样本量。这个公式是多元调整R²的特例(因为k=1,只有一个自变量)。不过其实不用手动算,statsmodels库直接给我们现成的结果。

  2. p值的意义:这里的p值是指该自变量对因变量的线性关系是否显著的检验结果(简单回归中,自变量系数的p值和模型整体F检验的p值是完全一致的)。

代码实现(用pandas + statsmodels)

假设你的数据框叫df,因变量列名为'y',其他列都是自变量。直接运行下面的代码就能得到所有指标:

import pandas as pd
import statsmodels.api as sm

# 初始化存储结果的字典
result_dict = {
    '自变量名称': [],
    '相关系数R': [],
    'R²': [],
    '调整R²': [],
    'p值': []
}

# 提取因变量和自变量列表
y = df['y']
independent_cols = [col for col in df.columns if col != 'y']
sample_size = len(df)

# 遍历每个自变量计算指标
for col in independent_cols:
    # 准备自变量数据(添加截距项,statsmodels需要手动加)
    X = sm.add_constant(df[col])
    # 拟合简单线性回归模型
    model = sm.OLS(y, X).fit()
    
    # 提取各个指标
    r = df[col].corr(y)  # 和你之前用相关矩阵得到的R完全一致
    r_squared = model.rsquared
    adj_r_squared = model.rsquared_adj  # 直接用模型自带的调整R²,不用手动算
    p_value = model.pvalues[col]  # 取该自变量系数的p值
    
    # 把结果存入字典
    result_dict['自变量名称'].append(col)
    result_dict['相关系数R'].append(round(r, 4))
    result_dict['R²'].append(round(r_squared, 4))
    result_dict['调整R²'].append(round(adj_r_squared, 4))
    result_dict['p值'].append(round(p_value, 4))

# 转成DataFrame方便查看
result_df = pd.DataFrame(result_dict)
print(result_df)

关键说明

  • 为什么用statsmodels而不是自己算调整R²?因为它不仅能直接给出rsquared_adj,还能顺便帮我们算出p值,一举两得,而且避免手动计算可能出错。
  • 你之前用相关系数矩阵得到的R和这里的df[col].corr(y)结果完全一致,R²就是R的平方,和模型的rsquared也完全匹配——这验证了两种方法的一致性。
  • p值小于0.05(常用显著性水平)时,说明该自变量和因变量的线性关系在统计上是显著的。

内容的提问来源于stack exchange,提问作者Marco

火山引擎 最新活动