如何应用splom()函数以创建多个相关成对图?

时间:2014-08-01 08:48:58

标签: r plot

我已经问过similar question如何创建下图: enter image description here  我被建议使用splom()函数,但我不知道如何将它应用于我的数据。我看到了splom()函数的例子,可以找到herehere,但由于编程技巧低,我无法应用它。

我有24个时间序列,属于4个独立的组(4个Pirwise相关图)。 4组:

1)频率= 1分钟。 ,归属时间序列:AAPL_1m,MSFT_1m,INTC_1m,FB_1m,MU_1m,IBM_1m。 2)频率= 2分钟。 ,归属时间序列:AAPL_2m,MSFT_2m,INTC_2m,FB_2m,MU_2m,IBM_2m。 3)频率= 5分钟。 ,所属时间序列:AAPL_5m,MSFT_5m,INTC_5m,FB_5m,MU_5m,IBM_5m。 4)频率= 10分钟。 ,所属时间序列:AAPL_10m,MSFT_10m,INTC_10m,FB_10m,MU_10m,IBM_10m。

每个成对图应显示每组中时间序列之间的相关性。 为了创建每个单独的成对图,我使用了以下函数:

pairs(cbind(AAPL_1m, MSFT_1m, INTC_1m, FB_1m, MU_1m, IBM_1m),main="Frequency=1 Min.",font.labels = 2, col="blue",pch=16, cex=0.8, cex.axis=1.5,las=1)
pairs(cbind(AAPL_2m, MSFT_2m, INTC_2m, FB_2m, MU_2m, IBM_2m),main="Frequency = 2 Min.",font.labels = 2, col="blue",pch=16, cex=0.8, cex.axis=1.5,las=1)
pairs(cbind(AAPL_5m, MSFT_5m, INTC_5m, FB_5m, MU_5m, IBM_5m),main="Frequency = 5 Min.",font.labels = 2, col="blue",pch=16, cex=0.8, cex.axis=1.5,las=1)
pairs(cbind(AAPL_10m, MSFT_10m, INTC_10m, FB_10m, MU_10m, IBM_10m),main="Frequency = 10 Min.",font.labels = 2, col="blue",pch=16, cex=0.8, cex.axis=1.5,las=1)

如果有人可以建议如何应用splom()函数来创建提到/显示的图形,将非常感激。

此外,如果还有另一个更合适的功能可以在单个图中集成各个成对图(pair()),我很乐意应用它。

2 个答案:

答案 0 :(得分:4)

有些demodata会很高兴,但是让我们先生成一些,只有三个变量:

AAPL_1m<-rnorm(1000)
MSFT_1m<-rnorm(1000) 
INTC_1m<-rnorm(1000)
AAPL_2m<-rnorm(1000)
MSFT_2m<-rnorm(1000) 
INTC_2m<-rnorm(1000) 

为了使splom()起作用,您需要生成分组变量。这是来自1m组的1000次观察,以及来自2m组的另外1000次观察。因此,分组变量只是一个1000 1m值的简单向量,后面是1000 2m个值:

group<-c(rep("1m", 1000), rep("2m", 1000))

在您的情况下,分组变量可能会生成如下:

group<-c(rep("1m", length(AAPL_1m)), rep("2m", length(AAPL_2m)))

获得分组变量后,您可能希望将所有内容绑定到sinle数据帧中,如下所示:

dat<-data.frame(AAPL=c(AAPL_1m, AAPL_2m), MSFT=c(MSFT_1m, MSFT_2m), INTC=c(INTC_1m, INTC_2m), group=group)

一旦你有一个数据框,分组变量给出观察组,你可以绘制散点图矩阵:

library(lattice)
# Three first columns of the data plotted conditional on the grouping
splom(~dat[,1:3]|group)

结果图应大致如下所示:

enter image description here

这需要推广到您的四批数据,但它应该是直接的(只需为四个批次生成分组,并将所有四个单独的批次绑定在一起)。函数splom()还有更多可用于参数的参数,例如,使绘图更漂亮。

答案 1 :(得分:1)

JTT给出了关于如何应用splom()的准确解释。以下代码表示应用于问题的JTT代码的扩展名。

group<-c(rep("Frequency = 1 Min.", length(AAPL_1m)), 
rep("Frequency = 2 Min.", length(AAPL_2m)),
rep("Frequency = 5 Min.", length(AAPL_5m)),
rep("Frequency = 10 Min.", length(AAPL_10m)))

dat<-data.frame(AAPL=c(AAPL_1m, AAPL_2m, AAPL_5m, AAPL_10m),
    MSFT=c(MSFT_1m, MSFT_2m, MSFT_5m, MSFT_10m),
    INTC=c(INTC_1m, INTC_2m, INTC_5m, INTC_10m),
    FB=c(FB_1m, FB_2m, FB_5m, FB_10m),
    MU=c(MU_1m, MU_2m, MU_5m, MU_10m),
    IBM=c(IBM_1m, IBM_2m, IBM_5m, IBM_10m),
    group=group)

splom(~dat[,1:6]|group)

代码的结果如下图所示: enter image description here

但是,应该有一些改进:

  1. x和Y轴以及标签应设置在外面(如问题中所示)
  2. 应改变成对图的顺序(左上角应为&#34;频率= 1&#34;右上角应为&#34;频率= 1&#34; ...)