我觉得这个问题之前已被多次提出过,但是从我看过的问题来看,迄今为止没有一个解决方案对我有用。
我希望将两个相关矩阵的值绘制为散点图,在一个具有相同y范围(从0到1)的图中彼此相邻。
我的原始数据是跨越数年的112家公司的时间序列,我将其划分为两个子集,期间A&期间B.原始数据是动物园对象。
然后我创建了两个时期的相关矩阵:
corr_A <- cor(series_A)
corr_B <- cor(series_B)
对于进一步的数据分析,我删除了双重条目:
corr_A[lower.tri(corr_A, diag=TRUE)] <- NA
corr_A <- as.vector(corr_A)
corr_A <- corr_A[!is.na(corr_A)]
corr_B[lower.tri(corr_B, diag=TRUE)] <- NA
corr_B <- as.vector(corr_B)
corr_B <- corr_B[!is.na(corr_B)]
结果,我有两个向量,每个向量的长度为6216(111 + 110 + 109 + .. + 1 = 6216)。
然后我将这些向量组合成一个矩阵:
correlation <- matrix(c(corr_A, corr_B), nrow=6216)
colnames(correlation) <- c("period_A", "period_B")
我现在想要绘制这个矩阵,所以结果看起来与这张图相似:
我尝试使用格子中的xyplot进行绘图:
xyplot(period_A + period_B ~ X, correlation)
但是,在结果图中,两个散点图相互堆叠:
我也尝试更改矩阵本身 - 而不是使用6216行,我使用了12432行,然后将前6512行索引为“period_A”,将最后6512行索引为“period_B” - 结果图看起来非常类似于我想要的情节:
有什么方法可以使用xyplot创建我想要的情节?或者是否还有其他(ggplot,car)方法来生成情节?
编辑(添加样本数据以获得可重现的示例):
head(correlation) #data frame with 6216 rows, 3 columns
X period_A period_B
1 0.5 0.4
2 0.3 0.6
3 0.2 0.4
4 0.6 0.6
答案 0 :(得分:1)
我终于找到了解决方案: https://stats.stackexchange.com/questions/63203/boxplot-equivalent-for-heavy-tailed-distributions
首先,我们堆叠数据。
correlation <- stack(correlation)
然后,我们使用stripplot(来自点阵)combiend和jitter = TRUE来创建所需的图。
stripplot(correlation$values ~ correlation$ind, jitter=T)
结果绘图看起来与我想要的绘图完全一样,可以使用标准格子/绘图命令(ylab,xlab,xlim,ylim,scale等)进行操作。