Построение и сортировка объектов многоканальной последовательности

Я хотел бы сделать графики индекса последовательности многоканального объекта последовательности для первых описательных целей. Тем не менее, я все еще не уверен, как это сделать правильно. Обычный способ сортировки одного объекта последовательности не работает, так как нет вложенной функции сортировки, которая сортирует по нескольким каналам. Мне кажется, лучший способ сделать MDS после вычисления расстояний многоканальной последовательности с помощью seqdistmc и соответствующим образом отсортировать все каналы. Этот подход требует множественных решений относительно меры расстояния и так далее, таким образом, он почти выходит за рамки моего первоначального описания.

  1. Можно ли каким-то образом создать вложенную функцию сортировки для объектов многоканальной последовательности? Может быть, сортируя сначала один канал с начала последовательностей, а затем сортируя «связи», равные последовательности, сортируя второй канал и так далее?
    Обновление: я нашел ответ на эту часть вопроса, используя seqHMM, см. ниже.
  2. Как вы думаете, как лучше построить и отсортировать объект многоканальной последовательности для описания?

Вот некоторый синтаксис R, который может помочь понять мою проблему

library(TraMineR)
library(TraMineRextras)

# Building sequence objects
data(biofam)

## Building one channel per type of event left, children or married
bf <- as.matrix(biofam[, 10:25])
children <-  bf==4 | bf==5 | bf==6
married <- bf == 2 | bf== 3 | bf==6
left <- bf==1 | bf==3 | bf==5 | bf==6

child.seq <- seqdef(children)
marr.seq <- seqdef(married)
left.seq <- seqdef(left)


# Create unsorted Sequence Index Plots
layout(matrix(c(1,2,3,4,4,4), 2, 3, byrow=TRUE), heights=c(3,1.5))
seqIplot(child.seq, title="Children", withlegend=FALSE)
seqIplot(marr.seq, title="Married", withlegend=FALSE)
seqIplot(left.seq, title="Left parents", withlegend=FALSE)
seqlegend(child.seq, horiz=TRUE, position="top", xpd=TRUE)


# Create sequence Index Plots sorted by alignment of first channel from beginning
mcsort.ch1 <- sortv(child.seq, start="beg")
layout(matrix(c(1,2,3,4,4,4), 2, 3, byrow=TRUE), heights=c(3,1.5))
seqIplot(child.seq, title="Children", sortv=mcsort.ch1, withlegend=FALSE)
seqIplot(marr.seq, title="Married", sortv=mcsort.ch1, withlegend=FALSE)
seqIplot(left.seq, title="Left parents", sortv=mcsort.ch1, withlegend=FALSE)
seqlegend(child.seq, horiz=TRUE, position="top", xpd=TRUE)

# Sequence Index Plots sorted by MDS scores of multi-channel distances

## Calculate multi-channel distances and MDS scores 
mcdist <- seqdistmc(channels=list(child.seq, marr.seq, left.seq),
                    method="OM", sm =list("TRATE", "TRATE", "TRATE"))
mcsort.mds <- cmdscale(mcdist, k=2, eig=TRUE)

## Create sequence Index Plots sorted by MDS scores of multi-channel distances
layout(matrix(c(1,2,3,4,4,4), 2, 3, byrow=TRUE), heights=c(3,1.5))
seqIplot(child.seq, title="Children", sortv=mcsort.mds$points[,1], withlegend=FALSE)
seqIplot(marr.seq, title="Married", sortv=mcsort.mds$points[,1], withlegend=FALSE)
seqIplot(left.seq, title="Left parents", sortv=mcsort.mds$points[,1], withlegend=FALSE)
seqlegend(child.seq, horiz=TRUE, position="top", xpd=TRUE)

person non-numeric_argument    schedule 14.10.2016    source источник


Ответы (1)


Я только что наткнулся на пакет seqHMM, название которого предполагает другие цели, но который способен сортировать объекты многоканальной последовательности. Таким образом, seqHMM — это ответ на мой первый вопрос. Вот пример кода с использованием seqHMM:

library(TraMineR)
library(seqHMM)

# Building sequence objects
data(biofam)

## Building one channel per type of event left, children or married
bf <- as.matrix(biofam[, 10:25])
children <-  bf==4 | bf==5 | bf==6
married <- bf == 2 | bf== 3 | bf==6
left <- bf==1 | bf==3 | bf==5 | bf==6

child.seq <- seqdef(children)
marr.seq <- seqdef(married)
left.seq <- seqdef(left)

mcplot <- ssp(list(child.seq, marr.seq, left.seq), 
            type = "I",title = "Sequence index plots",
            sortv = "from.start", sort.channel = 1,
            withlegend = FALSE, ylab.pos = c(1, 1.5, 1),
            ylab = c("Parenthood", "Marriage", "Residence"))
plot(mcplot)

Вы можете узнать больше о возможностях пакета в следующей статье:
Helske, Satu; Хельске, Йоуни (2016): Скрытые марковские модели смеси для данных о последовательности: пакет seqHMM в Р. Ювяскюля. Доступно в Интернете по адресу https://cran.r-project.org/web/packages/seqHMM/vignettes/seqHMM.pdf.

person non-numeric_argument    schedule 18.10.2016