二元运算符的非数字参数,AR(1) 模型
non-numeric argument to binary operator, AR(1) model
我有一个练习要做 运行 以下 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
我明白这个错误是什么,但我找不到任何解决方案来解决它。有人可以启发我吗?如何将数值分配给名称向量?
谢谢!
我猜你似乎需要以下内容。它将产生 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
您将 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
。
我有一个练习要做 运行 以下 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
我明白这个错误是什么,但我找不到任何解决方案来解决它。有人可以启发我吗?如何将数值分配给名称向量?
谢谢!
我猜你似乎需要以下内容。它将产生 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
您将 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
。