我有一个聚合自 8 亿条记录的频率表,想知道是否可以使用软件包从该频率表计算一阶转移矩阵,但由于某些状态不再发生,因此该矩阵不对称。以下是频率表的样本:
library(data.table)
model.data <- data.table(state1 = c(3, 1, 2, 3), state2 = c(1, 2, 1, 2), Freq = c(1,2,3,4))
该数据模型的样式如下:
状态1 | 状态2 | n |
---|---|---|
3 | 1 | 1 |
1 | 2 | 2 |
2 | 1 | 3 |
3 | 2 | 4 |
使用pollster包,我可以计算比例表:
library(pollster)
crosstab(model.data, state1, state2, Freq)
状态1 | 1 | 2 | n |
---|---|---|---|
1 | 0 | 100 | 2 |
2 | 100 | 0 | 3 |
3 | 20 | 80 | 5 |
然而,我需要的对称转移矩阵是:
状态1 | 1 | 2 | 3 | n |
---|---|---|---|---|
1 | 0 | 100 | 0 | 2 |
2 | 100 | 0 | 0 | 3 |
3 | 20 | 80 | 0 | 5 |
也就是说,即使没有人转移到状态3,我仍然希望包括它,并且代码应该能够自动发现需要添加一列0到状态3。
我不确定markovchain包中的markovchainFit函数是否能够处理我需要转换为数百万序列列表的800万行数据,由于内存限制和计算速度慢。
有人知道吗?
proportions
可以帮助缩短代码 :) - ThomasIsCodingproportions
函数。不知道它的作用。它与我所使用的prop.table
完全相同的代码库。 - IRTFM