TraMineR:用大约 3000 个不同状态的标签绘图

TraMineR: plotting with labels around 3000 distinct states

我正在使用 TraMineR 表示大约 40,000 个具有大约 3,000 个不同状态的序列。首先,我将聚类分析减少到 3,000 个序列(随机选择)。我已准备好绘制序列。

我无法在任何绘图的右侧添加图例。如果考虑到字母表的大小这是不可能的,至少我们可以在序列中添加前 10 个最常见的序列图,这 10 个序列的图例子集。这就是我的意思。

当我用seqfplot绘制10个最频繁的序列时,有没有办法把图例限制在这10个最频繁的序列上,以便读者识别这些序列? 谢谢。

一个解决方案是通过在 seqfplot 调用中设置 with.legend = FALSE 来抑制图例,然后使用基本的 legend 函数创建您自己的图例。

或者,您可以根据returns 最频繁序列的seqtab 函数的结果重新创建一个状态序列对象,然后绘制这个新对象。这里唯一的困难是保留原来的长标签和调色板。我使用 TraMineR.

附带的 mvad 数据进行说明

首先我们创建带有长标签和权重的原始状态序列对象。

library(TraMineR)
data(mvad)
mvad.lab <- c("employment", "further education", "higher education",
              "joblessness", "school", "training")
mvad.shortlab <- c("EM", "FE", "HE", "JL", "SC", "TR")
mvad.seq <- seqdef(mvad[, 17:86], states = mvad.shortlab,
                   labels = mvad.lab, weights = mvad$weight, xtstep = 6)

运行

seqfplot(mvad.seq, idxs=1:5)

你可以看到五个最常见的序列只包含 6 个状态中的 5 个(JL 没有出现在这些序列中)。

现在我们从 5 个最频繁的序列构建一个状态序列对象:

sf <- seqtab(mvad.seq, idxs = 1:5)
sff <- seqdef(sf, weights = attr(sf,"weights"))

为了匹配长标签和颜色,我们需要确定保留状态在原始字母向量中的位置:

sti <- which(alphabet(sf) %in% alphabet(sff))

这让我们可以用想要的颜色和长标签重建sff

sff <- seqdef(sf, weights = attr(sf,"weights"), 
       cpal=cpal(sf)[sti], labels=mvad.lab[sti], xtstep=6)
seqfplot(sff)

当然,显示的100%百分比并不是所有序列的百分比,而是sff中五个序列的百分比。

获得正确百分比的解决方案是

par(mfrow=c(1,2))
seqfplot(mvad.seq, idxs = 1:5, with.legend=FALSE)
seqlegend(sff)