二元运算符的非数字参数,AR(1)模型

时间:2015-04-25 00:53:42

标签: r for-loop runtime-error

我有一个练习,我必须运行以下AR(1)模型:

xi =c+φxi−1+ηi (i=1,...,T)

我知道ni~N(0,1); x0~N(c /(1-φ),1 /(1-φ2)); c = 2; φ= 0.6 我正在尝试做一个for循环。我的代码如下:

n <- rnorm(T, 0, 1)
c <- 2
phi <- 0.6

x_0 <- rnorm(1,c/(1-phi), 1/(1-phi**2))

v <- vector("numeric", 0)

#for (i in 2:T){

  name <- paste("x", i, sep="_")
  v <- c(v,name)
  v[1] <- c + phi*x_0 + n[1]
  v[i] <- c + phi*v[i-1] + n[i]

}

但是,我一直收到这个错误:

Error in phi * v[i - 1] : non-numeric argument to binary operator

我理解这个错误是什么,但我找不到任何解决方案来解决它。有人可以赐教吗?如何将数值赋给名称向量?

谢谢!

2 个答案:

答案 0 :(得分:0)

我猜您似乎需要以下内容。它将产生11个元素,包括初始x值。您可以稍后将其排除。

set.seed(1237)
t <- 10
n <- rnorm(t, 0, 1)
c <- 2
phi <- 0.6
x0 <- rnorm(1, c/(1-phi), 1/(1-phi**2))
v <- c(x0, rep(0, t))

for(i in 2:length(v)) {
  v[i] <- c + phi * v[i-1] + n[i-1]
}
v
[1] 4.967833 4.535847 2.748292 2.792992 5.389548 6.173001 4.526824 3.790483 4.307981 5.442913 4.958193

答案 1 :(得分:0)

您将v定义为数字向量,然后v <- c(v, name)v变为字符向量,因为name是字符。这就是导致错误的原因。

如果我没弄错,你的意图是为数字向量中的值指定名称。没关系,你只需要一种不同的方法。

n <- rnorm(t)
c <- 2
phi <- 0.6

x_0 <- rnorm(1, c/(1-phi), 1/(1-phi^2))

v <- c + phi*x_0 + n[1]

for (i in 2:t) {
    v[i] <- c + phi*v[i-1] + n[i]
}

names(v) <- paste("x", 1:t, sep="_")

R中的向量没有静态大小;它们会根据需要动态调整大小。因此,即使我们使用标量值初始化v,它也会增长以适应循环中的每个新值。

最后一步是给v一个名单。这可以使用names(v) <-来完成。现在看一下v - 它有名字!

另外,由于T是R中TRUE的同义词,因此最好不要将T用作变量名。因此我在这里使用了t