通过固定 Beta 计算 R 平方,实现无截距的多重线性回归

问题描述 投票:0回答:1

我想根据我拥有的一些数据修复多元线性回归中的贝塔值,这会导致基于 Tibshirani、Hastie 等人中提到的投影方法的 R 方值小于 0% 且大于 100%。所有书。

固定 beta 值以运行无截距的多元线性回归后,计算 R 方的最佳方法是什么 -

加载数据

import numpy as np
import pandas as pd

import statsmodels.api as sm

data = sm.datasets.get_rdataset('iris').data

定义

x
y
变量 -

x = data.iloc[:, 1:4].values
y = data.iloc[:, 0].values

按照 Tibshirani 书求解 beta -

betas = np.linalg.solve(x.T @ x, x.T @ y)

array([ 1.12106169,  0.92352887, -0.89567583])
sm.OLS(y, x).fit().params

array([ 1.12106169,  0.92352887, -0.89567583])

或者,根据对环境的一些了解来固定测试版 -

alt_betas = [3.7, -10, 45.78]

现在,以 3 种方式计算 R 平方 -

  1. 使用无拦截的 Statsmodel

  2. 使用 R Sq 的投影法

  3. 使用投影方法但使用 RSq 的固定 Beta

统计模型


sm.OLS(y, x).fit().rsquared * 100

99.61972754365206

投影


(y @ x @ betas / (y @ y) ) * 100

99.61972754365208

具有固定贝塔值的投影


(y @ x @ alt_betas / (y @ y) ) * 100

511.1237918393523

现在我明白,鉴于我使用不同的 beta,它应该有所不同,但这违反了 RSq 应在 0 和 1 之间的规则。

如果我有一些替代测试版,有没有办法修复它并使用

statsmodels OLS
来计算 R 平方?

想一想,因为我需要使用替代 Beta 作为我的用例,我认为从我的角度来看,这是环境的真实代表。

提前致谢!

pandas numpy statistics regression statsmodels
1个回答
0
投票

从概念上讲,R 方(“R2”)是零模型的残差平方和与特定感兴趣模型的残差平方和之间的相对差。

理想模型产生的预测值与实际数据值完全相等,残差平方和为零,因此 R2 = 1。不太理想的模型获得小于 1 的 R2 值。

不良数据模型可能会获得比零模型更差的残差。例如,模型可以通过反转每个数据值的符号来生成“预测”值。如果模型残差平方和大于零模型的模型残差平方和,则 R2 将为负。

通常,零模型是所建模数据的平均值(零模型的预测值都是相同的,并且等于数据的平均值)。

  • 零模型的残差测量与平均值的偏差。
  • 零模型的残差平方和与第二中心矩(方差)成正比。

或者,零模型可以为零(零模型的预测值全部相同,等于 0)。

  • 这里空模型的残差等于数据值本身。
  • 零(零)模型的残差平方和与二阶矩(即关于零的非中心矩)成正比。

R2 的线性代数表达式可以从矩阵形式的 OLS如何以矩阵形式表示 R 平方?.

中的信息导出。

言归正传,我们可以编写一个 Python 函数来使用线性代数计算 R2(百分比)。该函数使用上述两个空模型之一。

def r2pct(x, y, betas, central=True):
    y_baseline = y - y.mean() if central else y
    ss_null = y_baseline @ y_baseline
    ss_model = y@y - 2*(betas.T @ x.T @ y) + (betas.T @ x.T @ x @ betas)
    return (1 - ss_model/ss_null) * 100

最佳拟合 beta 的 R2,相对于空模型 = 0

这与您原始帖子中的值相符。这些 Beta 值占数据相对于零的方差的 99.6%。

r2pct(x, y, betas, central=False)
# 99.61972754365202

最佳拟合 beta 的 R2,相对于空模型 = 平均值

这些 beta 值占数据方差的 80.6%(即与平均值的方差)。

r2pct(x, y, betas)
# 80.55673214701147

R2 表示“固定”beta,相对于空模型 = 0

负 R2 值表明这些替代 beta 生成的模型与数据的拟合效果非常差,比仅仅预测每个数据值为 0 更糟糕。

r2pct(x, y, alt_betas, central=False)
# -2270.59299658298

R2 表示“固定”beta,相对于空模型 = 平均值

这些 Beta 产生的模型与数据的拟合效果非常差,比仅仅预测每个数据值等于数据平均值还要糟糕。

r2pct(x, y, alt_betas)
# -121108.02817441802
© www.soinside.com 2019 - 2024. All rights reserved.