作为时间函数的转换率
Transition Rate as a function of time
我花了一段时间来发现 R
和 TraMineR
包,以便能够分析 MySQL 转换事件的导出(本次讨论的目的)我的数据库项目(因此采用 TSE
格式)。
我有10个状态,可以转换到任何其他状态(即没有特定顺序)。
到目前为止,我已经成功地将此数据转换为 STS
,使用 1 小时的基本时间单位,以便能够使用 seqtrate
函数,这为我提供了绝对转换从每个州到其他州的比率(在 10x10 table)。
我遇到的问题是计算转换率作为时间的函数。我想象这会再次显示为 10x10 table,但不是每个单元格中的绝对值,它可能是一个离散图,表示根据不同时间的速率(例如 <24h、24-72h、72 -168 小时,>168 小时)。
seqtrate
有 time.varying
选项,但它计算每个时间单位的费率,我没有看到定义特定时间范围的选项。
我也想过使用 SPS
但我找不到任何特定的函数来执行此操作。
有没有其他功能可以让我做到这一点?或者我需要使用 seqtrate
的 time.varying
选项手动编码吗?如果是后者,你能不能让我走上正轨,我不知道从哪里开始。
更新(只是一个例子来阐明我想为前 3 个州获得什么)
| State1 | State2 | State3 |
State1 | av(<24),av(24-72),av(72-168),av(168+) | av(<24),av(24-72),av(72-168),av(168+) | av(<24),av(24-72),av(72-168),av(168+) |
State2 | av(<24),av(24-72),av(72-168),av(168+) | av(<24),av(24-72),av(72-168),av(168+) | av(<24),av(24-72),av(72-168),av(168+) |
State3 | av(<24),av(24-72),av(72-168),av(168+) | av(<24),av(24-72),av(72-168),av(168+) | av(<24),av(24-72),av(72-168),av(168+) |
据我了解,您希望获得超过年龄 类 的转换概率(自某个过程开始以来的时间间隔。),同时您的数据在日历时间上对齐。即,发生时间而不是自流程开始以来的时间。
因此,您首先需要更改序列的对齐方式。 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
希望对您有所帮助。
我花了一段时间来发现 R
和 TraMineR
包,以便能够分析 MySQL 转换事件的导出(本次讨论的目的)我的数据库项目(因此采用 TSE
格式)。
我有10个状态,可以转换到任何其他状态(即没有特定顺序)。
到目前为止,我已经成功地将此数据转换为 STS
,使用 1 小时的基本时间单位,以便能够使用 seqtrate
函数,这为我提供了绝对转换从每个州到其他州的比率(在 10x10 table)。
我遇到的问题是计算转换率作为时间的函数。我想象这会再次显示为 10x10 table,但不是每个单元格中的绝对值,它可能是一个离散图,表示根据不同时间的速率(例如 <24h、24-72h、72 -168 小时,>168 小时)。
seqtrate
有 time.varying
选项,但它计算每个时间单位的费率,我没有看到定义特定时间范围的选项。
我也想过使用 SPS
但我找不到任何特定的函数来执行此操作。
有没有其他功能可以让我做到这一点?或者我需要使用 seqtrate
的 time.varying
选项手动编码吗?如果是后者,你能不能让我走上正轨,我不知道从哪里开始。
更新(只是一个例子来阐明我想为前 3 个州获得什么)
| State1 | State2 | State3 |
State1 | av(<24),av(24-72),av(72-168),av(168+) | av(<24),av(24-72),av(72-168),av(168+) | av(<24),av(24-72),av(72-168),av(168+) |
State2 | av(<24),av(24-72),av(72-168),av(168+) | av(<24),av(24-72),av(72-168),av(168+) | av(<24),av(24-72),av(72-168),av(168+) |
State3 | av(<24),av(24-72),av(72-168),av(168+) | av(<24),av(24-72),av(72-168),av(168+) | av(<24),av(24-72),av(72-168),av(168+) |
据我了解,您希望获得超过年龄 类 的转换概率(自某个过程开始以来的时间间隔。),同时您的数据在日历时间上对齐。即,发生时间而不是自流程开始以来的时间。
因此,您首先需要更改序列的对齐方式。 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
希望对您有所帮助。