r语言 - 将随机概率转换为目标数



给定以下随机转移矩阵,如何将这些概率转换为随机数生成器的目标数?

transmat <- structure(c(0.77, 0.561, 0.14, 0.187, 0.07, 0.063, 0, 0.063, 
0.01, 0.125, 0.01, 0.001), dim = c(2L, 6L), 
dimnames = list(c("0", "1"), c("0", "1", "2", "5", "8", "9")))

目的是为在模拟环境中发生的转换输出目标数。这可以像下面的例子那样手动完成,它给出了转换矩阵第一行3个公平的六面骰子的总和的骰子滚动范围的近似值(参见这里的概率分布);然而,需要一种算法来做到这一点。

在所提供的示例中,当掷出3-12时,状态0将保持为状态0,但当掷出13-14时将转换为状态1,当掷出15-16时转换为状态2,当掷出17时转换为状态8,当掷出18时转换为状态9。

0      1       2       5   8    9   
0 "3-12" "13-14" "15-16" "-" "17" "18"
从概念上讲,我不确定如何进行。一种想法是:(1)索引随机数生成器结果的行和范围中的概率;(2)以某种方式将累积概率和剩余概率与可能随机数的概率进行比较。

我对你的问题的理解是,你想从矩阵"transmat"中的概率生成模拟。

除了你所描述的执行掷骰子模拟的文字方式(即使用floor(runif(n=1,min=1,max=7))生成随机掷骰子,并使用某种if语句生成下一个状态),

您可以使用sample从"transmat"中的概率生成实现。直接:

sample(x=as.numeric(colnames(transmat)),  
size=10^4,
replace=TRUE,
prob=transmat[1,])

这里的关键是使用transmat的概率作为sampleprob的参数。使用table的模拟状态计数:

0    1    2    8    9 
7681 1413  713   98   95 

显示这是对转移矩阵第一行中的转移概率的模拟。

你可以使用不同颜色的骰子(或者一次只掷一个)吗?这样会得到更多的状态,每个状态都有相同的概率。例如,有三个骰子的6^3 = 216状态,如果它们是按颜色排序的(或按投掷顺序)。对于transmat的第一行,它可以是:

c(
"1,1,1 - 5,4,4" = 0.768518519,
"5,4,5 - 6,3,5" = 0.143518519,
"6,3,6 - 6,6,2" = 0.069444444,
"      -      " = 0,
"6,6,3 - 6,6,4" = 0.009259259,
"6,6,5 - 6,6,6" = 0.009259259
)
#> 1,1,1 - 5,4,4 5,4,5 - 6,3,5 6,3,6 - 6,6,2      -        6,6,3 - 6,6,4 6,6,5 - 6,6,6 
#>  0.768518519   0.143518519   0.069444444   0.000000000   0.009259259   0.009259259

每增加一个模/辊,精度将提高6倍。

如果可以的话,我有一些关于自动化的想法。

最新更新