删除丢失的数据状态‘;%’;使用TraMineR时’;s seqpcplot()函数

删除丢失的数据状态‘;%’;使用TraMineR时’;s seqpcplot()函数,r,traminer,longitudinal,sequence-analysis,R,Traminer,Longitudinal,Sequence Analysis,我试图对纵向调查数据进行事件序列分析。我想创建一个类似(的第44页)的绘图,我相信它是使用TraMineR中的seqpcplot()函数生成的: 这将使我能够确定参与者在调查期间过渡的常见职业状态(例如,“全日制教育>>全日制工作”或“全日制工作>>兼职工作>>家庭责任”) 不幸的是,不同的参与者在调查中停留的时间不同,导致序列长度不同。这似乎会导致TraMineR在除了最长序列之外的所有序列的末尾创建缺少的数据状态“%”(我想是为了确保它们的长度相同吗?)。然后将此附加状态“%”插入seqp

我试图对纵向调查数据进行事件序列分析。我想创建一个类似(的第44页)的绘图,我相信它是使用TraMineR中的seqpcplot()函数生成的:

这将使我能够确定参与者在调查期间过渡的常见职业状态(例如,“全日制教育>>全日制工作”或“全日制工作>>兼职工作>>家庭责任”)

不幸的是,不同的参与者在调查中停留的时间不同,导致序列长度不同。这似乎会导致TraMineR在除了最长序列之外的所有序列的末尾创建缺少的数据状态“%”(我想是为了确保它们的长度相同吗?)。然后将此附加状态“%”插入seqpcplot()图中

以下是随机生成的问题示例:

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



## Define functions

# Function which randomly generates sequences of varying length
ranseq <- function(x,y) {
  y[round(runif( round(runif(1, 1, x)), 1, length(y)) ) ]
}

# Function which creates dataframe from randomly generated sequences
rangen <- function(x,y,z) {
  # Create list of randomly generated sequences
  data <- list()
  for (i in 1:x) {
    a <- ranseq(y,z)
    b <- c(a, rep(NA, y-length(a) ) )
    data[[i]] <- b
  }
  # Convert to dataframe
  data <- data.frame(do.call(rbind, data))
  return(data)
}



## Generate sequences

# Define possible sates of the sequence
states <- c("A","B","C","D","E","F")

# Run rangen function (no. rows, max seq length, possible states)
data <- rangen(300,25,states)



## Convert to sequence object

# Convert data to a state sequence object
# NOTE THAT ALL MISSING VALUES (NAs) BEFORE, WITHIN AND AFTER SEQUENCES ARE DELETED
data.seq <- seqdef(data = data, alphabet = states, states = states, labels = states, 
                   left = "DEL", right = "DEL", gaps = "DEL")
head(data.seq)

####################################################################################

  Sequence                         
1 E-C-E-F-A-D-E-D                  
2 F-C-D-D-B-E-B-A-C-F-E-D          
3 F-D-E-D-D-B-B-F-F-D-E-A-C-E-B-C  
4 B-C-C-C-B-B-B                    
5 B-E-A-C-E-B-D-B-B-E-E-C          
6 A-C-B-E-C-E-E-E-C-E-D-E-A-C-B-C-D

在这里,几乎每个序列都以状态“%”结束。这是没有用的,因为它告诉我的只是这些事件序列的末尾附加了“缺失数据”,以说明它们比数据集中最长的序列短

问题1:是否有方法格式化数据或图形以删除此缺失的数据状态“%”?

问题2:如果没有,为什么没有?在我看来,在这样的图上绘制不同长度的事件序列应该是完全可能的,而不必求助于“%”类别。


提前感谢您抽出时间

sekecreate
中,您可以指定结束观察时间的事件。因此,一个简单的解决方案是将state sequence对象的
void
属性(默认情况下,
'%'
)指定为
end.event

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

嗨@Gilbert,非常感谢您的反馈!我已经在上面的例子中试过了,它完全符合你所说的。即,删除“%”序列对象。如果可以的话,我还有两个后续问题:(1)当我绘制这个新事件序列数据时,seqpcplot()仍然显示“%”类别,即使没有序列包含它。你知道如何从绘图中删除它吗?(2) 当我将其应用于实际数据时,我在seqpcplot_private(seqdata=seqdata,group=group,weights=weights,:[!]中得到错误消息
error无法链接权重和id向量
您知道这是什么原因吗?使用
tevent='state'
获得的事件序列pc图与状态序列DSS的pc图相同。因此请尝试
seqpcplot(seqdss(data.seq))
。至于错误,我需要数据和代码。您好@Gilbert,该更改已将其排序,谢谢!它还使用我的实际数据停止了错误。感谢所有帮助!
## 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)
data.eseq <- seqecreate(data.seq, tevent = "state", 
                        end.event = attr(data.seq,'void') )
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)