实施正弦或余弦波(有可能)

时间:2018-10-29 18:57:13

标签: r time-series simulation

我正在寻找一种根据某种可能性在R中实现特殊波形(正弦/余弦)的简单方法。例如,如何对以下函数建模:

A=  runif(500,1,3)
phi=rnorm(500, 0, 1)
C=  runif(500,0,1)
Nt= rnorm(500,0,0.05)
t=  seq(1,50,length=500)
xt1= A*cos(t+phi)+C+Nt
xt2= A*sin(t+phi)+C+Nt

我将创建一个时间序列xt,它需要一个瞬时$ t $,其概率为0.5的余弦或概率为0.5的正弦

编辑:下面的功能 enter image description here

1 个答案:

答案 0 :(得分:1)

我认为使用if / else的向量化版本可以充分解决此问题:

ifelse(runif(length(t)) < 0.5, xt1, xt2)

注意:这在大多数情况下都非常有效。但是,ifelse可能会有副作用。正常工作,保留POSIXt类:

Sys.time() + ifelse(runif(3) < 0.5, 0, 100)
# [1] "2018-10-29 12:54:08 PDT" "2018-10-29 12:54:08 PDT" "2018-10-29 12:54:08 PDT"

但是,如果您正在处理已经分类的向量,则该类可能会丢失:

ifelse(runif(3) < 0.5, Sys.time(), Sys.time() + 100)
# [1] 1540842742 1540842842 1540842842

有一些解决方法,但有时将它们更好地归类为“黑客”。如果您没有意识到需要寻找它们,则不能使用它们。 (如果向量只是numericintegerlogicalcharacter,通常这不是一个因素,而且我敢肯定其他一些向量同样“好”。 )