Эффективный эмпирический расчет распределения
Рассмотрим эмпирическую оценку условного распределения дискретного в обоих X
а также Y
,
Pr(Y|X)
Обе переменные были сопоставлены с целочисленными наборами, так что
X in {1, ..., N_X} and Y in {1, ..., N_Y}
У меня есть дата наблюдения obs
такой, что obs$x[t]
а также obs$y[t]
мои наблюдаемые X
а также Y
значения для события t
,
Мой вопрос в том, что является наиболее эффективным способом преобразования obs
в матрицу F
содержащие эмпирические распределения, такие что
F[i,j] = sum((obs$x == i) & (obs$y == j))/sum(obs$x == i)
Конечно, я могу использовать двойной цикл для i in (1:N_X)
а также j in (1:N_Y)
но я ищу самый эффективный способ.
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)
хотел бы узнать более быстрый метод для расчета этого