【发布时间】:2016-01-17 22:57:35
【问题描述】:
我是 R 的新用户,我正在尝试创建一个模拟随机游走的函数。我的问题是试图顺利整合一些初始值。假设我有这个基本功能。
y(t) = y(t-2) + eps(t)
Epsilon(或 eps(t))将是随机因子。我想定义 y(-1)=0,并且 y(0)=0。
这是我的代码:
ran.walk=function(n){ # 'n' steps will be the input
eps=rnorm(n) # creates a vector taking random values from N(0,1)
y= c(eps[1], eps[2]) # this will set up my initial vector
for (i in 3:n){
ytemp = y[i-2] + eps[i] ## !!! problem is here. Details below !!!
y= c(y, ytemp)
}
return(y)
}
我正试图让这个开始添加 y3、y4、y5 等,但我认为这个设计存在缺陷......我不确定我是否应该只设置两条单独的线,用if 语句:测试 n 是偶数还是奇数,可能带有:
if i%%2 == 1 #using modulus
因为,
y1= eps1,
y2= eps2,
y3= y1 + eps3,
y4= y2 + eps4,
y5= y3 + eps5 and so on...
目前,我在代码中看到了错误。 我有 y1 和 y2 连接,但我认为它不知道如何合并 y[1] 我可以事先以某种方式定义 y[-1]=0, 和 y[0]=0 吗?我也试过了,但出错了。
提前感谢您的任何帮助。这是第一次尝试使用递归的 for 循环。
-N(对于任何格式问题,我很抱歉,我在解决这个问题时遇到了很多问题)
【问题讨论】:
-
我认为
y= c(err[1], eps[2])应该是y= c(eps[1], eps[2]) -
抱歉,我将“error”和“epsilon”互换使用作为回归的习惯。作为旁注,我相信用 if 语句拆分 for 循环可以解决问题(也许不是最优雅的)。即: if (i%%2==1) #then 使用 eps[1] 作为初始值 else # 对于偶数,使用 eps[2] 作为初始值,向量连接起来是一样的。