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

基于Python:最小二乘直线与平面拟合的R²比较

解答:3D平面拟合的R²计算与2D R²的可比性

一、如何从3D拟合残差计算R²

R²的核心逻辑是模型能解释的响应变量变异占总变异的比例,公式可以简化为:

R² = 1 - (残差的变异 / 响应变量z的总变异)

结合你已有的3D拟合代码,已经得到了残差errors,只需要稍作转换就能计算出R²:

对应你的补充代码实现

import numpy as np

# 将矩阵格式的errors转为一维数组
E = np.squeeze(np.asarray(errors))
Z = np.array(zs)

# 计算3D拟合的R²
r2_3d = 1 - (E.var() / Z.var())

等价的平方和计算方式

你也可以用平方和来计算(和方差法结果一致,因为方差是平方和除以样本量,比例会相互抵消):

ss_res = np.sum(E ** 2)  # 残差平方和
ss_total = np.sum((Z - Z.mean()) ** 2)  # z的总平方和
r2_3d = 1 - (ss_res / ss_total)

两种方法本质相同,选你习惯的方式即可。

二、3D的R²能否和2D的R²比较?

完全可以直接比较,原因很明确:

  • 两者的响应变量都是zs,R²的计算基准完全一致——都是衡量模型对z的变异的解释程度。
  • 2D拟合是用x单独解释z,3D拟合是用x+y共同解释z,对比两者的R²,就能直观看到加入y后对模型解释力的提升。

对比的实际意义:

  • 如果3D的R²比2D的提升微乎其微,说明y分量对解释z的变异几乎没有帮助,这时候完全可以忽略y。
  • 如果3D的R²比2D的提升明显,说明y对z的影响不可忽视,不能轻易忽略。

⚠️ 小提醒:R²本身会随着加入的变量增多而非递减(哪怕变量没实际作用),如果想要更严谨地判断y是否有显著贡献,你可以考虑计算调整R²(会对变量数量做惩罚),或者对3D模型中y的系数做显著性检验(比如t检验)。

补充:2D拟合的R²获取

你的2D代码用了stats.linregress,返回的r_value是x和z的皮尔逊相关系数,它的平方就是2D拟合的R²:

from scipy import stats

slope, intercept, r_value, p_value, std_err = stats.linregress(xs, zs)
r2_2d = r_value ** 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:29:26