# Install necessary library
install.packages("forecast")
trying URL 'https://cran.rstudio.com/bin/macosx/big-sur-arm64/contrib/4.2/forecast_8.22.0.tgz'
Content type 'application/x-gzip' length 2484322 bytes (2.4 MB)
==================================================
downloaded 2.4 MB
The downloaded binary packages are in
/var/folders/d_/mt52wgnd2rnbdnw9k1hp2t5r0000gn/T//RtmplbAQ3n/downloaded_packages
# Load the library
library(forecast)
Warning: package ‘forecast’ was built under R version 4.2.3Registered S3 method overwritten by 'quantmod':
method from
as.zoo.data.frame zoo
This is forecast 8.22.0
Want to stay up-to-date? Read the Hyndsight blog:
https://robjhyndman.com/hyndsight/
# Parameters for the MA(1) process
theta <- 0.6
n <- 200 # Length of each time series
num_series <- 20 # Number of series to generate
# Generate 20 realizations of the MA(1) process
set.seed(42)
simulated_series <- lapply(1:num_series, function(i) {
arima.sim(model=list(ma=theta), n=n)
})
# Reducing the size of the margins
par(mfrow=c(5, 4), mar=c(2, 2, 2, 2)) # Setting smaller margins
for (i in 1:num_series) {
plot(simulated_series[[i]], type = "l", main = paste("MA(1) Series", i), ylab = "", xlab = "Time")
}

NA

# Plotting ACF and PACF for the first series
par(mfrow=c(1,2))
Acf(simulated_series[[1]], main="ACF of MA(1) Series")
Pacf(simulated_series[[1]], main="PACF of MA(1) Series")

