在ARlab中将AR模型拟合到数据中

时间:2013-01-03 07:56:07

标签: matlab model regression

我有一些我希望适合模型的历史数据RV。该模型是:

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总和)

电子错误

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

RV(t+1) = C0 + C1*RV(t) + C2*RV(t-1) + e

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

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

当我尝试估算它们时,我不确定如何将(1/5)或(1/30)因子包含在模型中而不会干扰参数C0,C1,C2和C3。这就是我到目前为止所做的一切:

model = arima(6,0,0)
fit = estimate(model,RV) 

1 个答案:

答案 0 :(得分:2)

首先要做的事情:你在这里看到的似乎不是编程问题,而是计量经济学问题。因此,它可能更适合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)。

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

%# 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测试。显然,您需要将您的实际RV替换为我随机生成的RV。如果在你的实际回归中残差没有通过Durbin-Watson测试,那么你可能需要研究诸如可行的GLS之类的方法,或者阅读格林的“计量经济分析”的时间序列章节 - 但希望它赢了来吧。

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