我花了一段时间发现R
和TraMineR
包,以便能够分析我的数据库项目的转换事件(用于本讨论的状态)的MySQL导出(所以TSE
格式)。
我有10个状态,可以转换到任何其他状态(即没有特定的顺序)。
到目前为止,我已使用基本时间单位1小时将此数据转换为STS
,以便能够使用seqtrate
函数,该函数为我提供了绝对转换率每个州对彼此的状态(在10x10表中)。
我遇到的问题是将转换率计算为时间的函数。我想象这将再次显示为10x10表,但不是每个单元格中的绝对值,它可能是一个离散图形,表示根据不同时间的速率(例如< 24h,24-72h,72-168h, > 168H)
time.varying
有seqtrate
选项,但它计算每个时间单位的费率,我没有看到定义特定时间范围的选项。
我还想过使用SPS
,但我找不到任何具体的功能来执行此操作。
我能有另外一个功能吗?或者我需要使用seqtrate
的{{1}}选项手动编码吗?如果是后者,你能否把我放在正确的轨道上,我不知道从哪里开始。
更新(仅举例说明我希望前3个州获得的内容)
time.varying
答案 0 :(得分:1)
根据我的理解,您希望获得年龄类别的转换概率(自某个流程开始以来的时间间隔。),而您的数据在日历时间内对齐。即,发生的时间而不是自该过程开始以来的时间。
因此,您首先需要更改序列的对齐方式。 TraMineRextras
包为此提供seqstart
功能。以下是我们将面板数据转换为年龄对齐数据的示例。
library(TraMineRextras)
## Example data aligned on calendar years, starting in 2000
paneldata <- matrix(
c("A" , "A" , "B" , "A" , "A" ,
"A" , "A" , "B" , "B" , "B" ,
"A" , "A" , "B" , "B" , "B" ,
"B" , "A" , "A" , "B" , "B" ,
"A" , "B" , "A" , "A" , "B"), byrow=TRUE, ncol=5)
colnames(paneldata) <- 2000:2004
## original sequences aligned on years
(s.panel <- seqdef(paneldata))
## Sequence
## 1 A-A-B-A-A
## 2 A-A-B-B-B
## 3 A-A-B-B-B
## 4 B-A-A-B-B
## 5 A-A-A-A-B
## Change from calendar date to age alignment
startyear <- 2000
birthyear <- 1995:1999 ## just to illustrate
agedata <- seqstart(paneldata, data.start=startyear, new.start=birthyear)
colnames(agedata) <- 1:ncol(agedata)
## sequences aligned on ages
(s.age <- seqdef(agedata))
## Sequence
## 1 *-*-*-*-A-A-B-A-A
## 2 *-*-*-A-A-B-B-B
## 3 *-*-A-A-B-B-B
## 4 *-B-A-A-B-B
## 5 A-A-A-A-B
正确对齐序列后,您只需按时间间隔计算转换概率,此处为1-5和6-9岁。
seqtrate(s.age[,1:5])
## [-> A] [-> B]
## [A ->] 0.6363636 0.3636364
## [B ->] 0.3333333 0.6666667
seqtrate(s.age[,6:9])
## [-> A] [-> B]
## [A ->] 0.50 0.50
## [B ->] 0.25 0.75
希望这有帮助。