【发布时间】:2015-07-30 05:14:20
【问题描述】:
我有 10 个变量,有 10 个单独的状态(十分位数),我正在尝试创建一个 2D 马尔可夫转换矩阵。这意味着一个 10^10 行和 10^10 列的矩阵,这将是非常稀疏的。这太大了,无法使用,但我希望有一种方法可以处理稀疏矩阵,特别是稀疏转换矩阵。
如果您不熟悉,转移矩阵提供了在下一个时间步从一个“状态”移动到另一个“状态”的概率。由于我有这么多变量,我必须得到从 10D 空间到 2D 的投影(如果你愿意的话)。例如,如果我有 2 个变量,每个变量为正或负,我将有 2^2 = 4 个状态,++、--、+-、-+,这些将是行和列。这些值将是从行状态移动到列状态的一些概率。可能不可能从一种状态转到另一种状态,从而在矩阵的该位置产生零。这会产生如下内容:
[+,+] [+,-] [-,-] [-,+]
[+,+] 0.5500000 0.3500000 0.1000000 0.0000000
[+,-] 0.0000000 0.5500000 0.4500000 0.0000000
[-,-] 0.0000000 0.2500000 0.0000000 0.7500000
[-,+] 1.0000000 0.0000000 0.0000000 0.0000000
正如您可以推断的那样,生成的矩阵可能(并且可能是)非常稀疏,从而创建了一个庞大的矩阵,只有某些区域实际上会产生有用的信息。
我目前正在使用“markovchain”包从数据中生成经验转移矩阵。 (它是一个非常简化、较小的测试版本,仅使用 3 个变量,每个变量具有 3 个单独的状态。)如果我尝试创建一个太大的矩阵,它将引发错误,这将有许多“空”区域。有没有更好的包支持非常大、非常稀疏的矩阵?
这是我正在使用的函数,如果可以的话,它将产生大的稀疏矩阵:
theP <- markovchainFit(data = gdxReturnsUD)$estimate@transitionMatrix
谢谢!!!
【问题讨论】:
-
10^100 太大了,什么都做不了,是的。即使你从十分位数到超过/低于中位数,你也会达到 10^30 的数量级。你必须简化你的模型。存储在稀疏矩阵中是可能的,但在这里没有帮助。
标签: r sparse-matrix markov-chains