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
相关产品推荐
相关产品推荐

