【数学建模入门】时间序列|山猫数量预测

山猫数量预测

某地区山猫的数量在连续114年的统计数据如表下所示。分析该数据得出山猫的生长规律,并预测以后两个年度山猫的数量。

在这里插入图片描述

数据的文本格式

269	321	585	871	1475	2821	3928	5943	4950	2577	523	98
184	279	409	2285	2685	3409	1824	409	151	45	68	213
546	1033	2129	2536	957	361	377	225	360	731	1638	2725
2871	2119	684	299	236	245	552	1623	3311	6721	4254	687
255	473	358	784	1594	1676	2251	1426	756	299	201	229
469	736	2042	2811	4431	2511	389	73	39	49	59	188
377	1292	4031	3495	537	105	153	387	758	1307	3465	6991
6313	3794	1836	345	382	808	1388	2713	3800	309	2985	3790
674	71	80	108	229	399	1132	2432	3575	2935	1537	529
485	662	1000	1520	2657	3396						

ARIMA vs ARMAX

ARIMA(Autoregressive Integrated Moving Average Model):自回归积分滑动平均模型,用于非平稳序列模型。

模型的原理为:先将非平稳序列经过d 阶差分得到平稳序列,对得到的平稳序列进行ARMA的模型预测。

对于一个非平稳序列模型,若必须对时间序列做 d 阶差分才能得到一个平稳序列,则使用ARIMA(p,d,q)模型,其中 d 是差分的阶数,p为自回归项数,q为移动平均项数。


ARMAX(Autoregressive Moving Average with Extra Input):带额外输入(可理解为外部干扰项)的自回归移动平均模型,模型结构为

在这里插入图片描述
矩阵表示可简化为:
在这里插入图片描述

其中,y(t)——随时间的输出值

       na——系统极点个数

       nb——系统零点个数 + 1

       nc——系数C的个数

       nk——在输入影响输出之前(也称系统的死区时间)发生的输入样本数

       y(t−1)…y(t−na) ——当前输出所依赖的先前的一系列输出

       u(t−nk)…u(t−nk−nb+1)——当前输出所依赖的先前和延迟的一系列输入

       e(t−1)…e(t−nc)——白噪声干扰值

  参数na、nb和nc是ARMAX模型的阶数,nk是延迟值。q是延迟因子,q的几次方作用在yt上,yt就倒退几个时间,如q^3* yt= y( t-3)。其中,

流程图

在这里插入图片描述

数据处理

clc,clear
a=textread('data84.txt');%把原始数据保存到纯文本文件data84.txt
%进行数据处理
a=a';
a=nonzeros(a);
n=length(a);
figure,plot(a,'.-');

选择ARMA模型

figure,subplot(2,1,1),autocorr(a); %自相关函数图像
subplot(2,1,2),parcorr(a); %偏相关函数图像
拖尾:始终有非零取值,不会在k大于某个常数后就恒等于零(或在0附近随机波动)

截尾:在大于某个常数k后快速趋于0为k阶截尾

1.截尾和拖尾判断
2.截尾和拖尾判断
3.截尾和拖尾判断

注意置信上下界对拖尾和截尾判断的影响

自相关函数和偏相关函数曲线。

在这里插入图片描述
通过自相关函数和偏相关函数的曲线判断使用ARMA模型。

在这里插入图片描述
可以看到数量成周期性变化,故选择ARIMA模型。

差分运算

for i = 11:n
    b(i-10) = a(i)-a(i-10);
end
b=b';
figure,plot(b,'.-');

在这里插入图片描述

AIC BIC 准则确定p,q

%AIC BIC 准则进行定阶
k=0; %初始化试探模型的个数
for i = 0:3
    for j = 0:3
        if i==0 && j==0
            continue
        elseif i==0
            ToEstMd=arima('MALags',1:j,'Constant',0); %指定模型的结构
        elseif j==0
            ToEstMd=arima('ARLags',1:i,'Constant',0); %指定模型的结构
        else
            ToEstMd=arima('ARLags',1:i,'MALags',1:j,'Constant',0);%指定模型结构
        end
        k=k+1;R(k)=i;M(k)=j;
        [EstMd,EstParamCov,logL,info]=estimate(ToEstMd,w);
        numParams=sum(any(EstParamCov)); %计算拟合参数的个数
        %AIC BIC
        [aic(k),bic(k)]=aicbic(logL,numParams,n2);
    end
end
fprintf('R,M,AIC,BIC的对应值如下\n % f');
check=[R',M',aic',bic']

p=1,q=1

AIC、BIC越小越好

注意差分还原情况

最后预测数据:
在这里插入图片描述


参考资料:
b站讲解资料
ARMA模型参数估计——增广最小二乘

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
数学时间序列预测中是非常常见的应用之一。在Matlab中,有多种方法可以用于时间序列预测,如回归分析、概率估计、时间序列和机器学习等方法。其中,时间序列方法是一种猜测数据前后存在关系的方法。例如,一次移动平均算法是猜测每个数据与最近的部分数据的均值存在某种关系,指数平滑法是猜测每个数据与之前历史数据的加权平均存在某种关系。这些算法都可归类为时间序列算法,但对于更复杂的数据特征,可能需要使用微分方程进行预测,通过微分方程可以直接预测数据并用于灰色系统,将无规则数据转化为有规律的生成序列。此外,机器学习也是一种常用的时间序列预测方法,它可以根据历史数据的式和特征学习到预测型,并使用该型对未来的数据进行预测。因此,Matlab提供了丰富的工具和函数,可以帮助数学师在时间序列预测中选择合适的方法和实现预测型。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [数学各类算法学习笔记(附matlab代码)](https://blog.csdn.net/dongmie1999/article/details/104101962)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [数学 ————统计问题之预测(一)](https://blog.csdn.net/nightmare_dimple/article/details/74264491)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lydia.na

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值