Удалите отсутствующее состояние данных '%' при использовании функции TraMineR seqpcplot () - PullRequest
1 голос
/ 06 августа 2020

Я пытаюсь провести анализ последовательности событий на данных продольного исследования. Я хочу создать график, который выглядит следующим образом (стр. 44 из https://www.researchgate.net/publication/279560802_Exploratory_mining_of_life_event_histories), который, как мне кажется, был создан с использованием функции seqpcplot () в TraMineR: enter image description here

This would allow me to identify common occupational states which participants transition through whilst in the survey (e.g. “full-time education >> full-time work” OR “full-time work >> part-time work >> family responsibilities”).

Unfortunately, different participants stay within the survey for different amounts of time, leading to sequences of varying length. This seems to cause TraMineR to create a missing data state ‘%’ at the end of all but the longest sequences (I think to make sure they are all the same length?). This additional state ‘%’ is then inserted into the seqpcplot() graph.

Here is a randomly generated example of the problem:

## Import libraries and set seed
library(TraMineR)
set.seed(123)



## Define functions

# Function which randomly generates sequences of varying length
ranseq 

In this example, participants are assigned 1 of 6 potential states in each wave of the survey. The total length of the sequence varies between participants depending on how many times they have been interviewed (e.g. participant 4 has been interviews 7 times, whilst participant 6 has been interviewed 17).

However, once this has been converted to an event sequence object, a final state ‘%’ has been added to the end of almost every sequence:

# Convert to event sequence object
data.eseq 

This results in the following ‘seqpcplot’:

## Plot seqpcplot
# NOTE THAT 'missing' HAS BEEN SET TO "hide" AND 'with.missing' TO 'FALSE'
seqpcplot(seqdata = data.eseq, filter = list(type = "function", value = "linear"),
          order.align = "first", missing = "hide", with.missing = FALSE)

введите описание изображения здесь

Здесь практически каждая последовательность заканчивается состоянием «%». Это бесполезно, потому что все, что он говорит мне, это то, что эти последовательности событий имеют «недостающие данные», прикрепленные к концу последовательности, чтобы учесть тот факт, что они короче самой длинной последовательности в наборе данных.

Вопрос 1: Есть ли способ отформатировать данные или график, чтобы удалить это отсутствующее состояние данных «%»?

Вопрос 2: Если нет, то почему? Мне кажется, что вполне возможно построить последовательности событий различной длины на таком графике, не прибегая к этой категории «%».

Заранее спасибо за ваше время!

1 Ответ

1 голос
/ 07 августа 2020

В seqecreate можно указать событие, завершающее время наблюдения. Таким образом, простое решение - указать атрибут void объекта последовательности состояний ('%' по умолчанию) как end.event

data.eseq <- seqecreate(data.seq, tevent = "state", 
                        end.event = attr(data.seq,'void') )

Это работает только тогда, когда tevent = 'state' и оставляет пустой символ. в алфавите результирующей последовательности событий.

Лучшее решение - воздействовать на матрицу преобразования состояния в событие tevent: сначала сгенерируйте матрицу, связанную с выбранным методом, а затем очистите записи для столбец, связанный с пустым состоянием. Я проиллюстрирую ниже, используя метод 'transition' tevent.

sq.dat <- c('AAAA','AAAC','ABC','ABAA','AC')
sqm <- seqdef(seqdecomp(sq.dat, sep=''), right='DEL')
tm <- seqetm(sqm,method='transition')
tm[,which(colnames(tm)==attr(sqm,'void'))] <- ''
sqe <- seqecreate(sqm,tevent=tm)
alphabet(sqe)
##[1] "A"   "A>B" "A>C" "B>A" "B>C"
seqpcplot(sqe)

введите описание изображения здесь

...