我正在写一个基于协整的闪亮应用程序。
在找到协整向量后,我使用ggplot2
绘制了所有均值回复系列。我这样做的方法是将所有这些协整系列放在一个数据框中,然后将其融合,然后根据变量进行换行。
直到这里我没有问题。
现在我想将移动平均值和移动标准偏差添加到每个协整序列的图中,但我找不到单独使用MA和STD的每个系列的方法。
我知道我现在所遇到的问题是我面对的问题,但我不是一个有经验的用户,所以我不知道如何解决它。现在我有:
我希望Cointegration系列1,MA系列1和标准系列1在同一图表上,并且对于Cointegration系列2具有不同的颜色和相同的颜色.... 我使用的代码是:
m= melt(DF, id.vars = "Date") # melt the df
ggplot(m, aes(x = Date, y = value, colour = variable, group=variable)) +geom_line() + facet_wrap( ~ variable) # plot
有没有办法将前3列包装在一起?我应该以不同的方式融化吗?我需要解释更清楚吗?
编辑: 基本上在雷曼兄弟的术语中假设我有一个由列组成的数据帧df:
日期,S1,MA1,STD1,S2,MA2,STD2
我希望我的x轴是Date,我希望在绘图上有S1,MA1,STD1,在另一个图上使用ggplot2有S2,MA2和STD2。作为id,我将S1,MA1,STD1组合在一起,然后S2,MA2,STD2也在一起
假设这是DataFrame:
Date S1 M1 ST1 S2 M2 ST2
1 02/12/1999 -0.000217052 0.002862195 -0.002390842 2.2025825 -1.17258213 -0.3057015
2 03/12/1999 -0.004882038 -0.015920939 -0.007014382 -0.4040079 -0.69496488 0.1000167
3 06/12/1999 -0.001445954 0.005077610 0.000000000 1.1573779 -1.64268166 -0.3847015
4 07/12/1999 -0.000907952 -0.005403168 0.002027728 -0.3165827 -1.16466940 -1.0113501
5 08/12/1999 0.000881220 0.011375226 -0.013524439 0.5154455 -0.51725208 1.0942177
6 09/12/1999 0.001043752 0.013400502 0.017033342 1.9368608 -0.05587143 0.5203337
现在已经足够清楚了吗?
答案 0 :(得分:0)
我希望我的x轴是Date,我希望在绘图上使用S1,MA1,STD1,使用ggplot2在另一个绘图上使用S2,MA2和STD2。
如果您按如下方式重塑数据:
Date S variable value
1 02/12/1999 S1 value -0.000217052
2 03/12/1999 S1 value -0.004882038
3 06/12/1999 S1 value -0.001445954
4 07/12/1999 S1 value -0.000907952
5 08/12/1999 S1 value 0.000881220
6 09/12/1999 S1 value 0.001043752
7 02/12/1999 S2 value 2.202582500
8 03/12/1999 S2 value -0.404007900
9 06/12/1999 S2 value 1.157377900
10 07/12/1999 S2 value -0.316582700
11 08/12/1999 S2 value 0.515445500
12 09/12/1999 S2 value 1.936860800
13 02/12/1999 S1 mavg 0.002862195
14 03/12/1999 S1 mavg -0.015920939
15 06/12/1999 S1 mavg 0.005077610
16 07/12/1999 S1 mavg -0.005403168
17 08/12/1999 S1 mavg 0.011375226
18 09/12/1999 S1 mavg 0.013400502
19 02/12/1999 S2 mavg -1.172582130
20 03/12/1999 S2 mavg -0.694964880
21 06/12/1999 S2 mavg -1.642681660
22 07/12/1999 S2 mavg -1.164669400
23 08/12/1999 S2 mavg -0.517252080
24 09/12/1999 S2 mavg -0.055871430
25 02/12/1999 S1 stddev -0.002390842
26 03/12/1999 S1 stddev -0.007014382
27 06/12/1999 S1 stddev 0.000000000
28 07/12/1999 S1 stddev 0.002027728
29 08/12/1999 S1 stddev -0.013524439
30 09/12/1999 S1 stddev 0.017033342
31 02/12/1999 S2 stddev -0.305701500
32 03/12/1999 S2 stddev 0.100016700
33 06/12/1999 S2 stddev -0.384701500
34 07/12/1999 S2 stddev -1.011350100
35 08/12/1999 S2 stddev 1.094217700
36 09/12/1999 S2 stddev 0.520333700
然后你可以得到你想要的情节如下:
ggplot(df, aes(x=Date)) + geom_line(aes(y=value, group=variable, colour=variable)) + facet_wrap(~ S)
结果是:
重塑数据:
有各种各样的软件包可用于重塑数据,包括tidyr,reshape2等。我还在学习如何使用这些软件,但这是我重塑它的复杂方式。我确信有些人可以更有效地做到这一点。 :)
# read the original data
df <- read.table("/tmp/table.dat")
# separate s1 and s2
df.s1 <- df[,1:4]
df.s2 <- df[,c(1,5:7)]
# convert s1 and s2 to long form
df.s1.melted <- melt(df.s1, id.vars=c("Date","M1","ST1"))
df.s2.melted <- melt(df.s2, id.vars=c("Date","M2","ST2"))
# rename columns of s1 and s2 so they can be combined with rbind
s1 <- setNames(df.s1.melted, c("Date", "mavg", "stddev", "S", "value"))
s2 <- setNames(df.s2.melted, c("Date", "mavg", "stddev", "S", "value"))
# combine s1 and s2 with rbind then convert mavg, stddev and value to long form
df <- melt(rbind(s1, s2), id.vars=c("Date", "S"))
# plot it
ggplot(df, aes(x=Date)) + geom_line(aes(y=value, group=variable, colour=variable)) + facet_wrap(~ S)