r - 来自不同患者就诊序列的马尔可夫转移矩阵

标签 r matrix transition markov

我正在尝试根据不同患者的医生就诊顺序创建马尔可夫转移矩阵。在我的马尔可夫模型中,状态是不同的医生,联系是患者的就诊。患者可以留在同一家提供者处,也可以在下次就诊时转至另一家提供者处。使用该信息我需要创建一个转换矩阵。

这是Excel中的部分数据。数据包括对近 100 个不同提供商的超过 30K 次访问。

这是Excel中的部分数据。 data

如何使用此 Excel 数据(或 csv)并创建马尔可夫转移矩阵作为访问次数,例如: ....

我需要的矩阵如下所示:

enter image description here

如何使用 R 将数据转换为转换矩阵?

我对 R 还很陌生,确实需要帮助。

谢谢

最佳答案

这是一种适用于您的示例数据的方法。

我将使用 readxl 获取数据并使用 data.table 来操作它。

读取数据:

library(readxl)
library(data.table)

data <- setDT(read_excel("~/Desktop/Book2.xlsx"))[!is.na(PatId)]

#read_excel doesn't have the option to specify integers... silly...
data[ , (names(data)) := lapply(.SD, as.integer)]

预分配转换矩阵:

provs <- data[ , sort(unique(SeenByProv))]
nprov <- length(provs)

markov <- matrix(nrow = nprov, ncol = nprov,
                 dimnames = list(provs, provs))

逐行分配

for (pr in provs){
  markov[as.character(pr), ] <-
    data[ , {nxt <- SeenByProv[which(SeenByProv == pr) + 1L]
    .(prov = provs, count = 
        sapply(provs, function(pr2) sum(nxt == pr2, na.rm = TRUE)))}, by = PatId
    ][, sum(count), by = prov]$V1
}

这可能在某些地方可以加快速度,但它确实有效。

关于r - 来自不同患者就诊序列的马尔可夫转移矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34519137/

相关文章:

html - CSS 转换在 Firefox 中不起作用

javascript - Click D3.js 上的文本转换

r - 有没有办法用 R 中的列拆分并估算隐含值

r - 列名称中插入了句点,应该有空格

javascript - 应用透视矩阵顺序

java - 使用DFS算法查找矩阵中相邻数字的最大面积

iPhone 横向导航返回 Action 显示垂直 View 转换?

r - 如何将列表的元素合并到数据框中?在 R

r - 使用 Quantstrat 优化信号参数会导致错误 : attempt to select less than one element

JavaScript 矩阵行列式