我想在 R 中模拟并获得最佳 ARIMA ith 次数
I want to simulate and obtain best ARIMA ith number of time in R
我想用 arima.sim()
模拟 ARIMA(1,0,0)
100 次,并在每次模拟完成时找到具有 auto.arima()
函数的最佳模型。我希望程序每次打印 ARIMA
获取的顺序。
reslt = c()
num <- 60
epselon = rnorm(num, mean=0, sd=1^2)
for(i in 1:10){
reslt[i]<-auto.arima(arima.sim(n = num, model=list(ar=0.8, order = c(1, 0, 0)), n.start=1, innov=c(0,epselon[-1])))
}
以上是我试过没有结果。
我要的是把一系列ARIMA(p, d, q)
打印成10次
这样做就可以了:
library(forecast)
nsim <- 10
result <- matrix(NA_integer_, nrow = nsim, ncol = 3)
colnames(result) <- c("p","d","q")
num <- 60
for (i in seq(nsim)) {
result[i, ] <- arima.sim(n=num, model=list(ar=0.8, order=c(1,0,0)), sd=1) %>%
auto.arima() %>%
arimaorder()
}
result
#> p d q
#> [1,] 0 1 0
#> [2,] 0 1 0
#> [3,] 0 1 0
#> [4,] 1 0 0
#> [5,] 1 0 0
#> [6,] 0 1 0
#> [7,] 0 1 0
#> [8,] 1 0 0
#> [9,] 1 0 0
#> [10,] 1 0 0
由 reprex package (v0.3.0)
于 2020-06-24 创建
几点评论:
- 您的代码每次都会生成相同的系列,因为
epselon
是在循环外生成的。由于您只是使用随机正态创新,因此让 arima.sim()
像上面的代码一样处理它会更简单。
- 如果您想保留
auto.arima()
返回的整个模型对象,而不是像我的代码中那样只保留订单,您可以这样修改它:
library(forecast)
nsim <- 10
result <- list()
num <- 60
for (i in seq(nsim)) {
result[[i]] <- arima.sim(n=num, model=list(ar=0.8, order=c(1,0,0)), sd=1) %>%
auto.arima()
}
result
#> [[1]]
#> Series: .
#> ARIMA(0,1,0)
#>
#> sigma^2 estimated as 1.145: log likelihood=-87.72
#> AIC=177.44 AICc=177.51 BIC=179.52
#>
#> [[2]]
#> Series: .
#> ARIMA(1,0,2) with zero mean
#>
#> Coefficients:
#> ar1 ma1 ma2
#> 0.5200 0.4086 0.4574
#> s.e. 0.1695 0.1889 0.1446
#>
#> sigma^2 estimated as 0.877: log likelihood=-80.38
#> AIC=168.77 AICc=169.5 BIC=177.15
#>
#> [[3]]
#> Series: .
#> ARIMA(0,1,0)
#>
#> sigma^2 estimated as 0.9284: log likelihood=-81.53
#> AIC=165.05 AICc=165.12 BIC=167.13
#>
#> [[4]]
#> Series: .
#> ARIMA(1,0,0) with zero mean
#>
#> Coefficients:
#> ar1
#> 0.615
#> s.e. 0.099
#>
#> sigma^2 estimated as 1.123: log likelihood=-88.35
#> AIC=180.7 AICc=180.91 BIC=184.89
#>
#> [[5]]
#> Series: .
#> ARIMA(0,0,3) with zero mean
#>
#> Coefficients:
#> ma1 ma2 ma3
#> 0.5527 0.2726 -0.3297
#> s.e. 0.1301 0.1425 0.1202
#>
#> sigma^2 estimated as 0.6194: log likelihood=-69.83
#> AIC=147.66 AICc=148.39 BIC=156.04
#>
#> [[6]]
#> Series: .
#> ARIMA(1,0,0) with non-zero mean
#>
#> Coefficients:
#> ar1 mean
#> 0.7108 0.9147
#> s.e. 0.0892 0.4871
#>
#> sigma^2 estimated as 1.332: log likelihood=-93.08
#> AIC=192.15 AICc=192.58 BIC=198.43
#>
#> [[7]]
#> Series: .
#> ARIMA(1,0,1) with non-zero mean
#>
#> Coefficients:
#> ar1 ma1 mean
#> 0.6116 0.3781 -1.0024
#> s.e. 0.1264 0.1559 0.4671
#>
#> sigma^2 estimated as 1.161: log likelihood=-88.6
#> AIC=185.2 AICc=185.92 BIC=193.57
#>
#> [[8]]
#> Series: .
#> ARIMA(1,0,0) with zero mean
#>
#> Coefficients:
#> ar1
#> 0.6412
#> s.e. 0.0969
#>
#> sigma^2 estimated as 0.8666: log likelihood=-80.6
#> AIC=165.2 AICc=165.41 BIC=169.39
#>
#> [[9]]
#> Series: .
#> ARIMA(0,1,0)
#>
#> sigma^2 estimated as 1.314: log likelihood=-91.78
#> AIC=185.57 AICc=185.64 BIC=187.64
#>
#> [[10]]
#> Series: .
#> ARIMA(1,0,0) with non-zero mean
#>
#> Coefficients:
#> ar1 mean
#> 0.6714 1.3449
#> s.e. 0.0985 0.4428
#>
#> sigma^2 estimated as 1.397: log likelihood=-94.44
#> AIC=194.89 AICc=195.32 BIC=201.17
由 reprex package (v0.3.0)
于 2020-06-24 创建
我想用 arima.sim()
模拟 ARIMA(1,0,0)
100 次,并在每次模拟完成时找到具有 auto.arima()
函数的最佳模型。我希望程序每次打印 ARIMA
获取的顺序。
reslt = c()
num <- 60
epselon = rnorm(num, mean=0, sd=1^2)
for(i in 1:10){
reslt[i]<-auto.arima(arima.sim(n = num, model=list(ar=0.8, order = c(1, 0, 0)), n.start=1, innov=c(0,epselon[-1])))
}
以上是我试过没有结果。
我要的是把一系列ARIMA(p, d, q)
打印成10次
这样做就可以了:
library(forecast)
nsim <- 10
result <- matrix(NA_integer_, nrow = nsim, ncol = 3)
colnames(result) <- c("p","d","q")
num <- 60
for (i in seq(nsim)) {
result[i, ] <- arima.sim(n=num, model=list(ar=0.8, order=c(1,0,0)), sd=1) %>%
auto.arima() %>%
arimaorder()
}
result
#> p d q
#> [1,] 0 1 0
#> [2,] 0 1 0
#> [3,] 0 1 0
#> [4,] 1 0 0
#> [5,] 1 0 0
#> [6,] 0 1 0
#> [7,] 0 1 0
#> [8,] 1 0 0
#> [9,] 1 0 0
#> [10,] 1 0 0
由 reprex package (v0.3.0)
于 2020-06-24 创建几点评论:
- 您的代码每次都会生成相同的系列,因为
epselon
是在循环外生成的。由于您只是使用随机正态创新,因此让arima.sim()
像上面的代码一样处理它会更简单。 - 如果您想保留
auto.arima()
返回的整个模型对象,而不是像我的代码中那样只保留订单,您可以这样修改它:
library(forecast)
nsim <- 10
result <- list()
num <- 60
for (i in seq(nsim)) {
result[[i]] <- arima.sim(n=num, model=list(ar=0.8, order=c(1,0,0)), sd=1) %>%
auto.arima()
}
result
#> [[1]]
#> Series: .
#> ARIMA(0,1,0)
#>
#> sigma^2 estimated as 1.145: log likelihood=-87.72
#> AIC=177.44 AICc=177.51 BIC=179.52
#>
#> [[2]]
#> Series: .
#> ARIMA(1,0,2) with zero mean
#>
#> Coefficients:
#> ar1 ma1 ma2
#> 0.5200 0.4086 0.4574
#> s.e. 0.1695 0.1889 0.1446
#>
#> sigma^2 estimated as 0.877: log likelihood=-80.38
#> AIC=168.77 AICc=169.5 BIC=177.15
#>
#> [[3]]
#> Series: .
#> ARIMA(0,1,0)
#>
#> sigma^2 estimated as 0.9284: log likelihood=-81.53
#> AIC=165.05 AICc=165.12 BIC=167.13
#>
#> [[4]]
#> Series: .
#> ARIMA(1,0,0) with zero mean
#>
#> Coefficients:
#> ar1
#> 0.615
#> s.e. 0.099
#>
#> sigma^2 estimated as 1.123: log likelihood=-88.35
#> AIC=180.7 AICc=180.91 BIC=184.89
#>
#> [[5]]
#> Series: .
#> ARIMA(0,0,3) with zero mean
#>
#> Coefficients:
#> ma1 ma2 ma3
#> 0.5527 0.2726 -0.3297
#> s.e. 0.1301 0.1425 0.1202
#>
#> sigma^2 estimated as 0.6194: log likelihood=-69.83
#> AIC=147.66 AICc=148.39 BIC=156.04
#>
#> [[6]]
#> Series: .
#> ARIMA(1,0,0) with non-zero mean
#>
#> Coefficients:
#> ar1 mean
#> 0.7108 0.9147
#> s.e. 0.0892 0.4871
#>
#> sigma^2 estimated as 1.332: log likelihood=-93.08
#> AIC=192.15 AICc=192.58 BIC=198.43
#>
#> [[7]]
#> Series: .
#> ARIMA(1,0,1) with non-zero mean
#>
#> Coefficients:
#> ar1 ma1 mean
#> 0.6116 0.3781 -1.0024
#> s.e. 0.1264 0.1559 0.4671
#>
#> sigma^2 estimated as 1.161: log likelihood=-88.6
#> AIC=185.2 AICc=185.92 BIC=193.57
#>
#> [[8]]
#> Series: .
#> ARIMA(1,0,0) with zero mean
#>
#> Coefficients:
#> ar1
#> 0.6412
#> s.e. 0.0969
#>
#> sigma^2 estimated as 0.8666: log likelihood=-80.6
#> AIC=165.2 AICc=165.41 BIC=169.39
#>
#> [[9]]
#> Series: .
#> ARIMA(0,1,0)
#>
#> sigma^2 estimated as 1.314: log likelihood=-91.78
#> AIC=185.57 AICc=185.64 BIC=187.64
#>
#> [[10]]
#> Series: .
#> ARIMA(1,0,0) with non-zero mean
#>
#> Coefficients:
#> ar1 mean
#> 0.6714 1.3449
#> s.e. 0.0985 0.4428
#>
#> sigma^2 estimated as 1.397: log likelihood=-94.44
#> AIC=194.89 AICc=195.32 BIC=201.17
由 reprex package (v0.3.0)
于 2020-06-24 创建