我想创建一个覆盖1000个MA(2)过程模拟的图(1个图,1000行)。我似乎无法让ggplot绘制这些1000系列中的一个以上。这里有很多关于这个问题的帖子,似乎大多数问题都是通过在reshape2库中使用融合函数来解决的,但是,这并没有解决我的问题。我不确定我的问题是什么,除了这里的其他数据集/示例似乎可以用于绘制多行,所以我想知道它是否是我的函数生成的数据。很抱歉,如果这是一个简单的修复,我似乎无法找到答案。
#create function to simulate MA(2) process
sim<-function(n,sigma,mu,theta) {
epsilon<-rnorm(n,0,sigma)
z<-matrix(nrow=n,ncol=1001)
z<-replicate(1000,
z[,1]<-as.numeric(mu+epsilon[1:n]+theta*epsilon[2:n-1]) )
}
#run simulation, add time vector
z <-sim(23,0.5,0.61,0.95)
time<-matrix(seq(1,23))
z<-data.frame(time,z)
#collapse data
df <- data.frame(melt(zz, id.vars = 'time', variable.name = 'series'))
df[["series"]] <- gsub("X", "series", df[["series"]])
#attempt to plot using ggplot2's 'group' and 'color'
ggplot(data=df, aes(x=time,y=value, group=series)) +
geom_line(aes(color = series)) +
theme(legend.position='none')
答案 0 :(得分:2)
我不清楚你想如何在一个图中显示1000行。这听起来像个坏主意。此外,您用来模拟MA(2)过程中的随机数据的代码不起作用;为什么不使用arima.sim
,正是出于这个目的。
以下是使用MA(2)过程生成的数据绘制10个随机时间序列的示例。
set.seed(2017);
replicate(10, arima.sim(model = list(ma = c(-.7, .1)), n = 100)) %>%
as_tibble() %>%
mutate(time = 1:n()) %>%
gather(key, val, -time) %>%
ggplot(aes(time, val, group = key)) +
geom_line(alpha = 0.4)