用于序列分析的Traminer R:除了拼写长度,如何解释状态顺序?

w1jd8yoj  于 2023-02-27  发布在  其他
关注(0)|答案(3)|浏览(124)

我正在R上用Traminer做序列分析,我想只考虑不同法术随时间的顺序。例如,我想在绘制最频繁的序列或使用指数图时,序列A-B-A将被视为与A-B-B-B-A相同。是否有一个选项可以在不改变数据格式的情况下处理这种类型的分析?

xqk2d5yq

xqk2d5yq1#

有两种策略可以生成关注状态排序的图。

  • 删除所有正时信息。
  • 使用图重点关注状态排序:平行坐标图。

您还可以使用特定的距离度量生成一个侧重于状态排序的类型。

示例

我们来看一个例子,首先构建序列对象:

library(TraMineR)
#> 
#> TraMineR development version 2.3-4 (Built: 2022-11-29)
#> Website: http://traminer.unige.ch
#> Please type 'citation("TraMineR")' for citation information.
data(biofam)
## Create the sequence object
bfstates <- c("Parent", "Left", "Married", "Left/Married",  "Child", "Left/Child", "Left/Married/Child", "Divorced")
bf.shortlab <- c("P","L","M","LM","C","LC", "LMC", "D")
bf.seq <- seqdef(biofam[,10:25], states=bf.shortlab, labels=bfstates)
#>  [>] state coding:
#>        [alphabet]  [label]  [long label]
#>      1  0           P        Parent
#>      2  1           L        Left
#>      3  2           M        Married
#>      4  3           LM       Left/Married
#>      5  4           C        Child
#>      6  5           LC       Left/Child
#>      7  6           LMC      Left/Married/Child
#>      8  7           D        Divorced
#>  [>] 2000 sequences in the data set
#>  [>] min/max sequence length: 16/16

创建于2023年2月21日,使用reprex v2.0.2

删除所有计时信息

可以使用seqdss函数删除定时信息:

bf.dss <- seqdss(bf.seq)

然后绘制它(任何序列图都可以):

seqfplot(bf.dss)

seqIplot(bf.dss, sortv="from.start")

平行坐标图

平行坐标图旨在仅关注状态顺序:

seqpcplot(bf.dss)

结果可能看起来很混乱(取决于您的数据)。您可以通过显示占案例总数50%的颜色模式来突出显示最常见的状态排序

seqpcplot(bf.seq , filter = list(type = "function",
                                 value = "cumfreq",
                                 level = 0.5))

有关详细信息,请参见以下参考。
Bürgin,R.和G. Ritschard(2014),分类纵向数据的装饰平行坐标图,美国统计学家68(2),98 - 103. https://doi.org/10.1080/00031305.2014.887591

类型

如果你想建立一个专注于状态排序的类型学,你需要相应地选择距离度量,更多细节请参见下面文章的指导方针部分。
Studer,M.和Ritschard,G.(2016),《生命轨迹差异的重要性:序列不相似性测量的比较综述,J.R. Stat. Soc. A,179:第481 - 511章

vx6bjr1n

vx6bjr1n2#

基于Matthias的解决方案,您还可以使用DSS序列bf.dss的排序来绘制完整序列bf.seq。这里我们使用TraMineRextrassortv函数。

library(TraMineR)
data(biofam)
## Create a cohort factor for later use
biofam$cohort <- cut(biofam$birthyr, c(1900,1930,1940,1950,1960), 
                     labels=c("1900-1929", "1930-1939", "1940-1949", "1950-1959"), right=FALSE)
## Create the sequence object
bfstates <- c("Parent", "Left", "Married", "Left/Married",  "Child", "Left/Child", "Left/Married/Child", "Divorced")
bf.shortlab <- c("P","L","M","LM","C","LC", "LMC", "D")
bf.seq <- seqdef(biofam[,10:25], states=bf.shortlab, labels=bfstates)
bf.dss <- seqdss(bf.seq)

library(TraMineRextras)
seqIplot(bf.seq, sortv=sortv(bf.dss), legend.prop=.2)

m0rkklqb

m0rkklqb3#

我不明白你怎么能不接触序列格式就达到你的目标。如果你想专注于序列,忽略法术持续时间,你需要独特的状态序列格式。幸运的是,TraMineR提供了seqdss()函数来非常容易地获得DSS序列。下面是一个例子,上面的问题中提到了两个序列:

library(TraMineR)
#> 
#> TraMineR stable version 2.2-6 (Built: 2023-01-02)
#> Website: http://traminer.unige.ch
#> Please type 'citation("TraMineR")' for citation information.

## Generate example data with 2 sequences
seq1 <- c("A", "B", "A")
seq2 <- c("A", "B", "B", "B", "A")
length(seq1) <- length(seq2)
seqdata <- rbind(seq1,seq2) |> seqdef()

# Tabulate the sequences considering durations (default)
seqtab(seqdata)
#>             Freq Percent
#> A/1-B/1-A/1    1      50
#> A/1-B/3-A/1    1      50
# Tabulate DSS sequences (getting rid of duration information)
seqtab(seqdss(seqdata))
#>             Freq Percent
#> A/1-B/1-A/1    2     100

创建于2023年2月21日,使用reprex v2.0.2

相关问题