【发布时间】:2020-10-30 09:59:01
【问题描述】:
为了说明问题,让我们定义以下矩阵(其中NA表示该选项在t期间不可用)
set.seed(1)
x <- matrix(NA, 4, 4, dimnames = list(paste0("t=", seq_len(4)), LETTERS[seq_len(4)]))
x[lower.tri(x, diag = TRUE)] <- rnorm(10)
这给出了一个如下所示的矩阵:
A B C D
t=1 0.91897737 NA NA NA
t=2 0.78213630 0.61982575 NA NA
t=3 0.07456498 -0.05612874 -1.4707524 NA
t=4 -1.98935170 -0.15579551 -0.4781501 0.4179416
我们的目标是计算每个值在每个时间段 $t$ 中最高的概率,但是,这些值取决于前几个时间段的值。例如,在从周期 t=2 移动到 t=3 并假设 A 最高时,A 仅与 C 相比,而不是 B,因为在 t=2 中假定为更高。我们可以将问题构造成这样的树:
所以对于t=1,概率为 1,对于t=2,我们从 1 个分组中计算 2 个概率,在 t=3 中,我们从 2 个分组中计算 4 个概率(注意一个选项是如何从比较中排除的,因为顺序在t-1) 和t=4 中它不是最高的依赖和固有假设,我们从 4 个分组中计算了 8 个概率。然后,最终概率是构成 8 条路径的每个 t 中概率的乘积。在真正的问题中,t 变得很大,手动识别这些分组变得不可行。
我一直在尝试想出一种聪明的方法来识别这些路径并计算概率。一个想法是为每个可能的模式使用一组“屏蔽矩阵”。这样我就可以简单地将掩码矩阵相乘并执行行操作。但是,随着级别数量的增加,我无法找到一种可靠的方法来填充不同的掩码矩阵。
例如,假设在直到最后一个周期的所有周期中选择A 的模式可以用以下掩码矩阵来描述:
mask <- matrix(c(
1, NA, NA, NA,
1, 1, NA, NA,
1, NA, 1, NA,
1, NA, NA, 1
), ncol = 4, byrow = TRUE, dimnames = list(paste0("t=", seq_len(4)), LETTERS[seq_len(4)]))
看起来像这样(在这种情况下,4 个可能的比较之一):
A B C D
t=1 1 NA NA NA
t=2 1 1 NA NA
t=3 1 NA 1 NA
t=4 1 NA NA 1
并且我们可以像这样计算每个时期的概率(所有行的总和应为 1):
exp_x <- exp(x * mask)
sum_exp_x <- rowSums(exp_x, na.rm = TRUE)
pr_x <- exp_x / sum_exp_x
A B C D
t=1 1.00000000 NA NA NA
t=2 0.54048879 0.4595112 NA NA
t=3 0.82423638 NA 0.1757636 NA
t=4 0.08261824 NA NA 0.9173818
对于所有可能的路径,如tgrows,是否有一种聪明的方法?还是填充一组掩码矩阵以循环遍历的好方法?我试图避免这个问题失控。完整的路径枚举和消除是否可能是更好的选择,即更快、更健壮?任何帮助、想法和指示都是有帮助的。
【问题讨论】:
-
那么每个分组一次只比较两个选项?换句话说,您的期权周期矩阵是否可能是非三角形的?
-
期权周期矩阵
x将永远是一个下三角矩阵(像一棵树)。实际上,每个周期添加一个选项t,我们提前知道会有多少周期,这里是T=4。
标签: r probability