You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在SAS中从ARIMA模型获取MSE并计算时间序列的MSE与Bias?

别发愁,我来给你梳理清楚在SAS里怎么从ARIMA模型提取MSE,还有手动计算时间序列的MSE和Bias的具体操作!

一、从ARIMA模型中直接提取MSE

当你用PROC ARIMA拟合模型后,SAS会自动输出模型的拟合统计量(包括MSE),但如果想把这个值存到数据集或者宏变量里方便后续使用,可以用OUTSTAT=选项来实现:

举个实际的代码示例,你只要替换成自己的数据集、目标变量和ARIMA阶数就行:

proc arima data=your_time_data;
    identify var=your_target_var; /* 替换成你的时间序列变量 */
    estimate p=1 d=1 q=1 outstat=model_metrics; /* p/d/q替换成你的模型阶数 */
run;

运行后,model_metrics数据集里会有一行TYPE='MSE'的观测,对应的VALUE列就是模型的MSE值。你可以用下面的代码提取查看:

/* 直接打印查看MSE */
proc print data=model_metrics;
    where type='MSE';
run;

/* 或者把MSE存成宏变量,方便后续调用 */
data _null_;
    set model_metrics;
    where type='MSE';
    call symputx('arima_mse', value);
run;

%put ARIMA模型的MSE值:&arima_mse;
二、手动计算时间序列的MSE和Bias

如果是针对拟合值/预测值来计算MSE(均方误差)和Bias(偏差),核心是先拿到实际值和拟合/预测值,再做统计计算:

1. 先获取拟合值/预测值

PROC ARIMAFORECAST语句可以把拟合值或预测值输出到新数据集里:

proc arima data=your_time_data;
    identify var=your_target_var;
    estimate p=1 d=1 q=1;
    forecast lead=0 out=pred_results; /* lead=0输出拟合值,lead>0则输出未来预测值 */
run;

pred_results数据集里,ACTUAL是实际观测值,FORECAST就是对应的拟合/预测值。

2. 计算MSE和Bias

这里给你两种简单的计算方式:

方式一:用PROC MEANS计算

data error_calc;
    set pred_results;
    error = actual - forecast; /* 计算单步误差 */
    squared_error = error**2; /* 计算误差平方 */
run;

proc means data=error_calc noprint;
    var error squared_error;
    output out=final_stats
        mean(error)=bias /* 偏差是误差的平均值 */
        mean(squared_error)=mse; /* MSE是误差平方的平均值 */
run;

proc print data=final_stats;
run;

方式二:用PROC SQL直接计算

如果你喜欢更简洁的代码,可以用SQL一步到位:

proc sql;
    create table final_stats as
    select
        mean(actual - forecast) as bias label='偏差',
        mean((actual - forecast)**2) as mse label='均方误差'
    from pred_results;
quit;

proc print data=final_stats;
run;
三、小提醒
  • 模型输出的MSE和你手动用拟合值计算的MSE应该是一致的,可以互相验证结果是否正确;
  • 偏差(Bias)的正负能反映预测的整体倾向:正偏差说明预测值整体偏低,负偏差则说明预测值整体偏高。

内容的提问来源于stack exchange,提问作者peter rocher

火山引擎 最新活动