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

解析SAS回归脚本功能及MATLAB复现困惑

如何在MATLAB中复现SAS线性回归脚本的结果

明确SAS脚本的实际功能

首先需要澄清:你提供的SAS脚本执行的是多元线性回归分析,而非方差分析(ANOVA),这是结果差异的核心原因:

  • 脚本通过proc reg拟合模型:hddt = β₀ + β₁*bloc + β₂*entry + ε
  • 指定/r和/p参数输出残差与预测值
  • 将残差(命名为residual)、预测值(命名为predicted)写入新数据集new

当前问题分析

你最初用MATLAB的anova1()仅对bloc做单因素ANOVA,结果与demo匹配只是巧合;但改用双因素ANOVA(包含bloc和entry)时,结果差异明显——因为ANOVA和线性回归的模型设定、参数估计逻辑完全不同:

  • ANOVA默认将自变量视为分类变量,核心关注组间差异的显著性
  • 而SAS的proc reg默认将bloc和entry当作连续自变量,拟合的是全局线性关系

MATLAB复现方案

要准确复现SAS脚本的结果,需在MATLAB中执行多元线性回归,而非ANOVA:

  1. 构建回归模型矩阵:
    % 假设数据存储在变量data中,包含hddt、bloc、entry列
    X = [ones(size(data.hddt)), data.bloc, data.entry];
    y = data.hddt;
    
  2. 拟合线性回归并获取参数、预测值、残差:
    [b, bint, r, rint, stats] = regress(y, X);
    predicted = X * b; % 计算预测值
    residual = r; % 残差
    
  3. 将结果保存为类似SAS数据集new的结构:
    new_dataset = table(predicted, residual, 'VariableNames', {'predicted', 'residual'});
    

关键注意事项

  • 如果SAS脚本中bloc或entry是分类变量(需查看原始数据定义),则需要在MATLAB中用dummyvar()生成哑变量后再拟合回归,否则结果会出现偏差
  • 对比SAS的回归输出时,需关注系数估计值、R²、残差平方和等指标,而非ANOVA的组间/组内平方和

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:35:55