# Initialization
innovations_estimates <- numeric(num_series)
mle_estimates <- numeric(num_series)
# Estimation
for (i in 1:num_series) {
fit_innov <- tryCatch({
Arima(simulated_series[[i]], order=c(0,0,1), method="CSS")
}, error = function(e) NULL)
fit_mle <- tryCatch({
Arima(simulated_series[[i]], order=c(0,0,1), method="ML")
}, error = function(e) NULL)
# Check if the fit object is NULL, which means the fitting failed
if (!is.null(fit_innov) && "ma1" %in% names(fit_innov$coef)) {
innovations_estimates[i] <- fit_innov$coef["ma1"]
} else {
innovations_estimates[i] <- NA # Assign NA if the model did not return a result
}
if (!is.null(fit_mle) && "ma1" %in% names(fit_mle$coef)) {
mle_estimates[i] <- fit_mle$coef["ma1"]
} else {
mle_estimates[i] <- NA # Assign NA if the model did not return a result
}
}
# Output results with NA handling
# Print results with names
results <- c(
mean_innovations = mean(innovations_estimates, na.rm = TRUE),
variance_innovations = var(innovations_estimates, na.rm = TRUE),
mean_mle = mean(mle_estimates, na.rm = TRUE),
variance_mle = var(mle_estimates, na.rm = TRUE)
)
# Use print to display the named results
print(results)
mean_innovations variance_innovations mean_mle variance_mle
0.590236635 0.003113181 0.592986705 0.003742935
# Calculating and printing results with names
results <- c(
mean_moment = mean(moment_estimates, na.rm = TRUE),
variance_moment = var(moment_estimates, na.rm = TRUE),
mean_innovations = mean(innovations_estimates, na.rm = TRUE),
variance_innovations = var(innovations_estimates, na.rm = TRUE),
mean_mle = mean(mle_estimates, na.rm = TRUE),
variance_mle = var(mle_estimates, na.rm = TRUE)
)
# Print the results with names
print(results)
mean_moment variance_moment mean_innovations variance_innovations
0.363182282 0.001352328 0.590236635 0.003113181
mean_mle variance_mle
0.592986705 0.003742935
LS0tCnRpdGxlOiAiNS41IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoKYGBge3J9CiMgSW5zdGFsbCBuZWNlc3NhcnkgbGlicmFyeQppbnN0YWxsLnBhY2thZ2VzKCJmb3JlY2FzdCIpCgojIExvYWQgdGhlIGxpYnJhcnkKbGlicmFyeShmb3JlY2FzdCkKYGBgCgoKYGBge3J9CiMgUGFyYW1ldGVycyBmb3IgdGhlIE1BKDEpIHByb2Nlc3MKdGhldGEgPC0gMC42Cm4gPC0gMjAwICAjIExlbmd0aCBvZiBlYWNoIHRpbWUgc2VyaWVzCm51bV9zZXJpZXMgPC0gMjAgICMgTnVtYmVyIG9mIHNlcmllcyB0byBnZW5lcmF0ZQoKIyBHZW5lcmF0ZSAyMCByZWFsaXphdGlvbnMgb2YgdGhlIE1BKDEpIHByb2Nlc3MKc2V0LnNlZWQoNDIpCnNpbXVsYXRlZF9zZXJpZXMgPC0gbGFwcGx5KDE6bnVtX3NlcmllcywgZnVuY3Rpb24oaSkgewogIGFyaW1hLnNpbShtb2RlbD1saXN0KG1hPXRoZXRhKSwgbj1uKQp9KQojIFJlZHVjaW5nIHRoZSBzaXplIG9mIHRoZSBtYXJnaW5zCnBhcihtZnJvdz1jKDUsIDQpLCBtYXI9YygyLCAyLCAyLCAyKSkgICMgU2V0dGluZyBzbWFsbGVyIG1hcmdpbnMKCmZvciAoaSBpbiAxOm51bV9zZXJpZXMpIHsKICBwbG90KHNpbXVsYXRlZF9zZXJpZXNbW2ldXSwgdHlwZSA9ICJsIiwgbWFpbiA9IHBhc3RlKCJNQSgxKSBTZXJpZXMiLCBpKSwgeWxhYiA9ICIiLCB4bGFiID0gIlRpbWUiKQp9CgpgYGAKCgpgYGB7cn0KIyBQbG90dGluZyBBQ0YgYW5kIFBBQ0YgZm9yIHRoZSBmaXJzdCBzZXJpZXMKcGFyKG1mcm93PWMoMSwyKSkKQWNmKHNpbXVsYXRlZF9zZXJpZXNbWzFdXSwgbWFpbj0iQUNGIG9mIE1BKDEpIFNlcmllcyIpClBhY2Yoc2ltdWxhdGVkX3Nlcmllc1tbMV1dLCBtYWluPSJQQUNGIG9mIE1BKDEpIFNlcmllcyIpCmBgYApgYGB7cn0KIyBJbml0aWFsaXphdGlvbgppbm5vdmF0aW9uc19lc3RpbWF0ZXMgPC0gbnVtZXJpYyhudW1fc2VyaWVzKQptbGVfZXN0aW1hdGVzIDwtIG51bWVyaWMobnVtX3NlcmllcykKCiMgRXN0aW1hdGlvbgpmb3IgKGkgaW4gMTpudW1fc2VyaWVzKSB7CiAgZml0X2lubm92IDwtIHRyeUNhdGNoKHsKICAgIEFyaW1hKHNpbXVsYXRlZF9zZXJpZXNbW2ldXSwgb3JkZXI9YygwLDAsMSksIG1ldGhvZD0iQ1NTIikKICB9LCBlcnJvciA9IGZ1bmN0aW9uKGUpIE5VTEwpCiAgCiAgZml0X21sZSA8LSB0cnlDYXRjaCh7CiAgICBBcmltYShzaW11bGF0ZWRfc2VyaWVzW1tpXV0sIG9yZGVyPWMoMCwwLDEpLCBtZXRob2Q9Ik1MIikKICB9LCBlcnJvciA9IGZ1bmN0aW9uKGUpIE5VTEwpCgogICMgQ2hlY2sgaWYgdGhlIGZpdCBvYmplY3QgaXMgTlVMTCwgd2hpY2ggbWVhbnMgdGhlIGZpdHRpbmcgZmFpbGVkCiAgaWYgKCFpcy5udWxsKGZpdF9pbm5vdikgJiYgIm1hMSIgJWluJSBuYW1lcyhmaXRfaW5ub3YkY29lZikpIHsKICAgIGlubm92YXRpb25zX2VzdGltYXRlc1tpXSA8LSBmaXRfaW5ub3YkY29lZlsibWExIl0KICB9IGVsc2UgewogICAgaW5ub3ZhdGlvbnNfZXN0aW1hdGVzW2ldIDwtIE5BICAjIEFzc2lnbiBOQSBpZiB0aGUgbW9kZWwgZGlkIG5vdCByZXR1cm4gYSByZXN1bHQKICB9CgogIGlmICghaXMubnVsbChmaXRfbWxlKSAmJiAibWExIiAlaW4lIG5hbWVzKGZpdF9tbGUkY29lZikpIHsKICAgIG1sZV9lc3RpbWF0ZXNbaV0gPC0gZml0X21sZSRjb2VmWyJtYTEiXQogIH0gZWxzZSB7CiAgICBtbGVfZXN0aW1hdGVzW2ldIDwtIE5BICAjIEFzc2lnbiBOQSBpZiB0aGUgbW9kZWwgZGlkIG5vdCByZXR1cm4gYSByZXN1bHQKICB9Cn0KCiMgT3V0cHV0IHJlc3VsdHMgd2l0aCBOQSBoYW5kbGluZwojIFByaW50IHJlc3VsdHMgd2l0aCBuYW1lcwpyZXN1bHRzIDwtIGMoCiAgbWVhbl9pbm5vdmF0aW9ucyA9IG1lYW4oaW5ub3ZhdGlvbnNfZXN0aW1hdGVzLCBuYS5ybSA9IFRSVUUpLAogIHZhcmlhbmNlX2lubm92YXRpb25zID0gdmFyKGlubm92YXRpb25zX2VzdGltYXRlcywgbmEucm0gPSBUUlVFKSwKICBtZWFuX21sZSA9IG1lYW4obWxlX2VzdGltYXRlcywgbmEucm0gPSBUUlVFKSwKICB2YXJpYW5jZV9tbGUgPSB2YXIobWxlX2VzdGltYXRlcywgbmEucm0gPSBUUlVFKQopCgojIFVzZSBwcmludCB0byBkaXNwbGF5IHRoZSBuYW1lZCByZXN1bHRzCnByaW50KHJlc3VsdHMpCmBgYAoKCmBgYHtyfQojIENhbGN1bGF0aW5nIGFuZCBwcmludGluZyByZXN1bHRzIHdpdGggbmFtZXMKcmVzdWx0cyA8LSBjKAogIG1lYW5fbW9tZW50ID0gbWVhbihtb21lbnRfZXN0aW1hdGVzLCBuYS5ybSA9IFRSVUUpLAogIHZhcmlhbmNlX21vbWVudCA9IHZhcihtb21lbnRfZXN0aW1hdGVzLCBuYS5ybSA9IFRSVUUpLAogIG1lYW5faW5ub3ZhdGlvbnMgPSBtZWFuKGlubm92YXRpb25zX2VzdGltYXRlcywgbmEucm0gPSBUUlVFKSwKICB2YXJpYW5jZV9pbm5vdmF0aW9ucyA9IHZhcihpbm5vdmF0aW9uc19lc3RpbWF0ZXMsIG5hLnJtID0gVFJVRSksCiAgbWVhbl9tbGUgPSBtZWFuKG1sZV9lc3RpbWF0ZXMsIG5hLnJtID0gVFJVRSksCiAgdmFyaWFuY2VfbWxlID0gdmFyKG1sZV9lc3RpbWF0ZXMsIG5hLnJtID0gVFJVRSkKKQoKIyBQcmludCB0aGUgcmVzdWx0cyB3aXRoIG5hbWVzCnByaW50KHJlc3VsdHMpCgoKYGBgCgoKCgoKCgoKCgoKCgoKCg==