解析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:
- 构建回归模型矩阵:
% 假设数据存储在变量data中,包含hddt、bloc、entry列 X = [ones(size(data.hddt)), data.bloc, data.entry]; y = data.hddt; - 拟合线性回归并获取参数、预测值、残差:
[b, bint, r, rint, stats] = regress(y, X); predicted = X * b; % 计算预测值 residual = r; % 残差 - 将结果保存为类似SAS数据集
new的结构:new_dataset = table(predicted, residual, 'VariableNames', {'predicted', 'residual'});
关键注意事项
- 如果SAS脚本中
bloc或entry是分类变量(需查看原始数据定义),则需要在MATLAB中用dummyvar()生成哑变量后再拟合回归,否则结果会出现偏差 - 对比SAS的回归输出时,需关注系数估计值、R²、残差平方和等指标,而非ANOVA的组间/组内平方和
内容的提问来源于stack exchange,提问作者Buck Thorn
相关产品推荐
相关产品推荐

