R中对的联合概率

Joint probability of pairs in R

我有一个矩阵,其中包含来自序列的连续值对。

例如,在像 [1,1,3,3,3,4,4,2,4,2,2] 这样的序列中,我会将以下对存储在矩阵中。

1, 1
1, 3
3, 3
3, 3
3, 4
4, 4
4, 2
2, 4
4, 2
2, 2

并且,我想获得每个唯一对的出现概率。

例如,对于像 (a,b) 这样的一对,joint_prob(a,b) = cond_prob(b|a)/prob(a)

(1,1) 0.5
(1,3) 0.5
(3,3) 0.6
and so on..

我是否可以在 R 中执行此操作而无需使用许多循环?通过使用内置库?有人可以帮助我以有效的方式做到这一点吗?

这个怎么样?

d <- c(1,1,3,3,3,4,4,2,4,2,2)
tr <- NULL
for (i in 1:(length(d)-1)) {  # all bigrams
  tr <- rbind(tr, data.frame(x=d[i], y=d[i+1]))
}
tbl <- table(tr)
joint_prob <- tbl / rowSums(tbl) # joint probability table
joint_prob[1,1]
# 0.5
joint_prob[1,3]
# 0.5
joint_prob[3,3]
# 0.6666667