马尔可夫链过程 - 缺失值

机器算法验证 r 马尔科夫过程
2022-03-16 14:07:35

我有一个包含存在 ( 1) 和不存在 ( ) 的序列向量,0我计算了一阶马尔可夫过程。

这是数据的样子:

dataset=c(NA,NA,0,0,0,0,1,0,1,1,0,1,1,NA,NA,NA,NA,NA,0,
          1,1,1,1,1,1,0,NA,1,1,1,1,1,1,0,0,NA,NA,0,1,1,
          NA,NA,0,NA,0,0,0,1,1,1,0,1,1,1,1,0,1,NA,0,1)

对于我计算的 thsi 向量:

  • 存在概率 ( P1) 和不存在概率 ( P0)
  • P11出现后出现的概率 ( )、出现后出现的概率( P10)、缺席后出现的概率 ( P01) 和缺席后出现的概率 ( P00)

通过使用循环检查 2 个值的序列来获得转换概率:计算P_00我正在使用

   P_00 : dataset[j]==0 & dataset[j+1]==0 , etc.

这些是结果:

P_0=0.3913043
P_1=0.6086957
P_0+P_1=1

P_00=0.1538462
P_01=0.2307692
P_11=0.4615385
P_10=0.1538462
P_00+P_01+P_11+P_10=1

这个想法是根据为序列获得的概率值用存在/不存在序列填充 NA。问题是,目前我无法为这个问题找到最好和更合适的过程,而且我是遇到这类问题的新手。即使已经有一个包可以为我做到这一点,我更愿意了解我该怎么做。

1个回答

这在贝叶斯建模中是最好且最透明的。贝叶斯推理使用 MCMC(马尔可夫链蒙特卡罗)模拟,这正是您所需要的。错误中的示例模型代码(未经测试!):

dataset[1] ~ dbern(P1) # you must somehow solve the first element
for (i in 2:n) { # markov chain - define how each value depends on the previous one
    dataset[i] ~ dbern(p.presence[dataset[i - 1]])
}

dbern(p)代表具有概率的伯努利分布p该数组p.presence可以定义为(使用P*定义的变量):

p.presence[0] = P01 / P0   # probability of presence, given absence in previous step
p.presence[1] = P11 / P1   # probability of presence, given presence in previous step

这样你可以p.presence作为输入数据传递(如你的例子),但你也可以让错误从数据中估计它!(这更为常见和合理)。您当然可以获取 中缺失值 (NA) 的后验分布和 MCMC 模拟样本dataset,并计算其上的各种其他统计数据。