R编程(功能和时间序列索引)

时间:2017-08-22 08:24:14

标签: r function for-loop time-series

我正在编写使用R。

我必须做功能和循环。

值:t = 0.001,n = 4,功能如下。

Click the function image file link

我想通过使用for循环计算y 2 (0.001),y 3 (0.001)和y 4 (0.001)。

另外,我做了一个R代码,但是有一个我不知道的错误。

如何制作循环来计算y 2 (0.001),y 3 (0.001)和y 4 (0.001)?

以下代码是我的R代码。谢谢。

###########################
#   value                 #
###########################    
n<-4
t<-0.001
sigma<-numeric(4)
y<-numeric(4)
sigma[1]<-0.1
y[1]<-0

###########################
#   Brownian-Motion       #
###########################
nor1<-rnorm(n,0,1)
nor1<-cumsum(nor1)

###########################
#   function              #
###########################
delta<-function(t){
  0.01
}
alpha<-function(t){
  2*t*(1-t)
}
beta<-function(t){
  2*t*(1-t)
}
epsilon<-function(t){
  (2^(200*t))*(nor1)*(1/sqrt(log10(2)))
}

###########################
#   for-loop              #
###########################
sigma[i]<-delta(t)+(alpha(t)*y[i-1]*y[i-1])+(beta(t)*sigma[i-1]sigma[i-1]);
y[i]<-sigma[i]*epsilon(t);
print(y[i])
}

1 个答案:

答案 0 :(得分:0)

我会抛光一些东西(如果你想了解更多细节,请注释),但是@Prem提出的另外一点,你错误地指定了for循环(也许是通过R中的循环教程)和西格玛乘法。

但主要是,epsilon函数返回一个向量 - 每个观察值 - 而不是单个值。因此,我将其修改为依赖于i,如2)。

epsilon<-function(t,i){
  (2^(200*t))*(nor1[i])*(1/sqrt(log10(2)))
}

然后for循环就这样工作:

for (i in 2:n){
sigma[i]<-delta(t)+(alpha(t)*y[i-1]*y[i-1])+(beta(t)*sigma[i-1]*sigma[i-1]);
y[i]<-sigma[i]*epsilon(t,i);
print(y[i])
}