【发布时间】:2021-02-05 00:53:08
【问题描述】:
我尝试调整AR(1) ols小样本偏差,所以我写了一个代码然后在循环函数中设置break但总是失败,我如何在for循环中设置条件?
n = 31 # simulate regression samples
yt <- c()
ANS <- rep(NA,1000) # create a place for beta loop
for (M in c((1:3)/100)) { # after 1000 beta loop, I want simulate AR(1)+0.01 (EX:0.91、0.92、0.93...) Data for next loop in beta
for (i in 1:1000){ # Monte Carole to estimate beta
yt[1] <- rnorm(1,0,1)
for (z in 2:n) { # simulate AR(1)=0.9+M loop
yt[z] <- (0.9 + M) * yt[z-1] + rnorm(1,0,1)
}
yt
X <- yt[-n]
beta <- solve(t(X) %*% X) %*% t(X) %*% yt[-1] # Estimate AR(1) coeff(beta)
ANS[i] <- sort(beta)
cat(M," ","\n")
### if (beta[500] - 0.9 <= 0.01) break ### I want set this condition to stop loop but failed , get error message : Error in if (beta[500] - 0.9 <= 1) break , missing value where TRUE/FALSE needed
}}
ifelse(abs(quantile(ANS , probs = c(0.5)) - 0.9) <= 0.01, TRUE, FALSE ) # Because I didn't know how to set break in it, I had to operate it manually
.
下面我尝试添加“if (beta[500] - 0.9
n = 31 # simulate regression samples
yt <- c()
ANS <- rep(NA,1000) # create a place for beta loop
for (M in c((1:3)/100)) { # after 1000 beta loop, I want simulate AR(1)+0.01 (EX:0.91、0.92、0.93...) Data for next loop in beta
for (i in 1:1000){ # Monte Carole to estimate beta
yt[1] <- rnorm(1,0,1)
for (z in 2:n) { # simulate AR(1)=0.9+M loop
yt[z] <- (0.9 + M) * yt[z-1] + rnorm(1,0,1)
}
yt
X <- yt[-n]
beta <- solve(t(X) %*% X) %*% t(X) %*% yt[-1] # Estimate AR(1) coeff(beta)
ANS[i] <- sort(beta)
cat(M," ","\n")
if (beta[500] - 0.9 <= 0.01) break
}}
有谁知道我设置条件时为什么会出错? # if (beta[500] - 0.9
【问题讨论】:
-
可能有助于发布您的错误
-
不要在这里使用
ifelse。如果您的条件已知长度为 1,那么您应该使用if和可选的else。时期。使用ifelse有一些陷阱,在这种情况下,滥用它表明设计不佳。 -
此外,您对分位数的检查在
for循环的之外,因此break将不起作用。如果要中断for循环,则需要if,并且需要将for循环放入内部,如for (ing in 1:100) { if (ind > 50) break ; }。
标签: r loops for-loop statistics regression