
简介面向经济、统计类专业学生的结课论文参考资源以我国1952—2011年共60年的社会消费品零售总额为研究对象系统讲解运用SAS软件开展时间序列分析的全过程从序列平稳性检验、模型识别与定阶到ARIMA模型拟合、残差白噪声检验及下一年度预测并结合国家经济、政策与消费市场背景讨论变化规律最终为政府宏观决策与企业经营策略提供参考依据。资源包为单个docx文档大小约364KB正文完整涵盖引言、指标说明、ARIMA模型原理与分类、建模步骤、SAS输出解读、结果检验和结论展望结构清晰便于直接参照或复用作课程论文框架。已有1618人学习下载非常适合正在完成时间序列分析作业、准备结课论文或希望快速上手ARIMA建模流程与实现的读者。1. 时间序列分析结课论文把 1952—2011 年消费数据完整跑通 ARIMA如果你手头要交一份时间序列分析的结课作业又不想只交一堆公式截图那这份以“全国社会消费品零售总额”为对象的 SAS 完整论文是能直接照着复现的。它把数据录入、时序图、差分、平稳性检验、模型定阶、残差检验到未来 5 期预测的整条链路都走了一遍用的是 1952—2011 年间 60 条年度数据刚好是 ARIMA 模型最经典的适用样本量。论文里附了 SAS 程序和数据卡片适合两类人一是刚接触时间序列、需要一份可抄作业模板的学生二是想快速上手 SAS 做经济数据建模的从业者。2. 数据准备与 SAS 录入先把 60 条年度数据喂进数据集2.1 数据卡片格式与 time 变量的生成论文用的是 SAS 的 cards 语句直接在数据步里录数。这种写法的好处是数据与程序放在一起提交一次就能建好数据集。核心代码如下data curriculum_design; input x; difxdif(x); timeintnx(year,01jan1952d,_n_-1); format time date.; cards; 276.8 348 381.1 392.2 461 474.2 548 638 696.96 607.7 604 604.5 638.2 670.3 732.8 770.5 737.3 801.5 858 929.2 1023.3 1106.7 ... 后续数据省略 ... ; run;input x 中的 表示同一行可以连续读入多个观测值每遇到一个空格就取一个数。difxdif(x) 是一阶差分函数得到当期值减去上一期值。timeintnx(year,01jan1952d,n-1) 从 1952 年 1 月 1 日逐年递增n-1 从 0 开始刚好生成 1952、1953、…… 2011 共 60 个年份点。format time date. 保证输出图形横轴是年份而不是数字序号。需要注意cards 数据块里如果有千分位逗号比如“52,516.3”SAS 会把这个逗号当成分隔符或者直接报错。实操中我一般先把数据里的逗号全部清掉再粘贴进 cards 块。2.2 proc gplot 画原始序列与差分序列建模前先画图是必须的动作。论文里用了两个 gplot一张是原始序列 xtime一张是差分序列 difxtimeproc gplot datacurriculum_design; plot x*time difx*time; symbol cblack vstar ijoin; run;symbol 语句里 cblack 指定颜色vstar 是数据点标记为星号ijoin 把点按顺序连线。实际出图时原始序列图能明显看出一个长期上升趋势1952 年 276.8 亿元到 2011 年的 18 万多亿元直接画出来是条陡峭的指数型曲线这种形态基本可以判定非平稳。一阶差分图则是在零轴附近震荡1952 到 1960 年代的差分值很小1980 年代后期开始振幅变大1995—2000 年有一段明显的剧烈波动对应亚洲金融危机冲击下的消费需求不振。这些图不只是用来“看趋势”也决定了后面要不要继续差分。2.3 cards 录入方式的局限性cards 方式适合数据量小、一次性提交的场景缺点是数据一旦写错排查位置很痛苦而且不能直接引用外部 Excel 或 CSV 文件。如果数据源是单独的表格文件我更建议用 proc import 读入 CSV再用 data 步加工。但对于课程设计这种一次性作业cards 反而是最省事的——所有变换都在同一段程序里完成交论文时附上这段代码老师一眼能看出数据怎么来的。3. 平稳性检验与差分非平稳序列先消除趋势再建模3.1 时序图判趋势明显的非平稳论文把原始序列图作为判定非平稳的第一依据这个顺序是对的。1952—2011 年的社会消费品零售总额序列几乎单调上升尤其是 1990 年之后增速明显加快这样的时序图不需要任何统计检验就能断定存在趋势项直接建模 ARIMA 会得到虚假回归。判定非平稳之后要做的事不是急着套模型而是先问一个问题趋势是确定性的还是随机性的如果只是均值随时间变化可以用差分消除如果方差也在变化可能还需要做对数变换。论文里的一阶差分在实践中把趋势基本消除了说明这个序列的方差问题不严重不需要先取对数。这一点在建模时值得注意很多初学者一上来就对数差分实际很多经济序列直接差分就够了。3.2 一阶差分与 proc arima 的 identify 写法proc arima 的 identify 语句可以直接指定差分的阶数不需要手动先建差分变量再建模。论文的程序把两种方式都演示了proc arima datacurriculum_design; identify varx(1) nlag22; estimate p1 noint; forecast lead5 idtime; run;varx(1) 是 SAS 里写差分最简的语法表示对 x 做 1 阶差分后再识别。nlag22 是计算自相关函数和偏自相关函数的最大滞后期数这里取 22是因为 60 个样本大约支持到 n/3 左右再多滞后期的自相关系数估计就不稳了。estimate p1 是估计 AR(1) 模型noint 表示不含截距项。需要注意d 的选择要看差分后是否平稳而不是越差越多。论文里做了一阶差分后自相关图显示延迟 3 阶之后系数都落入 2 倍标准差范围内且衰减很快说明一阶差分序列已经平稳不需要二次差分。过度差分会让序列损失太多信息而且方差会被放大这一点在后面的避坑章节还会再提。3.3 白噪声检验平稳≠可以建模平稳序列和白噪声序列是两回事。平稳只说明序列的统计性质不随时间变化白噪声则说明序列之间没有相关性。如果差分后序列是白噪声那后面就没有建模的必要了因为没有任何可提取的信息。论文对一阶差分序列做了纯随机性检验在显著水平 0.01 的条件下 p 值远小于 0.01因此判定差分序列是平稳非白噪声序列。这一步很多初学者会忽略直接跳到定阶——后果是模型可能拟合了一个根本没有相关结构的随机过程。在 SAS 里 identify 语句的输出中可以看白噪声检验的 p 值表通常看延迟 6 期和延迟 12 期的结果就够了。如果 p 值小于显著性水平说明序列存在自相关性可以继续建模。4. ARIMA 定阶与参数估计ACF、PACF 与 BIC 的配合4.1 截尾和拖尾定 p 和 q 的第一手判据模型识别阶段看的是自相关函数ACF和偏自相关函数PACF的图形形态。规则是PACF 在 p 阶后截尾且 ACF 拖尾选 AR(p)ACF 在 q 阶后截尾且 PACF 拖尾选 MA(q)两者都拖尾选 ARMA(p,q)截尾的意思是超过某个滞后阶数后系数突然变得不显著基本上落在两倍标准差带以内拖尾则是系数缓慢衰减拖着一条尾巴。论文里输出图显示差分序列的自相关函数在延迟 3 阶后截尾偏自相关函数在延迟 1 阶后截尾据此选了 ARMA(3,1) 作为候选。但这里有一个值得注意的点ACF 和 PACF 的“截尾”判断经常有主观性尤其样本量不大的时候同一个图不同人可能读出不同阶数。所以论文后面又用了信息准则来辅助定阶这是一种更客观的做法避免完全靠眼力。4.2 BIC 定阶让信息准则替你做决定论文用 BIC 准则在 p0 到 5、q0 到 5 的范围内搜索最小信息量SAS 里对应 minic 选项proc arima datacurriculum_design; identify varx nlag22 minic p(0:5) q(0:5); estimate p1; forecast lead5 idtime outresults; run;minic p(0:5) q(0:5) 会输出一张信息准则表行列分别对应 p 和 q值越小模型越优。论文中 BIC(1,2)12.27375 是最小值因此选择差分后序列的 ARMA(1,2) 模型。注意这里的写法identify varx 没有带差分阶数estimate p1 估计的是对原序列直接拟合 AR(1)这个和前面选出来的 ARMA(1,2) 并不一致。论文后面预测阶段实际上用的是 ARIMA(1,1,0)这个差异在文档里没有明确解释属于需要自己梳理清楚的地方。我的理解是完整的等价关系应该写成原序列属于 ARIMA(p,d,q)差分 d 次后的序列属于 ARMA(p,q)。如果你定出来的是 ARMA(1,2) 加一阶差分那就对应 ARIMA(1,1,2)。4.3 参数估计的显著性判断模型定阶后还要看每个参数的 t 检验是否显著。参数不显著的情况在 ARIMA 建模里很常见尤其是 p 和 q 都偏大的时候。论文的输出结果显示参数估计显著随后把模型写成了带估计系数和残差方差的形式。经验上如果某个参数不显著我一般会先尝试把对应的阶数降一档再看 BIC 和 AIC 是否明显变差。如果模型简化后信息准则变化不大就优先选更简单的模型。时间序列建模的原则是“能用简单模型解释就不引入复杂结构”因为额外参数带来的拟合提升往往在预测阶段被方差放大抵消掉。5. 残差检验与预测输出白噪声验证与 5 期预测出图5.1 残差白噪声检验信息提取是否充分模型拟合完毕后需要验证残差序列是否为白噪声。如果残差里还有自相关说明模型没有把信息提取干净需要回到定阶步骤重新选 p、q。论文里观察残差的自相关图和偏自相关图几乎 95% 的系数值都落在 2σ 范围内因此认为残差是白噪声序列模型成立。SAS 中可以用 estimate 语句后加 check 选项来实现残差白噪声检验proc arima datacurriculum_design; identify varx(1) nlag22; estimate p1 q2; check lag12; run;check lag12 会输出残差的 ACF、PACF 以及针对多阶滞后的白噪声检验统计量p 值大于 0.05 就基本可以认为残差是白噪声。这一步是判断模型是否有效的硬指标比单纯看拟合优度更值得信赖。5.2 预测与置信区间图最终预测代码把原始序列、预测值、下界和上界叠在一张图上proc gplot dataresults; plot x*time1 forecast*time2 l95*time3 u95*time3/overlay; symbol1 cblack inone vstar; symbol2 cred ijoin vnone; symbol3 cgreen ijoin vnone l32; run;xtime1 表示原始观测forecasttime2 是点预测l95 和 u95 是 95% 置信区间下边界和上边界。symbol2 用红色实线连接预测值symbol3 用绿色虚线表示置信区间边界l32 指定虚线线型。论文对 2012—2016 年做了 5 期预测结果显示社会消费品零售总额继续上涨但增速趋缓。这个结论本身不是重点重点是预测图里能清楚看到置信区间随时间逐步变宽——这是 ARIMA 模型的固有特性预测步长越远不确定性越大。初学者看到区间变宽不用慌这不是模型出问题而是模型在诚实告诉你远期预测的可靠性在下降。6. 避坑手册SAS 时间序列建模的 5 个典型翻车点6.1 cards 数据里混入千分位逗号导致读入失败现象提交 SAS 程序后日志报错提示输入缓冲区中遇到无效字符数据集行数比预期少。原因论文数据里像“52,516.3”这种带逗号的数字在 cards 自由格式输入中会被当成非法字符。SAS 的列表输入默认按空格分隔逗号既不是分隔符也不是数值的一部分会导致该观测值读入失败或错位。解决录数据前先做一次全局替换把千分位逗号全部删掉保存成纯数字加空格的格式。如果数据在 Excel 里导出为 CSV 后用 proc import 读入再用 data 步加工就不需要手工清理。6.2 定阶与预测阶段模型不一致现象论文前面用 BIC 选出 ARMA(1,2)但预测章节写的是 ARIMA(1,1,0)两者对不上。原因这是文档里一个真实的模糊点。ARIMA(p,d,q) 与差分后序列的 ARMA(p,q) 是等价关系但最终预测代码有时会简化为带 d1 的 AR(1) 模型。读者如果不注意会以为两个模型没关系。解决自己动手梳理一遍完整链路差分后定出 ARMA(p,q)则在原序列上对应 ARIMA(p,1,q)。如果要做 BIC 定阶就用 minic 结果里的最小项作为最终模型的依据不要在预测阶段随意改成别的阶数。论文里尽管有这个不一致整体流程依然是通的只是要弄明白每一段程序到底在估计什么。6.3 过度差分导致方差放大现象一阶差分后序列看起来还有轻微波动于是继续做二阶差分结果模型预测区间比一阶差分模型宽很多。原因差分每做一次就损失一个观测值同时会放大高频噪声。对于年度数据一阶差分通常足以消除趋势如果序列本身是随机游走多差一次反而让 MA 部分出现可逆性问题。解决用 ADF 检验或 KPSS 检验辅助判断不要只看时序图。差分后如果自相关图快速落入 2 倍标准差带内就不要再继续差分。论文里一阶差分后自相关系数在延迟 3 阶就衰减到零附近这是很明确的信号。6.4 白噪声检验只看图不看 p 值现象残差自相关图看起来都在范围内但真正跑 Ljung-Box 检验时 p 值小于 0.05模型其实没有通过检验。原因图形判断有主观性样本量小的时候即使残差有微弱相关图上也很难看出来。白噪声检验是一个合计统计量把多阶滞后的相关性放在一起检验比肉眼判断更可靠。解决每次 estimate 之后都加上 check 语句看延迟 6、12、18 期的 p 值。SAS 默认输出里就有这些统计量养成“建模必看残差白噪声”的习惯能省掉大量回头返工的时间。6.5 预测区间持续扩大的真实原因现象预测图上置信区间随步长扩大呈喇叭口张开有人以为代码写错了。原因ARIMA 模型在做多步预测时误差项会累积。尤其当模型包含 MA 项时预测误差方差会随步长线性增长这由模型结构决定不是程序 bug。解决区分点预测和区间预测。点预测可以用于短期判断区间预测用于表达不确定性。论文里预测 5 期是比较合适的再多几期区间宽到没有参考意义时就应该明确说明 ARIMA 不适合长期预测。7. 把论文里的流程改造成自己的时间序列模板7.1 验收这份资源时应该关注什么拿到这份结课论文最先做的是把附录的 SAS 程序原样跑一遍。数据只有 60 条运行时不会超过几秒。跑完看两样东西日志里有没有 error 或 warning以及输出的自相关图是否和论文截图一致。一致就说明环境没问题之后可以开始替换数据。7.2 从年度数据换到月度数据的注意点论文用的是年度数据不需要考虑季节项。如果你拿到的数据是月度或季度序列就要在原流程里多一步季节差分或 SARIMA 扩展。常见的做法是 identify varx(1,12)其中括号里第二个参数是季节差分步长。定阶时 minic 的范围也可以适当加大给季节项留空间。我的习惯是把这套流程保存成一个 SAS 模板下次换数据时只改三处cards 或 proc import 的数据来源、identify 里的差分阶数、forecast 的 lead 值。模板的好处是不会漏步骤从数据读入到残差检验一气呵成。当初我自己做第一个 ARIMA 项目时就是按这个套路来先跑通一次全流程再把参数逐个调。从那以后每次拿到时间序列数据我都强制走一遍“时序图—差分—白噪声—定阶—残差”这个顺序公式后面才是真正能落地的东西。希望帮到你。本文还有配套的精品资源点击获取