2015-04-25 32 views
0

我有一个锻炼做,我必须运行下面的AR(1)模型:非数值参数为二进制运算符,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 

我明白这是什么错误,但我无法找到任何解决方案来解决它。有人请赐教吗?我怎样才能给名称向量分配数值?

谢谢!

+0

您正在将'v'定义为一个数字向量,但随后将'name'添加到它,这是字符,所以'v'就变成了字符。这就是为什么你会收到关于对非数字值执行操作的错误 - 'v'不是数字。如果您试图将名称与'v'的每个值相关联,请将'names(v)'设置为等于名称列表。 –

回答

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

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 
相关问题