最小二乘法求AR模型

AR(Autoregressive)模型(自回归模型):用同一变量之前的表现情况来预测该变量现在或未来的表现情况,这种预测方法只与变量自己有关,而与其他变量无关,所以称作是自回归。

数学定义模型:假定AR模型是p阶的,对于一组时间序列有观测值{x[1],x[2],.....x[N]},计算t时刻x的预测值x[t],其自回归方程:

x[t]=a[1]*x[t-1]+a[2]*x[t-2]....+a[p]*x[t-p]+u[t],1<=p<N,p<=t<=N

其中{a[1],a[2]...a[p]}是对应的参数序列,u[t]是满足N(0,σ^2)的白噪声。

由该数学模型可以看出,AR(p)模型是一种线性预测,由前面的p个x观测值来预测t时刻的值,其本质类似于插值法,其目的都是为了增加有效数据。

AR模型多用于平稳时间序列的预测与拟合,给定一个时间序列,其建模步骤一般如下:

1.判断时间序列是否平稳,可以采用ACF检验、ADF单位根检验等方法。

2若时间序列平稳,则直接转3;若时间序列非平稳,则可采用差分的方法,将其转换为平稳时间序列,转3。

3.计算AR模型的参数(burg算法,最小二乘法,自相关算法等)与定阶(根据AIC准则,SC准则,FPE准则等)。

4.检验3中确定AR模型的拟合度,主要是检验残差序列是否服从N(0,σ^2)白噪声。

5.利用AR模型进行预测。

下面通过实例来分析建模过程:

