R上的简单高斯过程仿真

如何解决R上的简单高斯过程仿真

如何使用均值函数X(t),t = 1,. . .,200模拟高斯过程m(t) = 0和 协方差函数r(h) = Cov(t,t + h) = exp(-|h|)。我知道这个过程有时称为 Ornstein-Uhlenbeck过程,但如何绘制模拟过程。

感谢您的期待

解决方法

按照Wikipedia的定义,Ornstein–Uhlenbeck过程由以下随机微分方程定义: 是维纳过程,它的特性之一是具有高斯增量,即

上述等式可以按以下方式离散化: 由于维纳过程的高斯增量属性,我们得到了。这意味着可以使用sqrt(dt)*rnorm(1)

生成增量值

我在R中编码了以下函数,该函数采用时间向量,过程的平均值,标准差和theta的值。

simulate <- function(t,mean=0,std=1,x0=mean,theta=1,number.of.points=length(t)){
  # calculate time differences
  dt <- diff(t)
  X <- vector("numeric",length=number.of.points)
  X[1] <- x0
  for(i in 1:(number.of.points-1)){
    X[i+1] <- X[i] + theta * (mean-X[i])*dt[i] + std * sqrt(dt[i])* rnorm(1)
  }
  data.frame(x=t,y=X)
}
simulate(t=1:200) %>%  ggplot(aes(x,y)) + geom_line()

使用purrr

的另一种实现
simulate <- function(t,sd=1,number.of.points=length(t)){
  stopifnot(!missing(t) | !missing(number.of.points))
  if(missing(t)){
    t <- 1:number.of.points
  } 

  unlist(purrr::accumulate2(vector("numeric",length=number.of.points-1),diff(t),function(x,o,y) {
    x + theta*(mean - x)* y + sqrt(y)*rnorm(1)
  },.init=x0),use.names=F) -> X
  
  data.frame(x=t,y=X)
}
simulate(number.of.points=200) %>%  ggplot(aes(x,y)) + geom_line()

,

从此处使用功能:https://quant.stackexchange.com/questions/1260/r-code-for-ornstein-uhlenbeck-process

ornstein_uhlenbeck <- function(T,n,nu,lambda,sigma,x0){
  dw  <- rnorm(n,sqrt(T/n))
  dt  <- T/n
  x <- c(x0)
  for (i in 2:(n+1)) {
    x[i]  <-  x[i-1] + lambda*(nu-x[i-1])*dt + sigma*dw[i-1]
  }
  return(x);
}

test <- ornstein_uhlenbeck(200,200,0.8,1,0)
plot(x = seq_along(test),y = test,type = 'l')

(请注意,它仅给您一个大致的分布,如链接中对该问题的答案之一所述。)

我假设T = 200,n = 200,nu = 0(如您所述),平均回归参数为0.8,sigma为1,并且过程从0开始。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?