Con respecto a un comentario anterior, estoy asumiendo que $\sigma^2_\varepsilon \equiv \operatorname{Var} (\varepsilon_t)$ . Si eso es cierto, entonces he visto muchos casos en los que se asume que $\sigma^2_\varepsilon = 1$ y su código debe actualizar su código a
x1 <- sqrt(1/(1-phi1^2))
x2 <- sqrt((1-phi2^2)/((1-phi2)*((1-phi2)^2-phi1^2)))
No tengo ni idea de cómo el arima.sim
puede manejar la especificación de valores iniciales. He investigado un poco y he encontrado algunos notas del Dr. Henrik Madsen para la simulación de procesos AR . En las páginas 2 y 3 dice que se puede utilizar el filter
para simular el proceso AR.
Así que tienes el proceso $x_t = 0.5 x_{t-1} - 0.7 x_{t-2} + \varepsilon_t$ . A partir de esta ecuación recursiva se tienen las siguientes dos ecuaciones para $x_1$ y $x_2$ : \begin{align} x_1 &= 0.5 x_0 - 0.7 x_{-1} + \varepsilon_1 \\ x_2 &= 0.5 x_1 - 0.7 x_{0} + \varepsilon_2 \end{align} Puedes ver que dependen de los valores $x_0$ y $x_{-1}$ que no existen, por lo que el filter
los trata como cero y genera $$x_1 = \varepsilon_1$$ y $$x_2 = 0.5 \varepsilon_1 + \varepsilon_2$$
Así que puedes "engañarlo" generando un vector para el proceso de ruido, digamos $\left(\varepsilon_1, \varepsilon_2, \ldots, \varepsilon_n \right)$ y modificar la primera y la segunda componente del vector de la siguiente manera: $$\left(x_1,\: x_2-0.5x_1\:, \ldots, \varepsilon_n \right)$$ .
Por ejemplo, si $x_1 = 1$ , $x_2 = -2$ y $\varepsilon_t \overset{\text{iid}}{\sim} \mathcal{N} (0, 1)$ entonces puede utilizar el siguiente código:
n <- 50 # length of series
x_1 <- 1 # first initial value
x_2 <- -2 # second initial value
phi <- c(0.5, -0.7) # vector of autoregressive coefficients
e <- rnorm(n) # vector from standard normal noise process
e[1] <- x_1 # updating so the first value of the series is x_1
e[2] <- x_2 - phi[1]*x_1 # updating so the second value of the series is x_2
ar2 <- filter(e, filter = phi, method = "recursive")
ar2
# output from code above
# [1] 1.00000000 -2.00000000 -1.74287046 1.89716706 1.94282186 1.15986460
# [7] -2.32879581 -1.39168937 1.05816662 1.71920744 0.49852657 -1.45650538
# ...
He conseguido reproducir la salida anterior utilizando el arima.sim
función. Pero debo admitir que todavía no entiendo realmente cómo start.innov
se maneja en la función.
ar2.sim <- arima.sim(n, model=list(ar=c(phi[1], phi[2])),
start.innov=c(0, 0), n.start=2,
innov=c(x_1,x_2 - phi[1]*x_1 ,e[-c(1,2)]), sd = 1)
ar2.sim
# output from code above
# [1] 1.00000000 -2.00000000 -1.74287046 1.89716706 1.94282186 1.15986460
# [7] -2.32879581 -1.39168937 1.05816662 1.71920744 0.49852657 -1.45650538
# ...
0 votos
No he mirado bien pero mira en ?arima.sim info start.innov y innov porque creo que no los tienes bien. ¿De dónde has sacado las expresiones para $x_1$ y $x_2$ ?
0 votos
@mlofton
x1
es la desviación típica deAR(1)
wilex2
es la desviación típica deAR(2)
0 votos
¿Quieres que la serie empiece en los valores x1 y x2? Si es así, los resultados de tu código parecen no tener esa característica.
0 votos
Además, según sus definiciones de x1 y x2, parece que desea utilizar la varianza de $\varepsilon_t$ pero usted parece estar usando una realización de la misma en su lugar
0 votos
Creo que $\sigma^2_{\varepsilon} \equiv \operatorname{Var}(\varepsilon_t)$ .
0 votos
@SOULed_Outt Quiero que x1 y x2 sean los valores iniciales. Me puede mostrar cómo los valores de partida serán x1 y x2
0 votos
@SOULed_Outt ¿Puedes mostrarme también cuál debería ser la varianza especialmente en
R
¿Código?0 votos
Normalmente para este tipo de modelos se asume que $\varepsilon_t \sim \mathcal N (0, 1)$ así que si estoy en lo cierto al decir que $\sigma^2_{\varepsilon} \equiv \operatorname{Var}(\varepsilon_t)$ entonces se pondría $\sigma^2_{\varepsilon}$ . En su código, sustituiría
e[1]
con1
0 votos
Todavía no estoy seguro de cómo establecer los valores de partida en el
arima.sim
función, por desgracia.