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

Matlab中fitlm与regress函数的差异及输出不同原因咨询

MATLAB中fitlm与regress函数输出不同的原因

你提到的fitlm和regress并非功能完全一致的函数,二者输出差异主要来自以下几个核心设计区别:

1. 截距项的默认处理

  • regress默认不自动添加截距项:如果你的predictors矩阵没有手动插入全1列,它会直接拟合无截距的线性模型;
  • fitlm默认自动包含截距项:即使predictors里没有全1列,它也会自动添加该列,拟合带截距的线性模型。这是二者输出差异最常见的原因。

2. 统计量的计算逻辑

  • 你通过regress的stats获取的$R2$是**未调整的$R2$,而fitlm模型对象默认展示的是调整后的$R^2$**,二者计算公式不同:
    • 未调整$R^2 = 1 - \frac{残差平方和}{总平方和}$
    • 调整后$R^2 = 1 - \frac{残差平方和/(n-p)}{总平方和/(n-1)}$($n$为样本量,$p$为含截距的自变量个数)
  • 无截距模型下,regress的F统计量、p值与fitlm的对应统计量计算基准也不同——无截距模型的总平方和以原点为基准,有截距模型则以响应变量均值为基准。

3. 输入参数顺序差异

  • fitlm调用顺序:fitlm(predictors, response)(先自变量矩阵,后响应变量)
  • regress调用顺序:regress(response, predictors)(先响应变量,后自变量矩阵)
    如果参数顺序搞混,会直接导致错误结果,但这属于使用失误,而非函数设计差异。

4. 输出形式的区别

  • fitlm返回LinearModel类对象,包含系数、置信区间、残差、诊断统计量、模型可视化工具等全套信息,适合深度分析模型;
  • regress返回分散的数值结果(系数向量、置信区间数组、统计量数组等),更适合快速获取基础回归结果或批量计算场景。

让二者输出一致的方法

如果需要让两个函数得到完全相同的结果,可以做以下调整:

  • 给regress的自变量矩阵手动添加全1列,调用方式改为:
    [b,bint,r,rint,stats] = regress(response, [ones(size(predictors,1),1), predictors])
    
  • 或者让fitlm拟合无截距模型,调用方式改为:
    mdl = fitlm(predictors,response,'Intercept',false)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:20:14