首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Matlab中拟合AR模型与数据

在Matlab中拟合AR模型与数据
EN

Stack Overflow用户
提问于 2013-01-03 15:56:07
回答 1查看 9.7K关注 0票数 0

我有一些历史数据RV,我想要拟合一个模型。模型是:

代码语言:javascript
复制
RV(t+1) = C0 + C1*RV(t) + C2*RV_weekAverage(t-5) + C3*RV_monthAverage(t-30) + e

其中,未来的RV取决于先前的RV和一些先前的RV值的平均值。

T-是时间

C0、C1、C2、C3 -是待确定的参数

RV_weekAverage =(1/5)*(从t-1到t-5的RV之和)

RV_monthAverage =(1/30)*(从t-1到t-30的RV之和)

E错误

我认为我应该使用AR模型,但我不太确定如何实现它,因为对于AR模型,右侧没有平均值,而是简单的先前值,例如:

代码语言:javascript
复制
RV(t+1) = C0 + C1*RV(t) + C2*RV(t-1) + e

要使用AR模型,我必须尝试:

代码语言:javascript
复制
RV(t+1) = C0 + C1*RV(t) + C2*(1/5)*[RV(t-1)+...+RV(t-5)] + C3*(1/30)*[RV(t-1)+...+RV(t-30)] + e

当我尝试估计参数C0、C1、C2和C3时,我不确定如何在不干扰参数的情况下将(1/5)或(1/30)因子包含到模型中。这就是我到目前为止所知道的:

代码语言:javascript
复制
model = arima(6,0,0)
fit = estimate(model,RV) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-04 13:36:59

首先要做的是:这里出现的似乎不是编程问题,而是计量经济学问题。正因为如此,它可能更适合Cross Validated。如果是这样的话,版主可以选择将你的问题(和这个答案)迁移到那里。

说了这么多,我想我仍然可以在这里提供一个答案。

您似乎正在处理的时间序列回归涉及-如果我的首字母缩写猜测技能是正确的-已实现的波动性,或已实现的方差。你的回归是RV_{t+1},而回归是RV_{t},RV_{t-1}到RV_{t-5}的线性组合,以及RV_{t-1}到RV_{t-30}的线性组合。

假设你的回归集包含回归变量的滞后,我猜有人告诉你去看AR(p)模型,这就是问题的开始:-)当然,这是解决这个问题的一种方法,但我个人认为这是错误的方法。为什么?因为你有高达t-30的滞后,所以你看的是AR(30)模型,但正如你在问题中清楚地陈述的那样,你的模型只包含4个参数。当你只需要估计4个参数时,为什么要有30多个回归变量?这意味着您的评估方法将需要适应参数的约束,这将使您的生活变得困难。

幸运的是,在您的情况下,可以避免这种情况。事实上,在我看来,你已经在问题中写下了适当的形式!

我将稍微简化一下表示法:设y_{t+1} = RV_{t+1},X1_t = RV_t,X2_t = (1/5)(RV_{t-1} + ... + RV_{t-5}),X3_t = (1/30)(RV_{t-1} + ... + RV_{t-30})。现在我们可以将回归方程写成:

y_{t+1} = c0 + c1*X1_t + c2*X2_t + c3*X3_t + e_t

这是一个简单的带有滞后的时间序列回归。忘掉AR(p)特定的估计方法吧,你只需要在上面做简单、可靠的OLS即可。如果残差通过Durbin-Watson检验,那么OLS估计器很可能是一致的,并且在给定一些额外假设的情况下,最佳线性无偏估计器(BLUE)。

以下是一些示例代码,可帮助您入门:

代码语言:javascript
复制
%# Randomly generate some observations
T = 1000;
RV = randn(T, 1);

%# Construct your variables
y = RV(32:end); %# your regressor
X1 = RV(31:end-1); %# first lag of your regressor (ie your first regressand)
X2 = conv(RV(26:end-2), (1/5) * ones(5, 1), 'valid'); %# moving window average over 5 observations (ie your second regressand)
X3 = conv(RV(1:end-2), (1/30) * ones(30, 1), 'valid'); %# moving window average over 30 observations (ie your third regressand)

%# Build your matrix of regressors (including a vector of ones for the constant term)
X = [ones(length(X1), 1), X1, X2, X3];

%# Perform OLS
[Coef, CoefConfInt, e] = regress(y, X);

%# Perform a durbin watson test on the residuals
[DWpVal, DWStat] = dwtest(e, X);
if DWpVal < 0.05; fprintf('WARNING: residuals from regression appear to be serially correlated. Estimated coefficients may not be consistent'); end

Coef存储您估计的系数,CoefConfInt存储这些估计器的置信区间。我甚至加入了一个测试来检查您的残差是否通过了Durbin-Watson测试。显然,你需要用你的实际房车替换我随机生成的房车。如果在你的实际回归中,残差没有通过Durbin-Watson检验,那么你可能需要寻找可行的GLS等方法,或者阅读Greene的“计量经济学分析”的时间序列章节-但希望不会走到那一步。

如果您认为此回答回答了问题,请随时单击它旁边的勾号。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14134990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档