Model ARMA (p, q)
Model autoregresního klouzavého průměru (ARMA(p, q)) kombinuje autoregresní model (AR(p)) a model klouzavého průměru (MA(q)) v jeden. Aktuální hodnota simulovaného vektoru závisí jak na předchozích hodnotách téhož vektoru, tak na předchozích hodnotách vektoru šumu.
Doplň definici funkce arma().
Toto cvičení je součástí kurzu
Optimizing R Code with Rcpp
Pokyny k cvičení
- Definuj celočíselnou proměnnou
startjako maximum zpaqplus jedničku. Nezapomeň, že funkcemax()patří do jmenného prostorustd. - Uvnitř vnějšího cyklu for definuj proměnnou
valuetypudoublejakomuplus hodnotu šumu na indexui. - Uvnitř prvního vnitřního cyklu for zvyš
valueoj-tý prvek vektoruthetavynásobený prvkem vektoruepsna indexu "iminusjminus1". - Uvnitř druhého vnitřního cyklu for zvyš
valueoj-tý prvek vektoruphivynásobený prvkem vektoruxna indexu "i minus j minus 1".
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
#include
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector arma(int n, double mu, NumericVector phi, NumericVector theta, double sd) {
int p = phi.size();
int q = theta.size();
NumericVector x(n);
// Generate the noise vector
NumericVector eps = rnorm(n, 0.0, sd);
// Start at the max of p and q plus 1
___
// Loop i from start to n
for(int i = start; i < n; i++) {
// Value is mean plus noise
___
// The MA(q) part
for(int j = 0; j < q; j++) {
// Increase by the jth element of theta times
// the "i minus j minus 1"th element of eps
___
}
// The AR(p) part
for(int j = 0; j < p; j++) {
// Increase by the jth element of phi times
// the "i minus j minus 1"th element of x
___
}
x[i] = value;
}
return x;
}
/*** R
d <- data.frame(
x = 1:50,
y = arma(50, 10, c(1, -0.5), c(1, -0.5), 1)
)
ggplot(d, aes(x, y)) + geom_line()
*/