如何解决在有序模拟的不同组合中,如何计算在r中获得第一个真阶之前有阶数不为真的次数
大多数情况下,运行arima.sim()
函数来模拟arima mosel
的特定顺序,但是当人们通过auto.arima()
函数检查这种模拟的时间序列数据时,时间通常不会是相同的顺序ARIMA的一种愿望,并在arima.sim()
中指定。
据我所知,可能需要多少次才能运行arima.sim()
函数以对其参数(样本大小,标准偏差和模型系数)进行不同组合,然后才能获得所寻求模型的真实顺序为此,我希望此R
脚本能够count
运行arima.sim()
多少次才能获得ARIMA-order
函数中指定的作用arima.sim()
。 / p>
**Here is my trial**
library(forecast)
N <- c(10,20,30)
SD <- c(1,2,3,4,5) ^ 2
phi <- c(0.2,0.4,0.6)
## generate all combos
all_combos <- expand.grid(N = N,SD = SD,phi = phi)
## create function
set.seed(123)
res2 <- by(all_combos,all_combos["N"],function(DF){
res <- mapply(function(N,SD,phi){
cnt <- 0
repeat {
x <- arima.sim(n=N,model = list(ar=phi,order = c(1,0)),sd = SD)
if(all(arimaorder(auto.arima(x),ic = "aicc"))) != c(1,0) cnt <- cnt + 1){
}
{else(all(arimaorder(auto.arima(x),ic = "aicc"))) == c(1,0) cnt <- cnt + 1)}
break
}
cnt
},DF[["N"]],DF[["SD"]],DF[["phi"]])
names(res) <- paste("SD","phi",DF[["phi"]],sep = "-")
res
})
res2
我很想知道在获得第一个ARIMA(1,0,0)之前会进行arima.sim()
的几次试验。
解决方法
您运行by
+ mapply
对我来说似乎很奇怪。我认为仅mapply
就足够了。此外,arimaorder
没有ic
参数,也许您打算将其用于auto.arima
函数。
由于您想知道要获得c(1,0)
需要进行多少次试验,因此我添加了另一列(index
),它是all_combos
中的行号。一旦获得c(1,0)
的输出,循环就会中断,并显示index
。该代码不会在其余组合中运行。
library(forecast)
N <- c(10,20,30)
SD <- c(1,2,3,4,5) ^ 2
phi <- c(0.2,0.4,0.6)
## generate all combos
all_combos <- expand.grid(N = N,SD = SD,phi = phi)
all_combos$index <- seq_len(nrow(all_combos))
mapply(function(N,phi,SD,index) {
x <- with(all_combos,arima.sim(n=N[1],model = list(ar=phi[1],order = c(1,0)),sd = SD[1]))
if(all(arimaorder(auto.arima(x,ic = "aicc")) == c(1,0))) {
print(index)
break
}
},all_combos$N,all_combos$SD,all_combos$phi,all_combos$index)
,
您的大括号位于错误的位置。运行您的代码时,出现有关意外括号的错误。 R
和if
的{{1}}符号应遵循:
else
如果要检查其他情况,则需要if(condition == TRUE) {
run some code
} else {
do some other code # happens if condition == FALSE
}
else if
您还会为if(condition == TRUE) {
run some code
} else if(other_condition == TRUE) {
do some other code
} else {
do some third code # runs if both conditions are FALSE
}
加上括号。基于此,我认为您希望您的条件看起来像这样:
all()
修复这些错误后,代码几乎运行了,除了出现错误
arimaorder(auto.arima(x),ic =“ aicc”)中的错误: 未使用的参数(ic =“ aicc”)
因此,您对if(all(arimaorder(auto.arima(x),ic = "aicc")) != c(1,0)) {
cnt <- cnt + 1
} else if (all(arimaorder(auto.arima(x),0)) {
cnt <- cnt + 1
} else { break }
的括号也放错了位置。以下运行无错误:
auto.arima()
但是,我仍然认为这些方面存在问题,我无法弄清楚您要完成什么。
res2 <- by(all_combos,all_combos["N"],function(DF){
res <- mapply(function(N,phi){
cnt <- 0
repeat {
x <- arima.sim(n=N,model = list(ar=phi,sd = SD)
if(all(arimaorder(auto.arima(x,ic = "aicc"))) != c(1,0)) {
cnt <- cnt + 1
} else if (all(arimaorder(auto.arima(x,ic = "aicc"))) == c(1,0)) {
cnt <- cnt + 1
} else { break }
}
cnt
},DF[["N"]],DF[["SD"]],DF[["phi"]])
names(res) <- paste("SD","phi",DF[["phi"]],sep = "-")
res
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。