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

