R:为随机漫步编写递归函数(初始值)

时间:2016-01-17 22:57:35

标签: r for-loop recursion

我是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(对不起任何格式问题,我在解决这个问题时遇到了很多问题)

2 个答案:

答案 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)