现有1978-2014年全国人口的死亡率(数据来源于http://www.stats.gov.cn/tjsj/ndsj/):

[6.25 6.28 6.34 6.36 6.60 6.90 6.82 6.78

6.86 6.72 6.64 6.54 6.67 6.70 6.64 6.64

6.49 6.57 6.56 6.51 6.50 6.46 6.45 6.43

6.41 6.40 6.42 6.50 6.81 6.93 7.06 7.08

7.11 7.14 7.15 7.16 7.16]

1.判断是否为平稳序列

设mean(x),var(x)分别为序列{x}的平均值和方差,根据自相关系数ACF判断是否为平稳序列:

样本{x}的ACF计算公式是:ACF=∑(x[i]-mean(x))*(x[i+k]-mean(x))/(n*var(x)),0<=k<N,0<=i<N-k

python代码如下:

import numpy;
import math;
#计算某一个k值的ACF
def auto_relate_coef(data,avg,s2,k):
    ef=0.;
    for i in range(0,len(data)-k):
	ef=ef+(data[i]-avg)*(data[i+k]-avg);
    ef=ef/len(data)/s2;
    return ef;
#计算k从0到N-1所有ACF
def auto_relate_coefs(sample):
    efs=[];
    data=[];
    avg=numpy.mean(sample);
    s2=numpy.var(sample);
    array=sample.reshape(1,-1);
    for x in array.flat:
	data.append(x);
    for k in range(0,len(data)):
	ef=auto_relate_coef(data,avg,s2,k);
	efs.append(ef);
    return efs;

序列{1978-2014人口死亡率}自相关系数如图:

对于平稳时间序列而言,ACF系数随k值的增加衰减到0的速度比非平稳随机序列更快。基于这点可以看出序列{1978-2014人口死亡率}是平稳的。

2.AR模型参数计算与定阶

由上述的AR(p)方程可得到预测值{y[p],y[p+1]....y[N]}

y[p+1]=a[p]*x[1]+a[p-1]*x[2]....a[1]*x[p]

y[p+2]=a[p]*x[2]+a[p-1]*x[3]....a[1]*x[p+1]

.......

y[N]=a[p]*x[N-p]+a[p-1]*x[N-p+1]......a[1]*x[N-1]

将上述方程组写成矩阵形式有:

Y[N-p,1]=X[N-p,p] dotA[p,1]

其中[row,col]代表 row行col列的矩阵,dot代表矩阵点乘运算。

X的转置运算为XT,逆矩阵运算为XI

根据最小二乘的原则,得到参数的计算公式为:

A=(XT dot X)I dot XTdot
Y

根据该计算公式容易得到p阶AR模型参数与预测值计算代码:

def ar_least_square(sample,p):
    matrix_x=numpy.zeros((sample.size-p,p));
    matrix_x=numpy.matrix(matrix_x);
    array=sample.reshape(sample.size);
    j=0;
    for i in range(0,sample.size-p):
	matrix_x[i,0:p]=array[j:j+p];
	j=j+1;
    matrix_y=numpy.array(array[p:sample.size]);
    matrix_y=matrix_y.reshape(sample.size-p,1);
    matrix_y=numpy.matrix(matrix_y);
    #fi为参数序列
    fi=numpy.dot(numpy.dot((numpy.dot(matrix_x.T,matrix_x)).I,matrix_x.T),matrix_y);
    matrix_y=numpy.dot(matrix_x,fi);
    matrix_y=numpy.row_stack((array[0:p].reshape(p,1),matrix_y));
    return fi,matrix_y;

知道如何计算参数还不够,还得为AR模型选择一个最优的p值,也就是定阶。

定阶一般步骤为:

(1)确定p值的上限,一般是序列长度N的比例或是lnN的倍数。

(2)在不超过max(p)值的前提下,从1开始根据某一原则确定最优p;

本例中我将p值的上限设为N/2=18,定阶准则用AIC(最小信息准则)和SC(施瓦茨准则),根据两个准则求得的估计量越小说明阶数越优。

AIC=2*p+N*ln(σ^2)    SC=p*ln(N)+N*ln(σ^2)

σ^2是观测值与预测值之间残差的方差。

def ar_aic(rss,p):
   n=rss.size;
   s2=numpy.var(rss);
   return 2*p+n*math.log(s2);

def ar_sc(rss,p):
   n=rss.size;
   s2=numpy.var(rss);
   return p*math.log(n)+n*math.log(s2);

本例的AIC和SC:

可以看到当p=18时候,AIC和SC的值均最小,p=19的时候,AIC和SC的值变化比较大。

来看下p=10、18、19时候AR(p)模型的拟合效果(红实线为观测值,蓝虚线为预测值)。

p=10:

p=18

p=19

三幅图可以直观看出p=18时候,AR(18)的拟合效果最好,几乎一模一样。AR(10)虽然效果不如AR(18),但是扰动在可接受范围内,AR(19)简直丧病,偏离太多。

3.拟合度检验

将AR方程变为下式:

u[t]=x[t]-a[1]*x[t-1]-a[2]*x[t-2]-....-a[p]*x[t-p]

若u[t]是服从N(0,σ^2)的白噪声,则可认为AR(p)是可接受的模型。

本例中用AR(18)计算出的残差u[t],平均值为1.06*10^-6,方差为4.2*10^-4

u[t]的自相关系数如图:

从该图可以看出残差近似服从N(0,σ^2),因此AR(18)是可以用来拟合和预测的。

总结:

本例采用最小二乘法计算AR模型参数,求得的AR(18)模型效果不俗,缺点在于最小二乘法涉及大量矩阵点乘运算,比较耗时。不止AR模型,还有MA,ARMA,ARIMA模型可以用来拟合和预测平稳时间序列,建模步骤基本一致,相比与AR和MA,ARMA和ARIMA的效果更好。

时间: 2024-10-23 12:53:50

最小二乘法求AR模型的相关文章

vtk-py求3d模型表面积

模型格式:.obj 环境:python3.6+vtk7.1 vtk版: 1 import vtk 2 3 filename = "XXXX.obj" 4 reader = vtk.vtkOBJReader() 5 reader.SetFileName(filename) 6 reader.Update() 7 triangleFilter = vtk.vtkTriangleFilter() 8 triangleFilter.SetInputData(reader.GetOutput()

户外环境面包车车身模型快速反求装置

[项目需求]户外环境面包车车身模型快速反求装置 技术需求: 1.户外环境,必要时可以搭帐篷. 2.目标物体不能喷涂. 3.车载反求装置,不能现场安装. 4.全自动反求,模型自动生成. 注:需配备定标系统. 联系QQ965213592 注明:LZ项目

ARIMA模型——如果数据序列是非平稳的,并存在一定的增长或下降趋势,则需要对数据进行差分处理!ARIMA(p,d,q)称为差分自回归移动平均模型,AR是自回归, p为自回归项; MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数

ARIMA模型全称为自回归积分滑动平均模型(Autoregressive Integrated Moving Average Model,简记ARIMA),是由博克思(Box)和詹金斯(Jenkins)于70年代初提出一著名时间序列(Time-series Approach)预测方法 [1]  ,所以又称为Box-Jenkins模型.博克思-詹金斯法.其中ARIMA(p,d,q)称为差分自回归移动平均模型,AR是自回归, p为自回归项: MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所

基于AR谱特征的声目标识别

本文第一部分先解释AR谱,但并不会给出太多的细节,第二部分介绍几种常见的语音中的特征,有些在之前的博文中已经用过,诸如过零率.第三部分给出实际操作的过程及识别的效果.本文的目标是通过对DSP采集的声音信号提取特征,识别卡车和飞机. 转载请注明出处: xiahouzuoxin.github.io 关于AR谱 AR模型全称Auto-Regression Model,是通过参数计算信号功率谱的一种方法.在Matlab中计算AR谱很简单:假设有一个1024个点的车辆信号x, y = pyulear(x,

【机器学习笔记之五】用ARIMA模型做需求预测用ARIMA模型做需求预测

本文结构: 时间序列分析? 什么是ARIMA? ARIMA数学模型? input,output 是什么? 怎么用?-代码实例 常见问题? 时间序列分析? 时间序列,就是按时间顺序排列的,随时间变化的数据序列.生活中各领域各行业太多时间序列的数据了,销售额,顾客数,访问量,股价,油价,GDP,气温... 随机过程的特征有均值.方差.协方差等.如果随机过程的特征随着时间变化,则此过程是非平稳的:相反,如果随机过程的特征不随时间而变化,就称此过程是平稳的.下图所示,左边非稳定,右边稳定. 非平稳时间序

差分方程模型

第七章  差分方程模型 教学目的:通过经济学中蛛网模型的实例讨论,介绍一类动态离散模型------差分方程模型的建模方法. 教学要求:1 让学生学会运用差分思想建立数学模型的基本方法,进一步熟悉数学建模的基本过程. 2使学生掌握运用解析方法或数学软件求解差分方程模型. 3帮助学生运用差分方程的平衡点及其稳定性有关理论来分析实际问题. 教学重点:1蛛网模型的图形描述,并通过建立差分方程模型对其进行理论解释. 2运用差分思想建立数学模型和求出模型解析表达式或数值解. 教学难点:1差分方程在稳定点附近

时间序列分析之 ARIMA 模型的JAVA实现

最近要用ARIMA模型预测用户的数量变化,所以调研了一下ARIMA模型,最后用JAVA实现了ARIMA算法. 一.ARIMA原理 ARIMA的原理主要参考的是ARIMA原理. 二.JAVA实现 弄懂了原理,用JAVA进行了实现,主要参考的步骤是ARIMA实现步骤,JAVA代码如下 (1)AR类,用于构建AR模型 package arima; import java.util.*; public class AR { double[] stdoriginalData={}; int p; ARMA

AI之旅(3):升维与最小二乘法

前置知识 ??矩阵的逆 知识地图 ??首先我们将了解一种叫升维的方法,用已有特征构造更多的特征.接着通过对空间与投影建立一定的概念后,推导出最小二乘法. 当特征数量不足时 ??在上一篇<初识线性回归>中,我们假设要处理的问题有足够的样本数量和足够的特征数量.记得样本数量是用m表示,特征数量是用n表示.假如只有1个特征该如何构建模型呢? ??假设现在有一个数据集,数据集中只包含一个地区房屋的面积信息和销售情况.即只有面积这一个特征,如何只用一个特征来预测房屋的销售情况呢? ??可视化能帮助我们更

马尔科夫链和隐马尔可夫模型(转载)

马尔可夫模型是由Andrei A. Markov于1913年提出的 ?? 设 SS是一个由有限个状态组成的集合 S={1,2,3,-,n?1,n}S={1,2,3,-,n?1,n} 随机序列 XX 在 tt时刻所处的状态为 qtqt,其中 qt∈Sqt∈S,若有: P(qt=j|qt?1=i,qt?2=k,?)=P(qt=j|qt?1=i)P(qt=j|qt?1=i,qt?2=k,?)=P(qt=j|qt?1=i) aij≥0∑jnaij=1aij≥0∑jnaij=1 则随机序列 XX构成一个一