使用 ggplot2 在 R 中绘制多个随机试验

Plotting several random trials in R using ggplot2

我目前正在运行使用正态分布进行模拟,它模拟事件之间的时间并且基于对给定数据的分析(与问题无关)。模拟是这样创建的:

SimProcess <- function(mu, sigma, T) {

  ctimes <- c()  # Array of arrival times, initially empty
  t <- rnorm(1,mu, sqrt(sigma)) # Time of next arrival
  while(t < T) {
    ctimes <- c(ctimes, t)
    dt = rnorm(1, mu, sqrt(sigma))
    if (dt<0){dt = 0}
    t <- t + dt # sampling from the dataset
  }
  return(ctimes)
}

# Create a sample path of one run
T <- 10
# arrival times
arrivals <- SimProcess(mu_t, var_t, T)

现在我想做几个这样的随机试验,然后将它们绘制成一个图形,这样我们就可以将它与给定的数据进行比较。这些试验中有 10 个是理想的。我试过像这样绘制它但不幸的是它不起作用。恐怕我将不得不使用 reshape2 来融化 10 次试验的数据,因为这些向量的长度都不相同。我用它来尝试绘制所有线条,它显然无法正常工作。

x <- c(0, arrivals, T,rep(0,500-length(arrivals)))
y <- c(0:length(arrivals), length(arrivals),rep(0,500-length(arrivals)))
plotdataNT = data.frame(x,y)
p = ggplot(plotdataNT,aes(x,y))
plot(x,y,type = 's')
j = 1
for (j in 10){
  arrivals <- SimProcess(mu_t,var_t,T)
  x <- c(0, arrivals, T,rep(0,500-length(arrivals)))
  y <- c(0:length(arrivals), length(arrivals),rep(0,500-length(arrivals)))
  p = p + geom_step(mapping = aes (x,y))
}

编辑: 最后我弄明白了,因为我使用 10 而不是 1:10 它不会 运行 正确而且我还有一些更小的错误。这最终成为解决方案:

arrivals <- SimProcess(mu_t,var_t,T)
NT <- length(arrivals)
x <- c(0, arrivals, T,rep(0,correction-length(arrivals)))
y <- c(0:length(arrivals), length(arrivals),rep(0,correction-length(arrivals)))
plotdataNT = data.frame(x,y)
p = ggplot(plotdataNT,aes(x,y)) + geom_step(mapping = aes (x,y)) 
jk = 1
runs = 25
colourvec = rainbow(runs)
for (jk in 1:runs){
  arrivals <- SimProcess(mu_t,var_t,T)
  x <- c(0, arrivals, T,rep(0,correction-length(arrivals)))
  y <- c(0:length(arrivals), length(arrivals),rep(0,correction-length(arrivals)))
  newdata  = data.frame(x,y)
  p = p + geom_step(mapping = aes (x,y),newdata,colour = colourvec[jk])
}
p = p + scale_x_continuous(name = "Time in days") + scale_y_continuous(name = "Amount of claims")
p  

这导致 26 个随机样本以多种颜色绘制在一张图表中,它表​​示根据伽玛、正态或对数正态分布具有随机时间步长的过程。下面的答案是我的意思的一个更清晰的例子。如果有人知道如何以更有效的方式使用 reshape2 执行此操作,我也很乐意知道。

两种解决方案:

for (j in 1:10) {
  arrivals <- SimProcess(mu_t,var_t,T)
  x <- c(0, arrivals, T,rep(0,500-length(arrivals)))
  y <- c(0:length(arrivals), length(arrivals),rep(0,500-length(arrivals)))
  xy <- data.frame(x,y)
  p = p + geom_step(data=xy, mapping=aes(x,y))
}
print(p)

for (j in 1:10) {
  arrivals <- SimProcess(mu_t,var_t,T)
  x <- c(0, arrivals, T,rep(0,500-length(arrivals)))
  y <- c(0:length(arrivals), length(arrivals),rep(0,500-length(arrivals)))
  xy <- data.frame(x,y)
  p = p + geom_step(mapping=aes_string(x,y))
}
print(p)