我似乎无法找到模拟AR(1)时间序列的正确方法,其中均值不为零。 我需要53个数据点,rho = .8,mean = 300。
然而,arima.sim(list(order=c(1,0,0), ar=.8), n=53, mean=300, sd=21)
给了我16世纪的价值。例如:
1480.099 1480.518 1501.794 1509.464 1499.965 1489.545 1482.367 1505.103(依此类推)
我也试过arima.sim(n=52, model=list(ar=c(.8)), start.innov=300, n.start=1)
但是它只是倒计时:
238.81775870 190.19203239 151.91292491 122.09682547 96.27074057 [6] 77.17105923 63.15148491 50.04211711 39.68465916 32.46837830 24.78357345 21.27437183 15.93486092 13.40199333 10.99762449 8.70208879 5.62264196 3.15086491 2.13809323 1.30009732
我试过arima.sim(list(order=c(1,0,0), ar=.8), n=53,sd=21) + 300
似乎给出了正确答案。例如:
280.6420 247.3219 292.4309 289.8923 261.5347 279.6198 290.6622 295.0501 264.4233 273.8532 261.9590 278.0217 300.6825 291.4469 291.5964 293.5710 285.0330 274.5732 285.2396 298.0211 319.9195 324.0424 342.2192 353.8149 等等..
然而,我怀疑这是做正确的事情吗?它仍然是正确的数字自动关联吗?
答案 0 :(得分:2)
你的最后一个选择是可以获得所需的意思," mu"。它从模型中生成数据:
(y [t] -mu)= phi *(y [t-1] -mu)+ \ epsilon [t],epsilon [t] ~N(0,sigma = 21), 吨= 1,2,...,N。
你的第一种方法是设置拦截," alpha"而不是平均值:
y [t] = alpha + phi * y [t-1] + epsilon [t]。
您的第二个选项将起始值y [0]设置为300.只要| phi |< 1这个初始值的影响将在几个时期后消失并且不起作用 在系列的水平上。
修改强>
您在模拟数据中观察到的标准偏差值是正确的。请注意,AR(1)过程的方差y [t]不等于创新的方差,epsilon [t]。 AR(1)过程的方差sigma ^ 2_y可以如下获得:
Var(y [t])= Var(alpha)+ phi ^ 2 * Var(y [t-1])+ Var(epsilon [t])
由于过程是静止的Var(y [t])= Var(t [t-1]),我们称之为sigma ^ 2_y。因此,我们得到:
sigma ^ 2_y = 0 + phi ^ 2 * sigma ^ 2_y + sigma ^ 2_epsilon sigma ^ 2_y = sigma ^ 2_epsilon /(1 - phi ^ 2)
对于您正在使用的参数值,您有:
sigma_y = sqrt(21 ^ 2 /(1 - 0.8 ^ 2))= 35。
答案 1 :(得分:0)
rGARMA
包中的ts.extend
函数您可以使用ts.extend
包从任何平稳的高斯ARMA模型生成随机向量。该程序包使用为随机向量计算的自相关矩阵,直接从多元正态分布生成随机向量,因此它从精确分布中提供了随机向量,并且不需要“老化”迭代。这是一个从AR(1)模型生成多个独立时间序列向量的示例。
#Load the package
library(ts.extend)
#Set parameters
MEAN <- 300
ERRORVAR <- 21^2
AR <- 0.8
m <- 53
#Generate n = 16 random vectors from this model
set.seed(1)
SERIES <- rGARMA(n = 16, m = m, mean = MEAN, ar = AR, errorvar = ERRORVAR)
#Plot the series using ggplot2 graphics
library(ggplot2)
plot(SERIES)
如您所见,此图中生成的时间序列向量使用在输入中指定的适当的均值和误差方差。