我是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(对不起任何格式问题,我在解决这个问题时遇到了很多问题)
答案 0 :(得分:0)
在我的钢琴休息之后,它来到我身边。有趣的是,一旦你发现它,答案就会变得简单......几乎是微不足道的。
将初始值设置为矢量,即:
[y(1) = y(-1) + eps(1), y(2)= y(0) + eps(2)]
一切顺利。事实并非如此,但是没有理由说明任何一种情况。
使用模数分割迭代,然后将其连接回主向量的方法也可以,但是不必要且更复杂。用户和计算机越短越好。正如爱因斯坦所说,尽可能简单,但并不简单。
答案 1 :(得分:0)
我发现你的奇数和偶数系列是独立的。假设是这种情况,我只是将问题分成两列,并使用cumsum
来获取随机游走。最终的数据框包括随机数和随机游走,因此您可以比较它是否正常工作。
希望它有所帮助
ran.walk=function(n) {
eps=rnorm(ceiling(n / 2)*2)
dim(eps) <- c(2,ceiling(n/2))
# since each series is independent, we can tally each one in its own
eps2 <- apply(eps, 1, cumsum)
# and just reorganize it
eps2 <- as.numeric(t(eps2))
rndwlk <- data.frame(rnd=as.numeric(eps), walk=eps2)
# remove the extra value if needed
rndwlk <- rndwlk[1:n,]
return(rndwlk)
}
ran.walk(13)