AR(p)-Modell simulieren
Autoregressive (AR-)Modelle sind eine Art lineare Regression für Zeitreihen, bei der die vorhergesagten Werte von den Werten zu früheren Zeitpunkten abhängen. Aufgrund dieser Abhängigkeit muss das Modell Zeitpunkt für Zeitpunkt berechnet werden. Das bedeutet: Wir brauchen eine for-Schleife – hier ist C++ besonders hilfreich!
Hier ist der Algorithmus in R:
ar1 <- function(n, constant, phi, eps) {
p <- length(phi)
x <- numeric(n)
for(i in seq(p + 1, n)) {
value <- rnorm(1, constant, eps)
for(j in seq_len(p)) {
value <- value + phi[j] * x[i - j]
}
x[i] <- value
}
x
}
n ist die Anzahl der simulierten Beobachtungen, c ist eine Konstante, phi ist ein numerischer Vektor der Autokorrelationskoeffizienten und eps ist die Standardabweichung des Rauschens. Vervollständige die Definition von ar2(), einer C++-Übersetzung von ar1().
Diese Übung ist Teil des Kurses
R-Code mit Rcpp optimieren
Anleitung zur Übung
- Erzeuge eine normalverteilte Zufallszahl mit Mittelwert
cund Standardabweichungepsüber die R-API von Rcpp. - Lass die innere for-Schleife von
0bispiterieren. - Erhöhe innerhalb der inneren Schleife
valueum dasj-te Element vonphimal das „i minus j minus 1“-te Element vonx.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
#include
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector ar2(int n, double c, NumericVector phi, double eps) {
int p = phi.size();
NumericVector x(n);
// Loop from p to n
for(int i = p; i < n; i++) {
// Generate a random number from the normal distribution
double value = ___::___(___, ___);
// Loop from zero to p
for(int j = ___; j < ___; j++) {
// Increase by the jth element of phi times
// the "i minus j minus 1"th element of x
value += ___[___] * ___[___];
}
x[i] = value;
}
return x;
}
/*** R
d <- data.frame(
x = 1:50,
y = ar2(50, 10, c(1, -0.5), 1)
)
ggplot(d, aes(x, y)) + geom_line()
*/