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

MATLAB中anova1做ANOVA后计算预测值及复现SAS结果的方法

MATLAB复现SAS线性回归分析的解决方案

你当前的MATLAB代码用anova1做单因素方差分析(仅考虑BLOC),但SAS代码实际是用proc reg拟合了包含BLOC和ENTRY两个自变量的线性回归模型,这是两者结果差异的核心原因。以下是对应解决方案:

1. 复现SAS的方差分析结果

SAS的proc reg输出的方差分析表是针对双自变量线性回归模型的,而非单因素ANOVA。在MATLAB中需用fitlm函数拟合相同模型,才能得到与SAS一致的结果:

data = readtable('data.txt', "VariableNamesLine", 1);
% 拟合包含BLOC和ENTRY的线性回归模型,与SAS proc reg的model hddt=bloc entry一致
lm_model = fitlm(data, 'HDDT ~ BLOC + ENTRY');
% 查看方差分析表,对应SAS proc reg输出的ANOVA部分
disp(lm_model.ANOVA);

如果需要更贴近SAS的输出格式,可调用anova(lm_model)生成详细的方差分析结果。

2. 计算预测值与残差

拟合线性模型后,直接用predict函数计算预测值,残差可通过模型对象的Residuals属性获取,或用响应变量减去预测值:

% 计算预测值,对应SAS的output p=predicted
predicted = predict(lm_model, data);
% 计算残差,对应SAS的output r=residual
residual = data.HDDT - predicted;
% 或者直接从模型对象提取残差
residual = lm_model.Residuals.Raw;

绘制残差-预测值散点图

对应SAS的proc plot,MATLAB可使用scatter函数生成:

scatter(predicted, residual);
xlabel('Predicted Value');
ylabel('Residual');
title('Residual vs Predicted');
grid on;

补充说明

  • 若SAS中BLOC或ENTRY是分类变量,需确保MATLAB读取数据时正确识别为分类类型,可使用categorical函数转换:
    data.BLOC = categorical(data.BLOC);
    data.ENTRY = categorical(data.ENTRY);
    
  • 若需将结果输出到类似RTF的文件,MATLAB可使用publish功能或fprintf写入文件。

内容的提问来源于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 08:56:09