【发布时间】:2020-09-22 03:35:13
【问题描述】:
我有一个关于用户在特定时间间隔内(总共 9 个)状态之间转换的数据集。该数据集将用于马尔可夫链模型。总共有 96 个时间间隔,因此:对于每个用户,有 96 个观测值,每个观测值都提供指定的时间间隔、开始位置和结束位置。结合两个位置的状态仅仅意味着用户仍在两个状态之间转换。
下面是一个虚构的数据集。在此示例中,与实际数据集不同,开始和结束位置不一定是相关联的,但我相信这可以很好地说明问题。
ID <- rep(1:10, each = 96)
TimeInterval <- rep(1:96, 10)
Locations <- c("Home", "Bakery", "Grocery", "Home-Bakery", "Home-Grocery", "Bakery-Home", "Bakery-Grocery", "Grocery-Home", "Grocery-Bakery")
startLocation <- sample(Locations, 960, replace = TRUE)
endLocation <- sample(Locations, 960, replace = TRUE)
df <- data.frame(ID, TimeInterval, startLocation, endLocation)
我想为每个时间间隔计算一个转移矩阵,其中转移概率是通过在给定前一个时间间隔的状态/位置的情况下转移到状态/位置的概率来计算的。例如,为了计算 TimeInterval 37 的转移概率矩阵,在给定 TimeInterval 36 中的状态的情况下,采用 TimeInterval 37 中处于某个状态的概率。
这将产生总共 96 个转换矩阵。然后,在给定特定时间范围内,从一种状态(位置)转换到另一种状态的概率取决于所有用户组合的概率。
但是,我不知道如何汇总各个转换的结果。计算这些矩阵的有效方法是什么?
每个时间间隔的转移矩阵应该是一个包含所有状态的 9x9 矩阵。
编辑:
适用于单个转换矩阵的(非常丑陋的)dplyr 解决方案:
Interval36 <- df %>% filter(TimeInterval== 36)
Interval37 <- df %> filter(TimeInterval == 37)
timeBlock37 <- as.data.frame(cbind(Interval37$journey, Interval36$journey))
mTimeBlock37 <- as.data.frame.matrix(table(timeBlock37))
timeBlock <- prop.table(mTimeBlock37 )
timeBlock
【问题讨论】:
标签: r matrix transition probability