根据经验估算X
和Y
中的条件分布离散,
Pr(Y|X)
两个变量都已映射到整数集,例如
X in {1, ..., N_X} and Y in {1, ..., N_Y}
我有一个观察数据框obs
,因此obs$x[t]
和obs$y[t]
是我观察到的事件X
的{{1}}和Y
值
我的问题是,将t
转换为包含经验分布的矩阵obs
的最有效方法是什么
F
当然我可以为F[i,j] = sum((obs$x == i) & (obs$y == j))/sum(obs$x == i)
和i in (1:N_X)
使用双for循环,但我正在寻找最有效的方法。
答案 0 :(得分:1)
这是一个使用data.table
的方法,可能会进一步优化
#data
library(data.table)
Nx <- 1e3
Ny <- 1e2
num <- 1e4
set.seed(1L)
obs <- data.table(t=1:num,
x=sample(1:Nx, num, replace=TRUE),
y=sample(1:Ny, num, replace=TRUE))
#calculate F_{i,j}
ans <- obs[, {
n = .N
.SD[, list(Fxy=.N/n), by=.(y)]
}, by=.(x)]
#convert into matrix
library(Matrix)
matAns <- as.matrix(sparseMatrix(
i=ans[["x"]],
j=ans[["y"]],
x=ans[["Fxy"]]
))
head(matAns)
很想学习更快的计算方法